summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Petter <hansp@src.gnome.org>2008-09-16 00:56:32 +0000
committerHans Petter <hansp@src.gnome.org>2008-09-16 00:56:32 +0000
commit049f48ef9ce578cc69a0c06e5e7b34dcd78d7da2 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parentf9a652b340aadaefad6f3797d62a4ebbd33e1c85 (diff)
downloadgvfs-049f48ef9ce578cc69a0c06e5e7b34dcd78d7da2.tar.gz
Prepare to re-tag 0.99.8 to get POTFILES.in change in.GVFS_0_99_8_svn1988
svn path=/tags/GVFS_0_99_8; revision=1987
-rw-r--r--.gitignore33
-rw-r--r--AUTHORS60
-rw-r--r--COPYING482
-rw-r--r--CVSVERSION0
-rw-r--r--ChangeLog5059
-rw-r--r--INSTALL3
-rw-r--r--MAINTAINERS8
-rw-r--r--Makefile.am24
-rw-r--r--NEWS275
-rw-r--r--README21
-rw-r--r--TODO32
-rwxr-xr-xautogen.sh126
-rw-r--r--client/.gitignore1
-rw-r--r--client/Makefile.am81
-rw-r--r--client/gdaemonfile.c2805
-rw-r--r--client/gdaemonfile.h54
-rw-r--r--client/gdaemonfileenumerator.c461
-rw-r--r--client/gdaemonfileenumerator.h57
-rw-r--r--client/gdaemonfileinputstream.c1643
-rw-r--r--client/gdaemonfileinputstream.h52
-rw-r--r--client/gdaemonfilemonitor.c213
-rw-r--r--client/gdaemonfilemonitor.h52
-rw-r--r--client/gdaemonfileoutputstream.c1374
-rw-r--r--client/gdaemonfileoutputstream.h53
-rw-r--r--client/gdaemonmount.c421
-rw-r--r--client/gdaemonmount.h57
-rw-r--r--client/gdaemonvfs.c1002
-rw-r--r--client/gdaemonvfs.h73
-rw-r--r--client/gdaemonvolumemonitor.c329
-rw-r--r--client/gdaemonvolumemonitor.h60
-rw-r--r--client/gvfsdaemondbus.c1024
-rw-r--r--client/gvfsdaemondbus.h80
-rw-r--r--client/gvfsfusedaemon.c2207
-rw-r--r--client/gvfsurimapper.c220
-rw-r--r--client/gvfsurimapper.h109
-rw-r--r--client/gvfsuriutils.c288
-rw-r--r--client/gvfsuriutils.h50
-rw-r--r--client/httpuri.c313
-rw-r--r--client/smburi.c297
-rw-r--r--client/test-uri-utils.c58
-rw-r--r--common/Makefile.am27
-rw-r--r--common/gdbusutils.c1391
-rw-r--r--common/gdbusutils.h100
-rw-r--r--common/gmountoperationdbus.c324
-rw-r--r--common/gmountoperationdbus.h40
-rw-r--r--common/gmountsource.c741
-rw-r--r--common/gmountsource.h115
-rw-r--r--common/gmountspec.c534
-rw-r--r--common/gmountspec.h103
-rw-r--r--common/gmounttracker.c647
-rw-r--r--common/gmounttracker.h86
-rw-r--r--common/gsysutils.c181
-rw-r--r--common/gsysutils.h39
-rw-r--r--common/gvfsdaemonprotocol.c614
-rw-r--r--common/gvfsdaemonprotocol.h186
-rw-r--r--configure.ac584
-rw-r--r--daemon/.gitignore16
-rw-r--r--daemon/Makefile.am397
-rw-r--r--daemon/ParseFTPList.c1842
-rw-r--r--daemon/ParseFTPList.h127
-rw-r--r--daemon/archive.mount.in5
-rw-r--r--daemon/burn.mount.in5
-rw-r--r--daemon/cdda.mount.in4
-rw-r--r--daemon/computer.mount.in5
-rw-r--r--daemon/daemon-main-generic.c59
-rw-r--r--daemon/daemon-main.c272
-rw-r--r--daemon/daemon-main.h45
-rw-r--r--daemon/dav.mount.in4
-rw-r--r--daemon/dbus-gmain.c717
-rw-r--r--daemon/dbus-gmain.h63
-rw-r--r--daemon/dns-sd.mount.in4
-rw-r--r--daemon/ftp.mount.in7
-rw-r--r--daemon/gphoto2.mount.in4
-rw-r--r--daemon/gvfs-daemon.service.in3
-rw-r--r--daemon/gvfsbackend.c654
-rw-r--r--daemon/gvfsbackend.h432
-rw-r--r--daemon/gvfsbackendarchive.c771
-rw-r--r--daemon/gvfsbackendarchive.h50
-rw-r--r--daemon/gvfsbackendburn.c976
-rw-r--r--daemon/gvfsbackendburn.h50
-rw-r--r--daemon/gvfsbackendcdda.c936
-rw-r--r--daemon/gvfsbackendcdda.h54
-rw-r--r--daemon/gvfsbackendcomputer.c1126
-rw-r--r--daemon/gvfsbackendcomputer.h50
-rw-r--r--daemon/gvfsbackenddav.c2160
-rw-r--r--daemon/gvfsbackenddav.h50
-rw-r--r--daemon/gvfsbackenddnssd.c731
-rw-r--r--daemon/gvfsbackenddnssd.h50
-rw-r--r--daemon/gvfsbackendftp.c2410
-rw-r--r--daemon/gvfsbackendftp.h50
-rw-r--r--daemon/gvfsbackendgphoto2.c3404
-rw-r--r--daemon/gvfsbackendgphoto2.h51
-rw-r--r--daemon/gvfsbackendhttp.c675
-rw-r--r--daemon/gvfsbackendhttp.h79
-rw-r--r--daemon/gvfsbackendlocaltest.c1252
-rw-r--r--daemon/gvfsbackendlocaltest.h94
-rw-r--r--daemon/gvfsbackendnetwork.c864
-rw-r--r--daemon/gvfsbackendnetwork.h55
-rw-r--r--daemon/gvfsbackendobexftp-cap-parser.c595
-rw-r--r--daemon/gvfsbackendobexftp-cap-parser.h53
-rw-r--r--daemon/gvfsbackendobexftp-fl-parser.c424
-rw-r--r--daemon/gvfsbackendobexftp-fl-parser.h37
-rw-r--r--daemon/gvfsbackendobexftp.c1489
-rw-r--r--daemon/gvfsbackendobexftp.h50
-rw-r--r--daemon/gvfsbackendsftp.c3913
-rw-r--r--daemon/gvfsbackendsftp.h50
-rw-r--r--daemon/gvfsbackendsmb.c1933
-rw-r--r--daemon/gvfsbackendsmb.h53
-rw-r--r--daemon/gvfsbackendsmbbrowse.c1225
-rw-r--r--daemon/gvfsbackendsmbbrowse.h53
-rw-r--r--daemon/gvfsbackendtest.c352
-rw-r--r--daemon/gvfsbackendtest.h56
-rw-r--r--daemon/gvfsbackendtrash.c1862
-rw-r--r--daemon/gvfsbackendtrash.h50
-rw-r--r--daemon/gvfschannel.c704
-rw-r--r--daemon/gvfschannel.h89
-rw-r--r--daemon/gvfsdaemon.c1060
-rw-r--r--daemon/gvfsdaemon.h76
-rw-r--r--daemon/gvfsdaemonutils.c288
-rw-r--r--daemon/gvfsdaemonutils.h52
-rw-r--r--daemon/gvfsjob.c327
-rw-r--r--daemon/gvfsjob.h108
-rw-r--r--daemon/gvfsjobcloseread.c133
-rw-r--r--daemon/gvfsjobcloseread.h63
-rw-r--r--daemon/gvfsjobclosewrite.c141
-rw-r--r--daemon/gvfsjobclosewrite.h67
-rw-r--r--daemon/gvfsjobcopy.c211
-rw-r--r--daemon/gvfsjobcopy.h67
-rw-r--r--daemon/gvfsjobcreatemonitor.c246
-rw-r--r--daemon/gvfsjobcreatemonitor.h71
-rw-r--r--daemon/gvfsjobdbus.c196
-rw-r--r--daemon/gvfsjobdbus.h70
-rw-r--r--daemon/gvfsjobdelete.c156
-rw-r--r--daemon/gvfsjobdelete.h63
-rw-r--r--daemon/gvfsjobenumerate.c320
-rw-r--r--daemon/gvfsjobenumerate.h78
-rw-r--r--daemon/gvfsjobmakedirectory.c156
-rw-r--r--daemon/gvfsjobmakedirectory.h63
-rw-r--r--daemon/gvfsjobmakesymlink.c162
-rw-r--r--daemon/gvfsjobmakesymlink.h64
-rw-r--r--daemon/gvfsjobmount.c216
-rw-r--r--daemon/gvfsjobmount.h68
-rw-r--r--daemon/gvfsjobmountmountable.c216
-rw-r--r--daemon/gvfsjobmountmountable.h76
-rw-r--r--daemon/gvfsjobmove.c210
-rw-r--r--daemon/gvfsjobmove.h71
-rw-r--r--daemon/gvfsjobopenforread.c219
-rw-r--r--daemon/gvfsjobopenforread.h70
-rw-r--r--daemon/gvfsjobopenforwrite.c312
-rw-r--r--daemon/gvfsjobopenforwrite.h85
-rw-r--r--daemon/gvfsjobpull.c217
-rw-r--r--daemon/gvfsjobpull.h67
-rw-r--r--daemon/gvfsjobpush.c217
-rw-r--r--daemon/gvfsjobpush.h67
-rw-r--r--daemon/gvfsjobqueryattributes.c190
-rw-r--r--daemon/gvfsjobqueryattributes.h70
-rw-r--r--daemon/gvfsjobqueryfsinfo.c184
-rw-r--r--daemon/gvfsjobqueryfsinfo.h66
-rw-r--r--daemon/gvfsjobqueryinfo.c201
-rw-r--r--daemon/gvfsjobqueryinfo.h69
-rw-r--r--daemon/gvfsjobread.c154
-rw-r--r--daemon/gvfsjobread.h69
-rw-r--r--daemon/gvfsjobseekread.c151
-rw-r--r--daemon/gvfsjobseekread.h72
-rw-r--r--daemon/gvfsjobseekwrite.c151
-rw-r--r--daemon/gvfsjobseekwrite.h71
-rw-r--r--daemon/gvfsjobsetattribute.c192
-rw-r--r--daemon/gvfsjobsetattribute.h68
-rw-r--r--daemon/gvfsjobsetdisplayname.c178
-rw-r--r--daemon/gvfsjobsetdisplayname.h68
-rw-r--r--daemon/gvfsjobsource.c107
-rw-r--r--daemon/gvfsjobsource.h62
-rw-r--r--daemon/gvfsjobtrash.c156
-rw-r--r--daemon/gvfsjobtrash.h63
-rw-r--r--daemon/gvfsjobunmount.c169
-rw-r--r--daemon/gvfsjobunmount.h62
-rw-r--r--daemon/gvfsjobunmountmountable.c196
-rw-r--r--daemon/gvfsjobunmountmountable.h66
-rw-r--r--daemon/gvfsjobwrite.c153
-rw-r--r--daemon/gvfsjobwrite.h71
-rw-r--r--daemon/gvfskeyring.c133
-rw-r--r--daemon/gvfskeyring.h53
-rw-r--r--daemon/gvfsmonitor.c321
-rw-r--r--daemon/gvfsmonitor.h67
-rw-r--r--daemon/gvfsreadchannel.c277
-rw-r--r--daemon/gvfsreadchannel.h60
-rw-r--r--daemon/gvfswritechannel.c215
-rw-r--r--daemon/gvfswritechannel.h60
-rw-r--r--daemon/http.mount.in5
-rw-r--r--daemon/libsmb-compat.h189
-rw-r--r--daemon/localtest.mount.in4
-rw-r--r--daemon/main.c131
-rw-r--r--daemon/mount.c1207
-rw-r--r--daemon/mount.h37
-rw-r--r--daemon/network.mount.in4
-rw-r--r--daemon/obexftp-marshal.list2
-rw-r--r--daemon/obexftp.mount.in4
-rw-r--r--daemon/pty_open.c843
-rw-r--r--daemon/pty_open.h65
-rw-r--r--daemon/sftp.h87
-rw-r--r--daemon/sftp.mount.in8
-rw-r--r--daemon/smb-browse.mount.in6
-rw-r--r--daemon/smb.mount.in5
-rw-r--r--daemon/soup-input-stream.c917
-rw-r--r--daemon/soup-input-stream.h78
-rw-r--r--daemon/soup-output-stream.c417
-rw-r--r--daemon/soup-output-stream.h63
-rw-r--r--daemon/trash.mount.in5
-rw-r--r--dbus.txt83
-rw-r--r--gconf/Makefile.am32
-rw-r--r--gconf/gapplookupgconf.c184
-rw-r--r--gconf/gapplookupgconf.h51
-rw-r--r--gconf/gconf-module.c45
-rw-r--r--monitor/Makefile.am10
-rw-r--r--monitor/gphoto2/Makefile.am60
-rw-r--r--monitor/gphoto2/ggphoto2volume.c575
-rw-r--r--monitor/gphoto2/ggphoto2volume.h66
-rw-r--r--monitor/gphoto2/ggphoto2volumemonitor.c564
-rw-r--r--monitor/gphoto2/ggphoto2volumemonitor.h54
-rw-r--r--monitor/gphoto2/gphoto2-volume-monitor-daemon.c43
-rw-r--r--monitor/gphoto2/gphoto2.monitor4
-rw-r--r--monitor/gphoto2/hal-device.c297
-rw-r--r--monitor/gphoto2/hal-device.h93
-rw-r--r--monitor/gphoto2/hal-marshal.c163
-rw-r--r--monitor/gphoto2/hal-marshal.h36
-rw-r--r--monitor/gphoto2/hal-marshal.list3
-rw-r--r--monitor/gphoto2/hal-pool.c458
-rw-r--r--monitor/gphoto2/hal-pool.h74
-rw-r--r--monitor/gphoto2/hal-utils.c142
-rw-r--r--monitor/gphoto2/hal-utils.h40
-rw-r--r--monitor/gphoto2/org.gtk.Private.GPhoto2VolumeMonitor.service.in3
-rw-r--r--monitor/hal/Makefile.am62
-rw-r--r--monitor/hal/ghaldrive.c1009
-rw-r--r--monitor/hal/ghaldrive.h62
-rw-r--r--monitor/hal/ghalmount.c1592
-rw-r--r--monitor/hal/ghalmount.h76
-rw-r--r--monitor/hal/ghalvolume.c1068
-rw-r--r--monitor/hal/ghalvolume.h84
-rw-r--r--monitor/hal/ghalvolumemonitor.c1399
-rw-r--r--monitor/hal/ghalvolumemonitor.h58
-rw-r--r--monitor/hal/hal-device.c297
-rw-r--r--monitor/hal/hal-device.h93
-rw-r--r--monitor/hal/hal-marshal.list3
-rw-r--r--monitor/hal/hal-pool.c458
-rw-r--r--monitor/hal/hal-pool.h74
-rw-r--r--monitor/hal/hal-utils.c171
-rw-r--r--monitor/hal/hal-utils.h42
-rw-r--r--monitor/hal/hal-volume-monitor-daemon.c43
-rw-r--r--monitor/hal/hal.monitor5
-rw-r--r--monitor/hal/org.gtk.Private.HalVolumeMonitor.service.in3
-rw-r--r--monitor/proxy/Makefile.am67
-rw-r--r--monitor/proxy/gproxydrive.c578
-rw-r--r--monitor/proxy/gproxydrive.h55
-rw-r--r--monitor/proxy/gproxymount.c560
-rw-r--r--monitor/proxy/gproxymount.h56
-rw-r--r--monitor/proxy/gproxyvolume.c689
-rw-r--r--monitor/proxy/gproxyvolume.h58
-rw-r--r--monitor/proxy/gproxyvolumemonitor.c1278
-rw-r--r--monitor/proxy/gproxyvolumemonitor.h76
-rw-r--r--monitor/proxy/gvfsproxyvolumemonitordaemon.c1155
-rw-r--r--monitor/proxy/gvfsproxyvolumemonitordaemon.h35
-rw-r--r--monitor/proxy/remote-volume-monitor-module.c67
-rw-r--r--po/.gitignore14
-rw-r--r--po/ChangeLog1290
-rw-r--r--po/LINGUAS52
-rw-r--r--po/POTFILES.in80
-rw-r--r--po/ar.po1586
-rw-r--r--po/be@latin.po1568
-rw-r--r--po/bg.po1541
-rw-r--r--po/bn_IN.po1362
-rw-r--r--po/ca.po1623
-rw-r--r--po/cs.po1537
-rw-r--r--po/da.po1367
-rw-r--r--po/de.po1558
-rw-r--r--po/el.po1408
-rw-r--r--po/en_GB.po1551
-rw-r--r--po/es.po1562
-rw-r--r--po/et.po1556
-rw-r--r--po/eu.po1538
-rw-r--r--po/fi.po1589
-rw-r--r--po/fr.po1591
-rw-r--r--po/ga.po1524
-rw-r--r--po/gl.po1596
-rw-r--r--po/gu.po1524
-rw-r--r--po/he.po1579
-rw-r--r--po/hi.po1348
-rw-r--r--po/hu.po1370
-rw-r--r--po/it.po1659
-rw-r--r--po/ja.po1540
-rw-r--r--po/ko.po1371
-rw-r--r--po/ku.po1362
-rw-r--r--po/lt.po1551
-rw-r--r--po/mk.po1556
-rw-r--r--po/ml.po1564
-rw-r--r--po/mr.po1532
-rw-r--r--po/nb.po1536
-rw-r--r--po/nl.po1567
-rw-r--r--po/nn.po1350
-rw-r--r--po/pa.po1547
-rw-r--r--po/pl.po1745
-rw-r--r--po/pt.po1586
-rw-r--r--po/pt_BR.po1602
-rw-r--r--po/ru.po1344
-rw-r--r--po/sk.po2235
-rw-r--r--po/sl.po1710
-rw-r--r--po/sr.po2737
-rw-r--r--po/sr@latin.po2737
-rw-r--r--po/sv.po2007
-rw-r--r--po/ta.po1551
-rw-r--r--po/te.po1539
-rw-r--r--po/th.po1571
-rw-r--r--po/tr.po1382
-rw-r--r--po/uk.po1375
-rw-r--r--po/vi.po1541
-rw-r--r--po/zh_CN.po1529
-rw-r--r--po/zh_HK.po1552
-rw-r--r--po/zh_TW.po1555
-rw-r--r--programs/Makefile.am85
-rwxr-xr-xprograms/gvfs-bash-completion.sh52
-rw-r--r--programs/gvfs-cat.c193
-rw-r--r--programs/gvfs-copy.c193
-rw-r--r--programs/gvfs-info.c359
-rwxr-xr-xprograms/gvfs-less23
-rw-r--r--programs/gvfs-ls.c437
-rw-r--r--programs/gvfs-mkdir.c95
-rw-r--r--programs/gvfs-monitor-dir.c116
-rw-r--r--programs/gvfs-monitor-file.c105
-rw-r--r--programs/gvfs-mount.c613
-rw-r--r--programs/gvfs-move.c184
-rw-r--r--programs/gvfs-open.c161
-rw-r--r--programs/gvfs-rename.c80
-rw-r--r--programs/gvfs-rm.c69
-rw-r--r--programs/gvfs-save.c184
-rw-r--r--programs/gvfs-trash.c70
-rw-r--r--programs/gvfs-tree.c280
-rw-r--r--test/Makefile.am19
-rw-r--r--test/benchmark-common.c217
-rw-r--r--test/benchmark-gvfs-big-files.c191
-rw-r--r--test/benchmark-gvfs-small-files.c191
-rw-r--r--test/benchmark-posix-big-files.c192
-rw-r--r--test/benchmark-posix-small-files.c192
-rw-r--r--txt/gvfs_dbus.txt65
-rw-r--r--txt/ops.txt140
-rw-r--r--txt/rfc3986.txt3419
-rw-r--r--txt/rfc3987.txt2579
-rw-r--r--txt/vfs-ideas.txt425
-rw-r--r--txt/vfs-names.txt142
347 files changed, 0 insertions, 181702 deletions
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 373ad3c9..00000000
--- a/.gitignore
+++ /dev/null
@@ -1,33 +0,0 @@
-Makefile
-Makefile.in
-*~
-*.o
-*.la
-*.lo
-*.exe
-.deps
-.libs
-test
-aclocal.m4
-autom4te.cache
-config.cache
-config.h
-config.h.in
-config.h.win32
-config.log
-config.status
-config.guess
-config.sub
-configure
-libtool
-depcomp
-ltmain.sh
-install-sh
-missing
-mkinstalldirs
-stamp-h1
-core.*
-core
-compile
-gtk-doc.make
-*.pc
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644
index 3b422dbc..00000000
--- a/AUTHORS
+++ /dev/null
@@ -1,60 +0,0 @@
-Overall Superhero (Desgin, Implementation, etc pp)
-==================================================
-Alexander Larsson <alexl@redhat.com>
-
-
-FUSE Integration
-===============
-Hans Petter Jansson <hpj@novell.com>
-
-HAL Integration
-===============
-David Zeuthen <davidz@redhat.com>
-
-Keyring Integration
-===================
-Carlos Garcia Campos <carlosgc@gnome.org>
-
-Backends
-=====================================
-
-CDDA backend
-============
-David Zeuthen <davidz@redhat.com>
-
-Gphoto2 backend
-===============
-David Zeuthen <davidz@redhat.com>
-
-Archive Backend
-===============
-Benjamin Otte <otte@gnome.org>
-
-FTP Backend
-===========
-Benjamin Otte <otte@gnome.org>
-
-Http/WebDAV Backend
-===================
-Christian Kellner <gicmo@gnome.org>
-Dan Winship <danw@gnome.org>
-
-Network Backend
-===============
-Andrew Walton <awalton@svn.gnome.org>
-
-ObexFTP Backend
-===============
-Bastien Nocera <hadess@hadess.net>
-
-SFTP Backend
-===========
-Alexander Larsson <alexl@redhat.com>
-
-Smb Backend
-===========
-Alexander Larsson <alexl@redhat.com>
-
-Test Backend
-============
-Tomas Bzatek <tbzatek@redhat.com>
diff --git a/COPYING b/COPYING
deleted file mode 100644
index bf50f20d..00000000
--- a/COPYING
+++ /dev/null
@@ -1,482 +0,0 @@
- GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/CVSVERSION b/CVSVERSION
deleted file mode 100644
index e69de29b..00000000
--- a/CVSVERSION
+++ /dev/null
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644
index 54bb79d0..00000000
--- a/ChangeLog
+++ /dev/null
@@ -1,5059 +0,0 @@
-=== gvfs 0.99.8 ===
-
-2008-09-15 Hans Petter Jansson <hpj@novell.com>
-
- * NEWS:
- * configure.ac: Prepare for 0.99.8 release.
-
-2008-09-15 Tomas Bzatek <tbzatek@redhat.com>
-
- * client/smburi.c:
- Encode username and domain into the URI
-
-2008-09-15 Tomas Bzatek <tbzatek@redhat.com>
-
- * daemon/gvfsbackendsmb.c:
- Revert commit #1772.
- Set the information on the mount spec from the original URI
-
-2008-09-15 Christian Kellner <gicmo@gnome.org>
-
- * client/gdaemonfile.c:
- Don't leak the GSimpleAsyncResult in find_enclosing_mount_async.
- Patch by Matthias Clasen <mclasen@redhat.com) (#552295)
-
-2008-09-15 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * client/gdaemonfileenumerator.c:
- Add proper implementation of async file enumeration.
- This avoids the problem with the default thread based ones
- that could cause callbacks in the non-mainloop thread. (#551337)
-
-2008-09-15 Christian Kellner <gicmo@gnome.org>
-
- * configure.ac: Fix gnome-keyring configure switch
- Patch by Rémi Cardona <remi@gentoo.org> (#552126)
-
-=== gvfs 0.99.7.1 ===
-
-2008-09-09 Bastien Nocera <hadess@hadess.net>
-
- * NEWS: upd
- * configure.ac: 0.99.7.1
-
-2008-09-02 David Zeuthen <davidz@redhat.com>
-
- * monitor/hal/ghaldrive.c: (g_hal_drive_eject_do):
- * monitor/hal/ghalmount.c: (unmount_cb), (unmount_do),
- (eject_wrapper_callback), (g_hal_mount_eject):
- * monitor/proxy/gproxymount.c: (eject_wrapper_callback),
- (g_proxy_mount_eject):
- * monitor/proxy/gproxyvolume.c: (eject_wrapper_callback):
- Remember to refcount objects (#546971).
-
-2008-09-02 David Zeuthen <davidz@redhat.com>
-
- * monitor/hal/ghalvolume.c (format_size_for_display): Add docs
- explaining why powers of 10 are used.
-
-2008-09-02 David Zeuthen <davidz@redhat.com>
-
- * monitor/hal/ghalvolume.c (do_update_from_hal): Revert patch from
- bug 550100 - we really don't want to show "61.7MB Volume" instead
- of "64M Volume".
-
-2008-09-01 Hans Petter Jansson <hpj@novell.com>
-
- * configure.ac: Post-release version bump to 0.99.7.
-
-=== gvfs 0.99.6 ===
-
-2008-09-01 Hans Petter Jansson <hpj@novell.com>
-
- * NEWS: Update for 0.99.6.
-
-2008-09-01 Christian Kellner <gicmo@gnome.org>
-
- * configure.ac:
- Require libsoup >= 2.23.91
-
-2008-09-01 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsjobpull.c:
- * daemon/gvfsjobpull.h:
- New daemon method to pull files from daemons to the local
- file system.
-
- * daemon/gvfsjobpush.c:
- * daemon/gvfsjobpush.h:
- New daemon method to push local files to daemons. (Replaces
- Upload)
-
- * daemon/gvfsjobupload.c:
- * daemon/gvfsjobupload.h:
- Replaced by Push.
-
- * common/gvfsdaemonprotocol.h:
- * daemon/Makefile.am:
- * daemon/gvfsbackend.c:
- * daemon/gvfsbackend.h:
- Add Push and Pull. Remove Upload.
-
- * client/gdaemonfile.c:
- New transfer logic. In case of move try push/pull (with
- remove_source set to TRUE) first then fallback. In case of copy
- try push/pull first then fallback. Use the same logic for
- both cases.
-
- * daemon/gvfsbackendburn.c:
- Port Upload to Push.
-
- * daemon/gvfsbackendtrash.c:
- Implement the Pull method. That should fix bug #529971
-
-2008-09-01 Christian Kellner <gicmo@gnome.org>
-
- * monitor/hal/ghalvolume.c: (do_update_from_hal):
- Use g_format_size_for_display for consistency.
- Patch from Christian Persch <chpe@gnome.org>
- Fixes bug #550100
-
-2008-08-30 Matthias Clasen <mclasen@redhat.com>
-
- * common/gmountspec.c (g_mount_spec_from_dbus): Plug a tiny
- memory leak.
-
-2008-08-28 David Zeuthen <davidz@redhat.com>
-
- * monitor/proxy/gproxyvolume.c: (g_proxy_volume_mount):
- * monitor/proxy/gvfsproxyvolumemonitordaemon.c:
- (handle_volume_mount): Make sure we really read mount_flags and
- use_mount_operation. Fixes RH bug 460223.
-
-2008-08-27 Bastien Nocera <hadess@hadess.net>
-
- * client/gdaemonvfs.c (get_mountspec_from_uri),
- (_g_daemon_vfs_get_uri_for_mountspec): Don't drop
- query and fragment portions of the URI when decoding
- it and the URI scheme isn't handled by any backends
- (Closes: #549553)
-
-2008-08-25 Matthias Clasen <mclasen@redhat.com>
-
- Bug 549253 – error path leaks
-
- * common/gmountoperationdbus.c:
- * common/gdbusutils.c:
- * daemon/gvfsbackendgphoto2.c:
- * daemon/gvfsbackendtrash.c:
- * daemon/gvfsjobsetattribute.c: Plug some leaks on
- error paths.
-
-2008-08-25 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackenddav.c (ms_response_to_file_info):
- Same as below but for the webdav's getlastmodified
- response (Closes: #538573)
-
-2008-08-22 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendhttp.c (query_info_ready): Use
- libsoup to parse the "Last-Modified" header, not
- the ISO-8601 parsing functions (Closes: #547133)
- Requires libsoup trunk
-
-2008-08-21 Hans Petter Jansson <hpj@novell.com>
-
- * daemon/gvfsbackendgphoto2.c (ensure_ignore_prefix)
- (do_mount)
- (do_enumerate): Improve various user- and translator-
- unfriendly error messages.
-
-2008-08-21 Hans Petter Jansson <hpj@novell.com>
-
- * configure.ac: Late post-release version bump to 0.99.6.
-
-2008-08-21 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * daemon/gvfsbackendgphoto2.c (do_unmount):
- Handle plural forms correctly. Fixes bug #548841.
-
-=== gvfs 0.99.5 ===
-
-2008-08-16 Jesse van den Kieboom <jesse@icecrew.nl>
-
- * daemon/gvfsbackenddav.c:
- Fixed using display_name property getting overwritten
-
-2008-08-16 Christian Neumair <cneumair@gnome.org>
-
- * daemon/gvfsbackendtrash.c (add_extra_trash_info):
- Correctly set copy name to original file name. Fixes #41852.
-
-2008-08-07 Jesse van den Kieboom <jesse@icecrew.nl>
-
- * client/gdaemonfileoutputstream.c:
- Fixed crash in gio because error was not properly
- being set in the query_info noop
-
-2008-08-05 Jesse van den Kieboom <jesse@icecrew.nl>
-
- * daemon/gvfsbackendsftp.c:
- Added restoring file permissions when replacing a file.
-
-2008-08-05 Christian Kellner <gicmo@gnome.org>
-
- * client/gdaemonfile.c:
- Remove wrong dbus reply struct checks for replace_async,
- create_async and append_async that would live to (false)
- invalid reply errors.
-
-2008-08-05 Jesse van den Kieboom <jesse@icecrew.nl>
-
- * client/gdaemonfile.c:
- Set etag to "" when supplied to g_daemon_file_replace_async
- with NULL. Bug #546300
-
-2008-08-05 Christian Kellner <gicmo@gnome.org>
-
- * configure.ac: Post-release bump to 0.99.5.
-
-=== gvfs 0.99.4 ===
-
-2008-08-05 Christian Kellner <gicmo@gnome.org>
-
- * NEWS: Update for release
-
-2008-08-05 Christian Kellner <gicmo@gnome.org>
-
- * configure.ac:
- Require glib 2.17.6 (cause by GEmblemedIcon changes)
-
-2008-08-05 Christian Kellner <gicmo@gnome.org>
-
- * monitor/hal/ghaldrive.c:
- Various ref counting fixes.
-
- * monitor/hal/ghalvolume.c:
- Report error in idle to avoid calling a callback with the
- volume lock held.
- Use volume lock in hhal_volume_get_activation_root. Various
- ref counting fixes.
-
- Bug #545489. Based on a patch from Matthias Clasen.
-
-2008-08-04 Christian Kellner <gicmo@gnome.org>
-
- * client/gdaemonfile.c: (g_daemon_file_replace_async):
- Correctly set the mode to 2 resulting in the replace vfunc being
- called inside the backends.
- Bug #544008. Patch by Jesse van den Kieboom <jesse@icecrew.net>
-
-2008-08-04 Matthias Clasen <mclasen@redhat.com>
-
- * monitor/proxy/gvfsproxyvolumemonitordaemon.c:
- * monitor/proxy/gproxyvolumemonitor.c: Update the GIcon serialization
- code to work with GEmblem.
-
-2008-08-03 Christian Kellner <gicmo@gnome.org>
-
- * client/gvfsfusedaemon.c:
- Avoid a race between the subthread and the main thread in the case
- of dbus going bye-bye.
- Bug #543552. Patch from Austin Lund <austin.lund@gmail.com>
-
-2008-08-02 Christian Kellner <gicmo@gnome.org>
-
- * client/gdaemonvfs.c:
- Make sure we handle URI schemes case insensitive, so that File://
- and other versions also work. Bug #528891
-
-2008-08-02 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackendtrash.c: Don't include internal mounts
- while building up the list of trash directories. Bug #525779
- Patcg from A. Walton <awalton@svn.gnome.org>
-
-2008-08-02 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c: (parse_xml): Free the xml doc in
- error cases. Plug the leaks, fix bug #545968, thanks to
- Christian Persch <chpe@gnome.org> again!
-
-2008-08-02 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Use XML_PARSE_NONET with xmlReadMemory when parsing the webdav
- responses to disallow net access of the parser. Bug #545966
- Patch by Christian Persch <chpe@gnome.org>
-
-2008-08-02 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackendtrash.c: (list_trash_dirs):
- Create the home trash directory if it doesn't already exist,
- so that we can monitor it for changes. Part two of bug #509740;
- Patch by Hans Petter Jansson <hpj@novell.com>
-
-2008-08-02 Christian Kellner <gicmo@gnome.org>
-
- * autogen.sh: Allow libtool 2.2.
-
-2008-08-02 Christian Persch <chpe@gnome.org>
-
- * ChangeLog
- * client/gdaemonfile.c
- * client/gdaemonfileinputstream.c
- * client/gdaemonfileoutputstream.c
- * client/gvfsdaemondbus.c
- * common/gdbusutils.c
- * common/gvfsdaemonprotocol.c
- * daemon/gvfsbackendarchive.c
- * daemon/gvfsbackendcdda.c
- * daemon/gvfsbackenddav.c
- * daemon/gvfsbackendftp.c
- * daemon/gvfsbackendgphoto2.c
- * daemon/gvfsbackendobexftp-cap-parser.c
- * daemon/gvfsbackendobexftp-fl-parser.c
- * daemon/gvfsbackendobexftp.c
- * daemon/gvfsbackendsftp.c
- * daemon/gvfsbackendsmb.c
- * daemon/gvfsbackendsmbbrowse.c
- * daemon/gvfsjob.c
- * daemon/gvfsjobopenforwrite.c
- * daemon/gvfsreadchannel.c
- * daemon/gvfswritechannel.c
- * daemon/mount.c
- * daemon/soup-input-stream.c
- * daemon/soup-output-stream.c: Use g_set_error_literal where
- appropriate. Bug #539167.
-
-2008-07-29 David Zeuthen <davidz@redhat.com>
-
- * client/gdaemonmount.c:
- * common/gmounttracker.c:
- * common/gmounttracker.h:
- * daemon/gvfsbackend.c:
- * daemon/gvfsbackend.h:
- * daemon/gvfsbackendcdda.c:
- * daemon/gvfsbackendgphoto2.c:
- * daemon/mount.c:
- Add x-content/* support to daemon mounts. Right now a backend
- can only set the x-content/* type ahead of time. We might want
- to add support dynamically obtaining it too (e.g. support
- force_rescan).
-
- * monitor/hal/ghalmount.c:
- * monitor/hal/ghalvolume.c:
- * monitor/hal/ghalvolumemonitor.c:
- * monitor/hal/hal-utils.c:
- * monitor/hal/hal-utils.h:
- Add x-content/* support to the HAL volume monitor.
-
- * monitor/proxy/gproxymount.c:
- * monitor/proxy/gproxymount.h:
- * monitor/proxy/gproxyvolumemonitor.c:
- * monitor/proxy/gproxyvolumemonitor.h:
- * monitor/proxy/gvfsproxyvolumemonitordaemon.c:
- Add x-content/* support to proxy volume monitor. Also fix
- a number of bugs the initial implementation had.
-
- * programs/gvfs-mount.c:
- Print out x-content-types.
-
-2008-07-28 Matthias Clasen <mclasen@redhat.com>
-
- Bug 528848 – [PATCH] statfs lies
-
- * client/gvfsfusedaemon.c (vfs_statfs): Don't call
- statvfs on /. Patch by Bill Nottingham.
-
-2008-07-28 Matthias Clasen <mclasen@redhat.com>
-
- Bug 518284 – need to add i18n on module branching
-
- * daemon/gvfsbackendcdda.c:
- * daemon/gvfsbackendgphoto2.c:
- * daemon/gvfsbackendobexftp.c: Now is later.
- Remove the I18N_LATER hack.
-
-2008-07-28 Matthias Clasen <mclasen@redhat.com>
-
- * monitor/proxy/gvfsproxyvolumemonitordaemon.c (append_mount):
- Don't pass a NULL uuid to dbus_message_iter_append_basic. Fixes
- a crash with bind mounts.
-
-2008-07-28 Matthias Clasen <mclasen@redhat.com>
-
- Bug 545068 – use standard icon names
-
- * daemon/gvfsbackendburn.c:
- * daemon/gvfsbackendcomputer.c:
- * daemon/gvfsbackenddnssd.c: Use standard icon names.
-
-2008-07-28 Matthias Clasen <mclasen@redhat.com>
-
- * configure.ac: Bump GLib requirement to 2.17.5 (for GEmblemedIcon)
- * gproxyvolumemonitor.c: Handle GEmblemedIcon in deserialization code.
- * gvfsproxyvolumemonitordaemon.c: Handle GEmblemedIcon in
- serialization code.
-
-2008-07-23 Hans Petter Jansson <hpj@novell.com>
-
- * configure.ac: Post-release bump to 0.99.4.
-
-=== gvfs 0.99.3 ===
-
-2008-07-23 Hans Petter Jansson <hpj@novell.com>
-
- * NEWS: 0.99.3 update.
-
-2008-07-23 David Zeuthen <davidz@redhat.com>
-
- * monitor/proxy/gproxyvolumemonitor.c
- (g_proxy_volume_monitor_finalize): Fix crasher (#544399)
-
-2008-07-22 Matthias Clasen <mclasen@redhat.com>
-
- * configure.ac: Post-release bump
-
-=== gvfs 0.99.2 ===
-
-2008-07-22 Matthias Clasen <mclasen@redhat.com>
-
- * Makefile.am: Fix up intltool mess
- * configure.ac: Bump glib requirement to 2.17.4
- * NEWS: Updates
-
-2008-07-21 David Zeuthen <davidz@redhat.com>
-
- * monitor/gphoto2/ggphoto2volume.c (do_update_from_hal_for_camera):
- * daemon/gvfsbackendgphoto2.c (compute_icon_name):
- (find_udi_for_device):
- Use 'camera-photo' rather than just 'camera' since gnome-icon-theme
- in 2.23/2.24 no longer ships 'camera'. Now the icons look fine again.
-
-2008-07-21 David Zeuthen <davidz@redhat.com>
-
- * configure.ac:
- * monitor/Makefile.am:
- * monitor/hal/*:
- * monitor/gphoto2/*:
- Separate the hal and gphoto2 volume monitors - this is in part
- needed to solve bug #520123.
-
-2008-07-21 David Zeuthen <davidz@redhat.com>
-
- * monitor/proxy/gproxyvolumemonitor.c
- (g_proxy_volume_monitor_setup_session_bus_connection): Use the
- correct hash functions for the hash table of existing proxy
- volume monitors
-
-2008-07-21 Kjartan Maraas <kmaraas@gnome.org>
-
- * monitor/proxy/gvfsproxyvolumemonitordaemon.c:
- #include <locale.h> to fix the build.
-
-2008-07-19 Hans Petter Jansson <hpj@novell.com>
-
- * client/gdaemonfile.c (g_daemon_file_set_attribute): Don't leak
- D-Bus messages.
-
-2008-07-18 Hans Petter Jansson <hpj@novell.com>
-
- * client/gvfsfusedaemon.c (vfs_open)
- (vfs_create): Hold the file handle lock while opening the stream.
- Second part of fix for #536614.
-
-2008-07-17 Hans Petter Jansson <hpj@novell.com>
-
- * client/gvfsfusedaemon.c (reindex_file_handle_for_path): Steal the
- old file handle record from the global hash table before replacing
- its path, not after. Part of fix for #536614.
-
-2008-07-16 David Zeuthen <davidz@redhat.com>
-
- * monitor/proxy/gproxyvolumemonitor.c:
- * monitor/proxy/gproxyvolumemonitor.h:
- * monitor/proxy/remote-volume-monitor-module.c:
- Avoid setting up proxy volume monitors if no session bus is
- available. Fixes a crasher with the Fedora NetworkManager system
- settings plug-in that is now using GIO to do file monitoring.
-
-2008-07-08 David Zeuthen <davidz@redhat.com>
-
- * monitor/hal/Makefile.am: Fix 'make distcheck'.
-
-2008-07-08 David Zeuthen <davidz@redhat.com>
-
- * configure.in:
- * Makefile.am:
- * hal/*:
- * monitor/Makefile.am:
- * monitor/hal/*:
- Move hal/ to monitor/hal/.
-
-2008-07-08 David Zeuthen <davidz@redhat.com>
-
- Provide infrastructure for out of process volume monitors and
- port the hal volume monitor to use it (#520132).
-
- * Makefile.am:
- * configure.ac:
- Add the monitor and monitor/proxy directories.
-
- * hal/Makefile.am:
- Don't build a gio module for the hal volume monitor; instead
- build a volume monitor daemon.
-
- * hal/ghaldrive.[ch]:
- * hal/ghalmount.[ch]:
- * hal/ghalvolume.[ch]:
- * hal/ghalvolumemonitor.[ch]:
- * hal/hal-device.[ch]:
- * hal/hal-device.[ch]:
- * hal/hal-pool.[ch]:
- Make all types static and implement g_volume_get_activation_root()
- added to gio (#541793). Also emit the drive-eject-button
- signal (#541794).
-
- * hal/hal-module.c:
- Removed since the monitor is being moved out of process.
-
- * hal/hal-volume-monitor-daemon.c:
- * hal/hal.monitor:
- * hal/org.gtk.Private.HalVolumeMonitor.service.in:
- New files for remote volume monitor.
-
- * monitor/Makefile.am:
- New file.
-
- * monitor/proxy/*:
- Add proxy volume monitor gio module (the D-Bus client side of
- out-of-process volume monitors) and a static library for providing
- the D-Bus server side of out of process volume monitors.
-
- * programs/gvfs-mount.c:
- Print activation uri for a volumes and icons for drives.
- Also unref volume monitor when no longer in use.
-
-2008-07-01 Christian Kellner <gicmo@gnome.org>
-
- * configure.ac: Correctly check the right libhal for hal features.
- Patch from Andreas Rottmann <a.rottmann@gmx.at> (#537149)
-
-2008-06-16 Ross Burton <ross@burtonini.com>
-
- Bug 536252 – GFileEnumerator should allow access to the containing
- GFile
-
- * client/gdaemonfile.c:
- * client/gdaemonfileenumerator.c:
- * client/gdaemonfileenumerator.h:
- Pass the GFile to the file enumerator constructor and use it to
- set the container property. (Requires glib r7044)
-
-2008-06-11 Ross Burton <ross@burtonini.com>
-
- * programs/gvfs-mkdir.c:
- Add -p to create parents (using
- g_file_make_directory_with_parents, just landed in glib). Patch
- from A Walton (#511367)
-
-2008-06-11 A. Walton <awalton@gnome.org>
-
- * daemon/gvfsbackendtrash.c (escape_pathname), (unescape_pathname):
- Use hex escapes in the trash backend.
- Patch by Andreas Henriksson.
- Fixes bug #523139.
-
-2008-06-11 Tomas Bzatek <tbzatek@redhat.com>
-
- * daemon/gvfsbackendftp.c:
- Fix recursive copy of directories (#522933)
- Introduce new error 550 handling framework
-
-2008-06-10 Cosimo Cecchi <cosimoc@gnome.org>
-
- * daemon/gvfsbackendarchive.c: (gvfs_archive_pop_job):
- * daemon/gvfsbackenddav.c: (stat_location), (write_ready),
- (close_write_ready), (do_make_directory), (do_delete):
- * daemon/gvfsbackendftp.c:
- (ftp_connection_set_error_from_response):
- * daemon/gvfsbackendhttp.c: (g_vfs_job_failed_from_http_status),
- (open_for_read_ready), (read_ready), (try_seek_on_read),
- (close_read_ready):
- * daemon/gvfsbackendobexftp.c: (_query_file_info_helper),
- (error_occurred_cb), (do_delete):
- Fix build warnings with GCC 4.3.0 (#537588).
- * daemon/gvfsjob.c: (g_vfs_job_failed), (g_vfs_job_failed_literal):
- * daemon/gvfsjob.h:
- Add g_vfs_job_failed_literal ().
-
-2008-06-09 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp-fl-parser.c (fl_parser_start_node_cb):
- Patch from Tomáš Bžatek <tbzatek@redhat.com> to fix the fugly icons
- when the mime-type of a file isn't known to us. See:
- https://bugzilla.redhat.com/show_bug.cgi?id=450453
-
-2008-06-04 Bastien Nocera <hadess@hadess.net>
-
- * hal/ghalvolumemonitor.c (update_cameras): Don't add
- devices that are both audio players and cameras twice,
- as it causes 1) error messages when plugging in (it tries to
- mount the device another time) 2) weird behaviour in
- nautilus' computer:/ (See #536601)
-
-2008-06-03 Hans Petter Jansson <hpj@novell.com>
-
- * configure.ac: Post-release bump to 0.99.2.
-
-=== gvfs 0.99.1 ===
-
-2008-06-03 Hans Petter Jansson <hpj@novell.com>
-
- * NEWS: Prepare for 0.99.1 release.
-
-2008-06-03 Hans Petter Jansson <hpj@novell.com>
-
- * configure.ac: Fix definition of giomodulesdir, so we install
- GIO modules to the libdir specified by the user. Fixes distcheck.
-
-2008-05-28 Tomas Bzatek <tbzatek@redhat.com>
-
- * daemon/gvfsbackendsmb.c: (do_open_for_read):
- Return G_IO_ERROR_IS_DIRECTORY when attempting
- to read a directory (fixes #522933 for SMB)
-
-2008-05-27 Tomas Bzatek <tbzatek@redhat.com>
-
- * daemon/gvfsbackendsmb.c: (do_mount):
- Don't set domain to mountspec when not setting username
-
-2008-05-27 Tomas Bzatek <tbzatek@redhat.com>
-
- * common/gmountspec.c: (add_item):
- Don't allow setting a null parameter in mountspec (coming
- from broken backend)
-
-2008-05-22 Hans Petter Jansson <hpj@novell.com>
-
- Fix fuse daemon locking and file handle life-cycle issues that
- were causing frequent crashes.
-
- * client/gvfsfusedaemon.c (file_handle_new): Add a "path" field
- pointing to a string representing the path this file handle is
- associated with, for reverse mapping.
- (file_handle_unref): Is now responsible for decrementing the ref
- count and freeing the handle if it reaches 0. Note that we need
- to check the ref count again after obtaining the global mutex.
- (file_handle_free): The new path member is freed here.
- (get_file_handle_for_path): Ref the obtained handle.
- (get_or_create_file_handle_for_path): Ditto, and hold the lock the
- whole time.
- (reindex_file_handle_for_path): Steal the old entry to avoid
- buildup of stale handles.
- (free_file_handle_for_path): Remove.
- (vfs_getattr): Unref the handle when we're done with it.
- (vfs_rename): Ditto.
- (vfs_unlink): Ditto.
- (vfs_truncate): Ditto.
- (vfs_open): Don't ref the obtained handle; it's done in the helper.
- (vfs_create): Ditto.
- (vfs_release): Let file_handle_unref() free the handle if
- appropriate. Note that the old logic here was inverted, meaning we'd
- try to free the handle if the ref count was non-zero.
- (vfs_init): The hash table no longer owns the path key strings -
- the file handle does.
-
-2008-05-22 Hans Petter Jansson <hpj@novell.com>
-
- A more complete fix for GNOME bug #531516.
-
- * client/gvfsfusedaemon.c (subthread_main): Send SIGHUP to the
- main thread just before subthread exits.
- (dbus_filter_func): When gvfsd goes away, exit the subthread's
- main loop instead of immediately sending SIGHUP to parent thread.
- Do the same when the session bus goes away.
- (shutdown_on_idle): Remove, no longer needed.
- (shutdown_signal): Remove, no longer needed.
- (vfs_init): Tell dbus to not exit when session bus goes down.
- Don't catch signals anymore, since Fuse does this for us.
-
-2008-05-22 Tomas Bzatek <tbzatek@redhat.com>
-
- * daemon/gvfsbackendarchive.c:
- Improve error handling allowing to mount non-standard ISO images
-
-2008-05-22 Hans Petter Jansson <hpj@novell.com>
-
- * client/gvfsfusedaemon.c (shutown_on_idle)
- (shutdown_signal)
- (vfs_init): When the process receives one of the HUP, TERM or
- INT signals, shut down gracefully. Fixes GNOME bug #531516.
-
-2008-05-21 Tomas Bzatek <tbzatek@redhat.com>
-
- * daemon/gvfsbackendsmb.c: (do_mount):
- Fix username & domain tests while setting mount spec
-
-2008-05-21 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackendsmb.c (do_mount):
- Add GVFS_SMB_DEBUG env variable to control smb debugging.
-
-2008-05-21 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackendsmb.c (do_mount):
- Set the information on the mount spec *after* having asked
- the user for credentials since username and domain can be
- changed by the user.
-
-2008-05-21 Christian Kellner <gicmo@gnome.org>
-
- * configure.ac:
- Check for gphoto2 versions greaten then 2.4.0. Patch from
- Tom Parker <palfrey@tevp.net>. Fixes #531702
-
-2008-05-20 Christian Kellner <gicmo@gnome.org>
-
- * configure.ac:
- * programs/Makefile.am:
- Allow to disable the installation of the bash completion
- scripts. Also make it possible to choose the directory
- where the file gets installed. Fixes #530772
-
-2008-05-20 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp-fl-parser.c (fl_parser_fill_file_info):
- Fill in the display name, even if layers above should be able to do
- without (Closes: #523699)
-
-2008-05-11 Hans Petter Jansson <hpj@novell.com>
-
- * client/gvfsfusedaemon.c: Fix erroneous copyright header and
- provide a better description of the source file.
-
-2008-05-09 Federico Mena Quintero <federico@novell.com>
-
- http://bugzilla.gnome.org/show_bug.cgi?id=532375 - Fix strdup() /
- g_free() confusion.
-
- * hal/hal-device.c (hal_device_new_from_udi_and_properties):
- g_strdup() the UDI. We can't just steal it, since it comes from
- libhal, which uses strdup() (and we do g_free() in our finalizer).
-
- * hal/hal-pool.c (hal_pool_new): Free the actual device strings here.
-
-2008-04-22 Benjamin Otte <otte@gnome.org>
-
- * */*.[ch]: get rid of modelines
- The modelines were inconsistent and caused issues when used in
- different editors.
-
-2008-04-21 Sebastien Bacher <seb128@ubuntu.com>
-
- * daemon/gvfsbackendftp.c: (do_enumerate_directory):
- remove trailing '\r', that workarounds a parser issue causing
- some filenames to not be listed (#524880)
-
-2008-04-21 Matthias Clasen <mclasen@redhat.com>
-
- * client/gdaemonvfs.c:
- * hal/hal-pool.c: Set exit-on-disconnect to FALSE on private
- dbus connections to prevent unexpected exits. (#528785)
-
-2008-04-21 David Zeuthen <davidz@redhat.com>
-
- * client/gvfsfusedaemon.c: Fix some reference issues, see
- http://mail.gnome.org/archives/gvfs-list/2008-April/msg00017.html
-
-2008-04-20 David Zeuthen <davidz@redhat.com>
-
- * daemon/gvfsbackendarchive.c: some minor fixes (#528950)
-
-2008-04-16 David Zeuthen <davidz@redhat.com>
-
- * hal/ghalvolumemonitor.c: (should_mount_be_ignored),
- (should_volume_be_ignored), (update_mounts):
-
- Avoid having GVolume and GMount objects for mounts for which the
- mount point will make g_unix_mount_guess_should_display() return
- FALSE. This fixes a problem where e.g. live cd installers mounts
- some file system somewhere (e.g. a /boot partition at
- /mnt/installer_boot).
-
-2008-04-16 Matthias Clasen <mclasen@redhat.com>
-
- Bug 526793 – unmount hangs with some backends
-
- * daemon/gvfsbackendgphoto2.c: Set exit-on-disconnect to FALSE
- on the private dbus connection to prevent unexpected exit before
- the job is done.
-
-2008-04-16 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Set mount prefix on the mount_spec (again). Fixes #528218
-
-2008-04-16 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackendhttp.c:
- Add logging for soup so we can get easy network traces even
- if we are doing https.
-
-2008-04-15 Matthias Clasen <mclasen@redhat.com>
-
- Bug 526454 – too early use of dbus session bus
-
- * client/gdaemonvfs.c (g_io_module_load): Refuse to load if
- there is no session bus.
-
-2008-04-14 Matthias Clasen <mclasen@redhat.com>
-
- * client/gvfsfusedaemon.c: You cannot store pointers in integers.
- Fixes a crash on 64bit systems.
-
-2008-04-14 Matthias Clasen <mclasen@redhat.com>
-
- * common/gmounttracker.c (g_mount_tracker_finalize): Only free
- lock if it is non-NULL. Pointed out by Denis Leroy.
-
-2008-04-07 David Zeuthen <davidz@redhat.com>
-
- * hal/ghalvolume.c (g_hal_volume_new): Unbreak the gphoto2 backend
- by allowing automounting.
-
- * programs/gvfs-mount.c (main, unmount_all_with_scheme): Add a
- new option --unmount-scheme
-
- * AUTHORS: Add cdda and gphoto2 backends
-
-2008-04-05 Christian Kellner <gicmo@gnome.org>
-
- * client/httpuri.c:
- Only set a port in the mount spec if it is not the default
- port for the scheme.
-
- * daemon/gvfsbackenddav.c:
- Cleanup mount function a bit.
-
-2008-04-04 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Implement set_display_name. (#525980)
- With this patch we also do our own redirection handling which
- alyways allows redirects from /a/b -> /a/b/ (trainling slashes)
- even for non safe methods. Also some code was cleaned up.
-
-2008-04-02 Christian Kellner <gicmo@gnome.org>
-
- * hal/hal-utils.h:
- * hal/hal-utils.c:
- Create new files for utility functions and move get_disc_icon()
- and get_disc_name() here.
- Also create get_themed_icon_with_fallbacks() to create
- GThemedIcons with default fallbacks but with the ability to
- pass in another name to create the fallbacks from then the
- icon name.
-
- * hal/ghalmount.c:
- * hal/ghalvolume.c:
- Use newly created get_themed_icon_with_fallbacks () and pass
- in custom fallback name for encrypted mounts/volumes (#525153).
-
- * hal/Makefile.am:
- Add hal-utils.[hc]
-
- * programs/gvfs-mount.c:
- Display the icon names for mounts/volumes if the icon is
- a GThemedIcon.
-
- [Merged from gnome-2-22]
-
-2008-04-01 Sebastien Bacher <seb128@ubuntu.com>
-
- * hal/ghalmount.c: (format_size_for_display), (do_update_from_hal):
- Use consistent translatable strings for mounts and volume (#525286)
-
-2008-03-31 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Get the right size of the command messages.
- Actually send file attributes in mkdir request.
-
-2008-03-31 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackendsftp.c: Make sure we send (error)
- replies to all outstanding jobs and unmount the mount
- in case of an error occures while reading data from
- the pipe to the ssh agent (e.g. if the ssh process died).
-
-2008-03-31 Alexander Larsson <alexl@redhat.com>
-
- * client/gvfsdaemondbus.[ch]:
- In call_sync, on stale cache errors due to a
- mount daemon disappearing, invalidate caches and
- return G_VFS_ERROR_RETRY so that the caller can
- retry with fresh caches.
-
- * client/gdaemonfile.c:
- Retry calls on G_VFS_ERROR_RETRY.
-
-2008-03-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_connection_pop_job):
- fix race that could cause uploads to stop
-
-2008-03-28 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Bump version to 0.99.1 for unstable development
- Stable branch is gnome-2-22
-
-2008-03-28 Paolo Borelli <pborelli@katamail.com>
-
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsjobclosewrite.c:
- Plug some more minor memory leaks.
-
-2008-03-28 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.2.2 ===
-
-2008-05-09 Federico Mena Quintero <federico@novell.com>:ChangeLog
-
-2008-03-28 Alexander Larsson <alexl@redhat.com>
-
- * daemon/Makefile.am (gvfsd_smb_SOURCES):
- Dist libsmb-compat.h.
-
- * NEWS:
- Update for release
-
-2008-03-28 Christian Kellner <gicmo@gnome.org>
-
- * configure.ac: Silence out libtool if
- make is invoked with --silence.
-
-2008-03-28 Paolo Borelli <pborelli@katamail.com>
-
- * daemon/gvfsbackendtrash.c: plug some minor memory leaks.
-
-2008-03-28 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfileenumerator.c (g_daemon_file_enumerator_next_file):
- Actually increment count so that timeouts works.
- Pointed out by Joe Marcus Clarke
-
-2008-03-27 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Handle all target exists errors correctly
- in move. This should make us not silently
- overwrite files.
-
- * daemon/gvfsjobmove.[ch]:
- Add g_vfs_job_move_progress_callback
-
-2008-03-27 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Introduce helpers for multi-request ops.
- Use it for query_info.
-
-2008-03-26 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- Implement true async query_filesystem_info
-
-2008-03-26 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfileenumerator.c:
- (g_daemon_file_enumerator_next_file):
- Avoid hanging forever and not sending any async messages.
- This could happen if we raced and missed the done check.
-
-2008-03-26 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsmonitor.c:
- Send replies to subscribe and unsubscribe messages.
-
-2008-03-26 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Pass id via the command object, not via out parameter.
- Removes a bunch of code to pass the id around.
-
-2008-03-25 Carlos Garcia Campos <carlosgc@gnome.org>
-
- * daemon/gvfschannel.c: (got_request), (send_reply_cb):
- Do not create new read/write jobs if the gvfschannel has been
- cancelled. Fixes a crash in sftp backend (#522192).
-
-2008-03-25 Paolo Borelli <pborelli@katamail.com>
-
- * daemon/gvfsbackendtrash.c (add_extra_trash_info):
- Make sure the display name is correct even for subdirectories
- inside the trash. (#523127)
-
-2008-03-25 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendarchive.c (archive_file_set_info_from_entry):
- Better mount icons and root display name.
-
-2008-03-24 A. Walton <awalton@svn.gnome.org>
-
- * configure.ac:
- The CDDA backend requires HAL to build.
- Closes bug #524062.
-
-2008-03-22 Christian Kellner <gicmo@gnome.org>
-
- * client/Makefile.am:
- * configure.ac:
- * gconf/Makefile.am:
- * hal/Makefile.am:
- Respect the giomoduledir provided in gio's package config
- file. (#523852 and maybe #523039)
-
-2008-03-20 Tomas Bzatek <tbzatek@redhat.com>
-
- * daemon/gvfsbackendsmb.c:
- * daemon/gvfsbackendsmbbrowse.c:
- * daemon/libsmb-compat.h:
- Port to new smbclient API introduced in samba-3.2.0pre2
-
-2008-03-19 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsjobenumerate.c (send_reply):
- * daemon/gvfsjobdbus.c (send_reply):
- Add job pointer to output spew to make it possible
- to match lines.
-
-2008-03-19 Sebastian Dröge <slomo@circular-chaos.org>
-
- * daemon/gvfsbackendsftp.c: (handle_login): Make the sftp backend
- work when pam_krb5 is used on the server side.
-
-2008-03-18 Christian Kellner <gicmo@gnome.org>
-
- * configure.ac: Post release version bump.
-
-=== gvfs 0.2.1 ===
-
-2008-03-17 Christian Kellner <gicmo@gnome.org>
-
- * NEWS: Update for release
-
-2008-03-17 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendftp.c (do_mount):
- Correctly handle username in mountspec. Only set it if
- it was in the requested mountspec (and only to that value).
- Fixes #522449
-
-2008-03-17 Christian Kellner <gicmo@gnome.org>
-
- * client/gdaemonfile.c: (find_enclosing_mount_cb): Don't unref
- mount_info since we don't one a ref. (#522919)
-
-2008-03-17 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c:
- return G_IO_ERROR_NOT_EMPTY if we're trying to delete a non-empty
- directory.
- * hal/ghalvolumemonitor.c: (get_mount_point_for_device):
- remove unused variable
-
-2008-03-16 Christian Kellner <gicmo@gnome.org>
-
- * AUTHORS: Forgot to mention A. Walton. Correct that.
-
-2008-03-16 Christian Kellner <gicmo@gnome.org>
-
- * client/gdaemonfile.c: Don't free up the error that
- we don't own (#522566). Thanks Cosimo Cecchi for helping
- to debug the issue.
-
-2008-03-16 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * programs/gvfs-rename.c (main): Fix wording of error
- messages. Don't include "Error renaming file" since
- that's what the error->message might contain as well.
-
-2008-03-14 Christian Kellner <gicmo@gnome.org>
-
- * programs/Makefile.am:
- * programs/gvfs-rename.c:
- Add a little helper program that renames files
- by calling g_file_set_display_name ().
-
-2008-03-14 Christian Kellner <gicmo@gnome.org>
-
- * AUTHORS: Update, add a lot of people and I am
- sure I have forgotten a few.
-
- * MAINTAINERS: Add myself
-
-2008-03-14 Hans Petter Jansson <hpj@novell.com>
-
- Implement most of the GDaemonFile async functions.
-
- * client/gdaemonfile.c (stream_open_cb): Implement.
- (append_to_async_cb): Implement.
- (g_daemon_file_append_to_async): Implement.
- (g_daemon_file_append_to_finish): Implement.
- (create_async_cb): Implement.
- (g_daemon_file_create_async): Implement.
- (g_daemon_file_create_finish): Implement.
- (enumerate_children_async_cb): Implement.
- (g_daemon_file_enumerate_children_async): Implement.
- (g_daemon_file_enumerate_children_finish): Implement.
- (find_enclosing_mount_cb): Implement.
- (g_daemon_file_find_enclosing_mount_async): Implement.
- (g_daemon_file_find_enclosing_mount_finish): Implement.
- (replace_async_cb): Implement.
- (g_daemon_file_replace_async): Implement.
- (g_daemon_file_replace_finish): Implement.
- (set_display_name_async_cb): Implement.
- (g_daemon_file_set_display_name_async): Implement.
- (g_daemon_file_set_display_name_finish): Implement.
- (g_daemon_file_file_iface_init): Hook up new async functions.
-
-2008-03-14 Alexander Larsson <alexl@redhat.com>
-
- * daemon/main.c:
- Don't autostart fuse backend if the GVFS_DISABLE_FUSE
- env var is set
-
-2008-03-14 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalvolume.c (g_hal_volume_new):
- Respect storage.automount_enabled_hint hal property (#520736)
- Patch from Martin Pitt
-
-2008-03-14 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsmb.c:
- (set_info_from_stat):
- Mark files with an initial dot to be hidden.
- This handles unix smb shares, and should not affect
- windows shares much, since they generally don't use dot
- for extensions so its not used otherwise in filenames.
-
-2008-03-14 Christian Kellner <gicmo@gnome.org>
-
- * client/httpuri.c:
- Make sure we set the port to -1 in case when no port
- is specified on the url so the port will be omiited
- when we convert the url to a string
-
-2008-03-13 Alexander Larsson <alexl@redhat.com>
-
- * daemon/archive.mount.in:
- Actually add the mount file for archive
-
-2008-03-12 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c:
- fix enumerating to do the right thing
-
-2008-03-12 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- * daemon/Makefile.am:
- * daemon/gvfsbackendarchive.[ch]:
- Added archive backend from Benjamin Otte
- Requires libarchive
-
-2008-03-12 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c:
- invalidate the cache of directories that we modified ourselves.
- * daemon/Makefile.am:
- allow 10 threads in parallel
-
-2008-03-12 Hans Petter Jansson <hpj@novell.com>
-
- * client/gdaemonfile.c (do_async_path_call): We were testing the
- wrong cancellable pointer for non-NULL-ness, which broke cancellation
- for all async operations. Fix that.
-
-2008-03-11 Alexander Larsson <alexl@redhat.com>
-
- * common/gsysutils.c:
- * configure.ac:
- OpenBSB portability fixes.
- Patch from Jasper Lievisse Adriaanse <jasper@humppa.nl>
-
-2008-03-11 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c (spawn_ssh):
- Use GError->message, not GError->msg.
- Patch from Jasper Lievisse Adriaanse <jasper@humppa.nl>
-
-2008-03-10 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.2.0.1 ===
-
-2008-03-10 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Bump version to 0.2.0.1 (minor release
- last translation changes)
-
-2008-03-10 Alexander Larsson <alexl@redhat.com>
-
- * NEWS:
- Update for release
-
- * configure.ac:
- Bump version to 0.2.0
-
-2008-03-10 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.c:
- Free strings with g_free, not dbus_free (#521269)
-
-2008-03-08 Christian Kellner <gicmo@gnome.org>
-
- * hal/ghalmount.c:
- Use dgettext instead of gettext as we are a library.
-
- * hal/ghalvolume.c:
- Translate disc names (using dgettext).
-
-2008-03-07 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalvolumemonitor.c:
- (get_mount_point_for_device):
- (should_volume_be_ignored):
- Really make sure we ignore stuff outside /media (#520851)
-
-2008-03-07 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalmount.c:
- (get_disc_name):
- Translate disc names.
-
- * hal/ghalvolume.c:
- (g_hal_volume_new):
- Don't automount gphoto volumes.
-
-2008-03-07 Kjartan Maraas <kmaraas@gnome.org>
-
- * programs/gvfs-mount.c: ANSIfication
- * daemon/gvfsbackendnetwork.c: Same.
-
-2008-03-07 Christian Kellner <gicmo@gnome.org>
-
- * daemon/soup-input-stream.c: Since G_SEEK_END is not supported
- at the moment immediately return FALSE without aborting the
- the soup message.
-
-2008-03-07 Kjartan Maraas <kmaraas@gnome.org>
-
- * daemon/gvfsreadchannel.c,
- * daemon/gvfswritechannel.c:
- Fix format specifiers here.
-
-2008-03-07 Kjartan Maraas <kmaraas@gnome.org>
-
- * client/httpuri.c: Remove unused vars.
- * daemon/gvfsbackenddav.c: Remove a couple
- of unused variables.
-
-2008-03-07 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Initialize error variable to NULL. (#519035)
-
-2008-03-06 David Zeuthen <davidz@redhat.com>
-
- * hal/ghalvolumemonitor.c:
- (_g_unix_mount_point_guess_should_display),
- (should_be_hidden_according_to_etc_fstab),
- (should_volume_be_ignored), (should_drive_be_ignored),
- (update_drives), (update_volumes):
- Avoid showing volumes from /etc/fstab if the mount point is one
- that should not be displayed to the user (#520851)
-
-2008-03-07 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Only ask for common properties and don't use allprop.
-
-2008-03-06 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Correctly set the content types and the icon correclty. (#518679)
- Also don't add the If-None-Matcher header for now since
- early apache versions don't like it. We need to be smart about
- that later.
-
-2008-03-06 Alexander Larsson <alexl@redhat.com>
-
- * common/gsysutils.c:
- Include <sys/types.h> also (#520307)
-
-2008-03-06 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendsmb.c:
- Use g_content_type_get_icon() instead of open
- coding it. Also picks up more icons since
- that has been fixed. (#520742)
-
-2008-03-06 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_connection_create),
- (ftp_connection_ensure_data_connection),
- (g_vfs_backend_ftp_pop_connection), (do_mount):
- timeout I/O or g_cond_wait after 30 seconds
-
-2008-03-06 Alexander Larsson <alexl@redhat.com>
-
- * common/gsysutils.c:
- * configure.ac:
- Include sys/uio.h if availible (#520307)
-
-2008-03-06 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_mount):
- fail early if there's no ftp server where we connect
-
-2008-03-06 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_connection_parse_system),
- (ftp_connection_use), (dir_default_iter_process):
- parse the ftp server's system. Using that information, mark dot-files
- as hidden.
- Fixes #520203
-
-2008-03-05 A. Walton <awalton@svn.gnome.org>
-
- * programs/gvfs-cat.c (main):
- * programs/gvfs-copy.c (main):
- * programs/gvfs-info.c (main):
- * programs/gvfs-ls.c (main):
- * programs/gvfs-move.c (main):
- * programs/gvfs-open.c (main):
- * programs/gvfs-save.c (main):
- * programs/gvfs-tree.c (main):
- Error out if the user passes invalid flags and warn the user.
- Fixes bug #520086.
-
-2008-03-06 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Allow setting unix mode on sftp (#520571)
- Patch from Carlos Garcia Campos
-
-2008-03-06 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackenddav.c:
- (do_mount):
- Set display name for dav mount (#519588)
-
-2008-03-06 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_move):
- fail if file exists
-
-2008-03-06 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonmount.c:
- (foreign_volume_removed):
- Avoid deadlock when foreign volume is removed.
-
-2008-03-05 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (dir_default_iter_process),
- (do_enumerate):
- don't list "." and ".." directories.
-
-2008-03-05 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_create):
- fail if the file to be created already exists
-
-2008-03-05 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_mount):
- set anonymous login to FALSE, no uninitialized variables please.
- * hal/ghalvolumemonitor.c: (adopt_orphan_mount):
- fix warning due to glib changes
-
-2008-03-05 Bastien Nocera <hadess@hadess.net>
-
- * INSTALL: Add mention of obex-data-server
-
-2008-03-05 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (dir_default_get_root):
- the proper icon name is folder-remote, not remote-folder.
- really fixed #520189
-
-2008-03-05 Bastien Nocera <hadess@hadess.net>
-
- * configure.ac: Disable gphoto2 building when
- HAL is disabled as well (Closes: #519872)
-
-2008-03-05 Bastien Nocera <hadess@hadess.net>
-
- * client/gvfsuriutils.c (g_vfs_decode_uri):
- Fix parsing of IPv6-style hostnames to not find the
- port in the path section of the URI, fixes browing
- browsing ObexFTP on Nokia Series 60 phones which show
- drive letters as directories in the root (eg. "C:")
- (Closes: #520314)
-
- * client/test-uri-utils.c (main): Add test for the above,
- and another test for the IPv4-style URIs
-
-2008-03-05 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsdaemonutils.c:
- (gvfs_file_info_populate_content_types):
- add text-x-generic mime type as a last fallback option.
- Fixes #520189
-
-2008-03-05 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c:
- rewrite file info construction and directory listing. It should now
- correctly resolve symlinks and be fast enough for general use.
-
-2008-03-05 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp.c (do_enumerate):
- Better error message for Nokia 3650 phones
-
-2008-03-05 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp.c (_get_icon_from_type),
- (_get_type_from_class), (_is_nokia_3650), (_get_device_properties),
- (g_vfs_backend_obexftp_finalize), (do_mount), (do_open_for_read),
- (do_query_info), (do_query_fs_info), (do_enumerate), (do_delete):
- Error out cleanly from do_mount() if we somehow lose connection
- to the device, Show a meaningful error when browsing broken
- Nokia 3650 phones (Closes: #519733)
-
-2008-03-05 Alexander Larsson <alexl@redhat.com>
-
- * common/gmountsource.c:
- (ask_password_reply):
- Always set password to non-NULL, but keep
- user/domain as NULL if not specified by user.
- Fixes #520317 (smb auth crash)
-
-2008-03-05 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonmount.c:
- (g_daemon_mount_eject_finish):
- Initialize drive variable not access
- undefined memory (#520388)
-
-2008-03-04 A. Walton <awalton@svn.gnome.org>
-
- * daemon/ParseFTPList.c (ParseFTPList):
- Trivial C89 patch, fixes #520339.
- Patch from Jens Granseuer.
-
-2008-03-04 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_mount):
- set the right GError here. Makes gvfsd-ftp run fine manually again.
-
-2008-03-04 Benjamin Otte <otte@gnome.org>
-
- * common/gmountspec.c: (g_mount_spec_set_with_len):
- add g_return_if_fail here - I had SEGVs sometime later due to values
- being NULL here. So better catch em early
-
-2008-03-04 Sebastien Bacher <seb128@ubuntu.com>
-
- * configure.ac: New version update
-
-=== gvfs 0.1.11 ===
-
-2008-03-04 Sebastien Bacher <seb128@ubuntu.com>
-
- * NEWS: Update for 0.1.11
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalvolumemonitor.c:
- (g_hal_volume_monitor_finalize):
- Free mounts with g_unix_mount_free, not g_object_unref.
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * client/gvfsfusedaemon.c:
- (debug_print):
- Actually disable debug log by default
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.1.10 ===
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * NEWS:
- Update for release
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.c (_g_daemon_vfs_get_mount_info_async):
- Bump timeout to standard gvfs time.
- Patch from Matthias Clasen
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalvolumemonitor.c:
- (update_all):
- Actually emit changes for volumes and mounts too
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.1.9 ===
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * daemon/Makefile.am (gvfsd_ftp_SOURCES):
- Use correct case for ParseFTPList.h
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.c:
- (_g_daemon_vfs_get_uri_for_mountspec):
- Fix crash with NULL host (like "ftp://")
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonmount.c (g_daemon_mount_get_icon):
- Use fallbacks for mount icon.
-
- * NEWS:
- Update for release.
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendcomputer.c:
- (mount_volume_from_drive):
- Avoid crash when mounting drive
- Fix leak.
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalmount.c:
- Fix deadlock when looking for cdrom icons.
-
-2008-03-04 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (run_list_command):
- don't require \r as line ending for LIST commands. Fixes ftp.netbsd.org
- * hal/ghalvolumemonitor.c: (adopt_orphan_mount):
- unused variable
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonmount.c:
- * client/gdaemonvolumemonitor.c:
- * hal/ghaldrive.c:
- * hal/ghalmount.c:
- * hal/ghalvolume.c:
- * hal/ghalvolumemonitor.[ch]:
- Properly lock around volume monitors and
- volume monitor objects.
- Emit all events in idles to avoid reentrancy
- issues. Fixed deadlock in #519599.
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * common/gmountsource.c:
- * common/gmounttracker.c:
- Work around problems with type registering when the common code
- is used in both daemon and client.
-
-2008-03-04 Benjamin Otte <otte@gnome.org>
-
- * common/gmountsource.c: (ask_password_reply),
- (g_mount_source_ask_password_finish),
- (g_mount_source_ask_password), (op_ask_password_reply):
- * common/gmountsource.h:
- add an anonymous_out parameter for anonymous logins.
- * daemon/gvfsbackenddav.c: (soup_authenticate_interactive):
- * daemon/gvfsbackendsftp.c: (handle_login):
- * daemon/gvfsbackendsmb.c: (auth_callback):
- make the backends compile with the new parameter. They don't use
- anonymous logins.
- * daemon/gvfsbackendftp.c: (do_mount):
- make login work as users would expect it with anonymous logins.
- Fixes bug #520131
-
-2008-03-04 Carlos Garcia Campos <carlosgc@gnome.org>
-
- * common/gmountspec.c: (g_mount_spec_copy):
- * daemon/gvfsdaemon.c: (g_vfs_daemon_initiate_mount):
- * daemon/main.c: (main):
- Fix memory leaks.
-
-2008-03-04 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.c:
- Avoid duplications in supported_uris.
-
- * daemon/smb-browse.mount.in:
- * daemon/smb.mount.in:
- Add scheme info so smb is listed in supported_uris again.
-
-2008-03-03 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackendhttp.c:
- * daemon/gvfsbackendhttp.h:
- Remove unecessary message_new_from_xxx functions. Prefix all
- public utility functions that need the backend with
- http_backend_, i.e. rename g_vfs_backend_uri_for_filename() to
- http_backend_uri_for_filename().
- Create http_backend_send_message(), http_backend_queue_message()
- convenience functions which will pick up the right SoupSession.
-
- * daemon/gvfsbackenddav.c:
- Port to new utility functions and http_backend_xx namespace.
- Clean up error handling and remove the const keyword from most
- SoupURI variables.
-
-2008-03-03 David Zeuthen <davidz@redhat.com>
-
- Add write support to gphoto2 backend. Also performance
- enhancements for querying, enumerating and reading.
- Fixes bug #519651
-
- * daemon/gvfsbackendgphoto2.c: (monitor_proxy_free), (DEBUG),
- (write_handle_free), (ensure_not_dirty), (dup_for_gphoto2),
- (monitors_emit_internal), (monitors_emit_created),
- (monitors_emit_deleted), (monitors_emit_changed),
- (caches_invalidate_all), (caches_invalidate_free_space),
- (caches_invalidate_dir), (caches_invalidate_file),
- (get_error_from_gphoto2), (release_device),
- (g_vfs_backend_gphoto2_finalize), (_gphoto2_logger_func),
- (g_vfs_backend_gphoto2_init), (find_udi_for_device),
- (_hal_device_removed), (split_filename_with_ignore_prefix),
- (add_ignore_prefix), (file_get_info), (is_directory), (is_regular),
- (is_directory_empty), (ensure_ignore_prefix), (do_mount),
- (try_mount), (do_unmount), (free_read_handle), (do_open_for_read),
- (try_read), (try_seek_on_read), (do_close_read), (do_query_info),
- (try_query_info), (do_enumerate), (try_enumerate),
- (do_query_fs_info), (try_query_fs_info), (do_make_directory),
- (do_slow_file_rename_in_same_dir), (do_file_rename_in_same_dir),
- (do_dir_rename_in_same_dir), (do_set_display_name), (do_delete),
- (do_create_internal), (do_create), (do_replace), (do_append_to),
- (do_write), (do_seek_on_write), (commit_write_handle),
- (do_close_write), (do_move), (vfs_dir_monitor_destroyed),
- (do_create_dir_monitor), (vfs_file_monitor_destroyed),
- (do_create_file_monitor), (g_vfs_backend_gphoto2_class_init):
-
-2008-03-03 Carlos Garcia Campos <carlosgc@gnome.org>
-
- * daemon/mount.c: (read_mountable_config):
- Fix memory leak.
-
-2008-03-03 Benjamin Otte <otte@gnome.org>
-
- * client/gdaemonvfs.c: (fill_mountable_info):
- properly parse aliases
-
-2008-03-03 Benjamin Otte <otte@gnome.org>
-
- * client/gvfsuriutils.c: (g_vfs_decode_uri):
- revert yesterday's commit. It broke the obex and gphoto backends. We
- now parse hostnames different for internet hosts.
- * daemon/ftp.mount.in:
- Parse hostnames different.
-
-2008-03-03 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_connection_receive),
- (ftp_connection_sendv), (g_vfs_backend_ftp_pop_connection),
- (do_mount):
- fix server disconnect on timeout. Side effect is that the ftp backend
- just spawned multiple connections support.
-
-2008-03-03 Alexander Larsson <alexl@redhat.com>
-
- * common/gdbusutils.[ch]:
- Add _g_dbus_message_iter_append_args_valist and
- _g_dbus_message_iter_append_args.
-
- * common/gvfsdaemonprotocol.h:
- Add G_VFS_DBUS_MOUNTTRACKER_OP_LIST_MOUNTABLE_INFO
-
- * client/Makefile.am:
- * client/gdaemonvfs.c:
- Use listMountableInfo to get supported uri schemes
- and information for default uri handling.
- Handle default port in uris and if host_is_inet normalize hostnames,
- including removing ipv6 brackets.
-
- * client/sftpuri.c:
- Removed, as the previous work replaces it
-
- * daemon/gvfsdaemonutils.c:
- (gvfs_file_info_populate_content_types):
- Fix uninitialized variable warning.
-
- * daemon/mount.c:
- Read new mountfile info and implement
- list_mountable_info.
-
- * daemon/sftp.mount.in:
- Add info for sftp
-
-2008-03-03 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsjob.c: (g_vfs_job_try): Make sure the g_object_unref
- call is _before_ the return call.
- Fixes bug #519867
-
-2008-03-03 Cosimo Cecchi <cosimoc@gnome.org>
-
- * daemon/gvfsbackendtrash.c: (do_mount):
- Create the root monitor for trash when mounting. (#509740).
-
-2008-03-03 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_connection_receive):
- dynamically resize the read buffer. This allows receiving the huge
- welcome messages some ftp servers think are cool.
-
-2008-03-03 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_connection_parse_features),
- (ftp_connection_use), (ftp_connection_ensure_data_connection):
- implement EPSV. This should make IPv6 work.
-
-2008-03-03 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp.c (do_mount), (do_open_for_read),
- (do_read), (do_query_info), (do_query_fs_info), (do_enumerate),
- (do_delete), (do_make_directory): Fix a crasher when
- mounting fails, by not freeing the error just before using it
- (duh!) (Closes: #519752), Fix a few error paths leaking errors
-
-2008-03-03 Luca Ferretti <elle.uca@libero.it>
-
- * daemon/gvfsbackendftp.c: (do_query_info):
- Make "file don't exist" message conform to other backends;
- no, it isn't a string freeze break, the message yet exists
- elsewhere.
-
-2008-03-02 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_filename_construct):
- use g_build_path() to not get excess slashes in paths
-
-2008-03-02 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_connection_try_cd), (process_line),
- (do_query_info), (do_move), (g_vfs_backend_ftp_class_init):
- implement move vfunc
-
-2008-03-02 Carlos Garcia Campos <carlosgc@gnome.org>
-
- * common/gmountsource.c: (ask_password_reply):
- Treat DBus output paramaters that contain "" as NULL. It fixes the
- sftp backend when a username is provided by the user.
-
-2008-03-02 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_open_for_read), (do_start_write),
- (do_make_directory):
- push back connection if we fail starting a read/write
-
-2008-03-02 Benjamin Otte <otte@gnome.org>
-
- * client/gvfsuriutils.c: (g_vfs_decode_uri):
- don't pass the [] when parsing IPv6 addresses
-
-2008-03-02 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_make_directory),
- (g_vfs_backend_ftp_class_init):
- implement make_directory
-
-2008-03-02 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_delete),
- (g_vfs_backend_ftp_class_init):
- implement delete
-
-2008-03-02 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c:
- redo error handling: We now store the error and the job in the
- FtpConnection. This way we don't have to handle errors in the outer
- functions and can just "if (conn->error) return FALSE;" in the inner
- functions.
-
-2008-03-01 David Zeuthen <davidz@redhat.com>
-
- * daemon/gvfsbackendcdda.c (do_mount): Avoid calling
- cddio_cddap_close() twice on an error path.
-
-2008-03-01 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (run_list_command):
- close the data connection before trying to receive the OK. Some
- servers send it out only after the connection was closed properly and
- otherwise cause stalls.
-
-2008-03-01 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_mount):
- use 0 as port in the keyring when it's the default ftp port. Stops the
- access dialog fro printing the port name.
-
-2008-03-01 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp.c (_query_file_info_helper):
- Fix another case where the icon name was wrong for the
- root folder (Helps: #519369)
-
-2008-03-01 Benjamin Otte <otte@gnome.org>
-
- * daemon/Makefile.am:
- * daemon/ParseFTPList.c:
- * daemon/ParseFTPList.h:
- * daemon/gvfsbackendftp.c: (ftp_connection_cd), (process_line),
- (run_list_command), (do_query_info), (do_enumerate):
- rewrite directory enumeration and query_info by using the LIST parsing
- code from Mozilla. It was the only code I could find that was LGPL
- licensed, even though it looks way out of date.
- Also, error messages are handled way better and the code even copes
- somewhat with symlinks.
-
-2008-02-29 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp.c (_get_icon_from_type):
- Use better icons for the devices
-
-2008-02-29 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp.c (_get_icon_from_type),
- (_get_type_from_class), (_get_device_properties),
- (do_mount): When getting the remote device's name, also get
- its class, so we can use device specific icons instead of the
- standard Bluetooth icon (Closes: #519369)
-
-2008-02-29 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_error_set_from_response),
- (ftp_connection_parse_features), (ftp_filename_from_gvfs_path),
- (ftp_filename_to_gvfs_path), (ftp_filename_construct),
- (do_open_for_read), (do_create), (do_append), (do_replace),
- (do_set_display_name), (g_vfs_backend_ftp_class_init):
- introduce a differentiation between gvfs paths and ftp filenames and
- use it. Also implement set_display_name.
-
-2008-02-29 Benjamin Otte <otte@gnome.org>
-
- * common/gdbusutils.c: (dbus_source_add_watch):
- * daemon/dbus-gmain.c: (connection_setup_add_watch):
- use the right names for dbus version macros
-
-2008-02-29 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp.c (is_connected), (do_mount),
- (do_open_for_read), (is_busy), (do_read), (do_query_info),
- (do_query_fs_info), (do_enumerate), (do_delete),
- (do_make_directory): Don't use a temporary error to set
- jobs as failed, use g_vfs_job_failed instead
- Error out properly when trying to open a directory for read
-
-2008-02-29 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp.c (g_vfs_backend_obexftp_finalize),
- (_retrieve_folder_listing), (_query_file_info_helper),
- (do_open_for_read), (do_query_info), (do_query_fs_info),
- (do_enumerate), (do_delete): Use a convenience function
- to load directory listings, implement a simple cache there
- that keeps folder listings for 3 seconds (should speed up
- folder enumeration followed by info fetching, as well
- as checking for non-existant files)
-
-2008-02-29 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsdaemonutils.[ch]:
- Rename gvfs_file_info_populate_names() to
- gvfs_file_info_populate_names_as_local() and
- add docs explaining when to use this function
- and when not to.
-
-2008-02-29 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsdaemonutils.c:
- (gvfs_file_info_populate_content_types):
- Use g_content_type_get_icon() for the icon mapping.
- Use folder, not folder-remote for icon. I don't
- think we should use folder-remote for things like
- shares, not normal folders.
-
-2008-02-29 Cosimo Cecchi <cosimoc@gnome.org>
-
- * daemon/gvfsbackendcomputer.c: (recompute_files),
- (mount_volume_from_drive), (report_no_media_error),
- (poll_for_media_cb), (try_mount_mountable):
- Implement media polling for Computer backend, handling the case when
- no media is in the drive. Also adds a new string. (#514135)
-
-2008-02-29 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * daemon/gvfsbackendnetwork.c (g_vfs_network_daemon_init):
-
- Added another translator comment.
-
-2008-02-29 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * daemon/gvfsbackendftp.c (do_mount):
-
- Added translator comment.
-
-2008-02-29 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * daemon/gvfsbackendftp.c (g_vfs_backend_ftp_pop_connection):
-
- Reuse existing string to reduce the impact of the string
- freeze breaks.
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_mount):
- actually translate the display name
-
-2008-02-28 A. Walton <awalton@svn.gnome.org>
-
- * daemon/gvfsbackendnetwork.c: (g_vfs_network_daemon_init):
- * daemon/gvfsbackendnetwork.h:
- Set the default name for the network backend to prevent
- possible confusion about "NETWORK Filesystem Service".
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_mount):
- really check for errors correctly. I need to go to bed.
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_mount):
- check for errors correctly
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- reviewed by: A. Walton <awalton@svn.gnome.org>
-
- * daemon/daemon-main-generic.c: (main):
- * daemon/daemon-main.c: (daemon_setup):
- * daemon/daemon-main.h:
- * daemon/gvfsbackendcdda.c: (g_vfs_cdda_daemon_init):
- * daemon/gvfsbackendcdda.h:
- * daemon/gvfsbackendsmb.c: (g_vfs_smb_daemon_init):
- * daemon/gvfsbackendsmb.h:
- * daemon/gvfsbackendsmbbrowse.c: (g_vfs_smb_browse_daemon_init):
- * daemon/gvfsbackendsmbbrowse.h:
- provide default application names for the daemons. This is necessary
- to avoid gnome-keyring from saying "Application" wants access to the
- keyring, which could sound very evil for a casual user.
- Adds some more strings for the poor translators, too!
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_mount), (try_mount):
- rewrite login code to use the keyring if available. Also fix mount
- specs to be unique and display names to list the user while at it.
-
-2008-02-28 A. Walton <awalton@svn.gnome.org>
-
- * daemon/Makefile.am:
- Really disable FTP if we don't HAVE_HTTP.
-
-2008-02-28 A. Walton <awalton@svn.gnome.org>
-
- * daemon/gvfsbackendnetwork.c: (recompute_files):
- Fixup DNS-SD exposed links to actually link to the service provided.
-
-2008-02-28 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c (g_vfs_backend_dav_init):
- Mark the dav backend as user visible.
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_connection_create),
- (ftp_connection_login), (ftp_connection_use), (ftp_connection_new):
- split out login code, so we can try multiple auths when some fail.
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsdaemonutils.c: (gvfs_file_info_populate_default),
- (gvfs_file_info_populate_names),
- (gvfs_file_info_populate_content_types):
- * daemon/gvfsdaemonutils.h:
- add functions that are supposed to set default values on a remote file
- info structure, so we don't duplicate the code across multiple
- backends.
-
- * daemon/gvfsbackendftp.c: (ftp_error_set_from_response),
- (ftp_connection_new), (file_info_get_flags), (file_info_query):
- use it.
-
-2008-02-28 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvolumemonitor.c:
- (mount_added):
- (mount_removed):
- Emit signals outside of the lock to avoid
- deadlocks (#519250)
-
-2008-02-28 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp-fl-parser.c (fl_parser_start_node_cb):
- Fix the content-type of directories (inode/directory, not
- x-directory/normal as in gnome-vfs)
- Set file icons from the content-type
-
- * daemon/gvfsbackendobexftp.c (_change_directory):
- Add a FIXME, trying to change to a non-existant directory
- errors out with "permission denied", which isn't the case
-
- (_query_file_info_helper): set the right content-type and icon
- for the root folder
-
- (is_connected), (do_mount): Wait until we're connected to exit from
- do_mount()
-
- (do_open_for_read): Fix a crash when opening an inexistant file for
- read
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_error_set_from_response),
- (file_info_query), (do_query_info):
- Set sane error messages for ftp error codes.
- Also remove some excessive debug messages.
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (do_mount):
- fix typo (thanks Andre)
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsbackendftp.c: (ftp_connection_sendv),
- (ftp_connection_send), (do_start_write), (do_create), (do_append),
- (do_replace), (g_vfs_backend_ftp_class_init):
- implement append
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- gcc warning fixes to be able to compile with -Werror:
- * daemon/gvfsbackendburn.c:
- mark virtual_node_ref as unused, because it is
- * test/benchmark-common.c: (benchmark_timeout):
- signal handlers take an int argument.
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * configure.ac:
- list FTP in configuration summary, too
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/Makefile.am:
- * daemon/gvfsbackendftp.c:
- * daemon/gvfsbackendftp.h:
- drop my current FTP code and continue development in here. Should make
- testing easier for adventurous people.
-
-2008-02-28 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp.c (do_query_info): Add
- missing mutex unlock, duh!
-
-2008-02-28 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsjobenumerate.c: (g_vfs_job_enumerate_add_infos):
- * daemon/gvfsjobenumerate.h:
- constify list argument, so ownership is apparent.
-
-2008-02-28 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendobexftp-fl-parser.c (fl_parser_start_node_cb):
- Set the content-type on files by having a good guess if we didn't
- get a mime-type from the folder listings
-
-2008-02-27 Benjamin Otte <otte@gnome.org>
-
- * programs/gvfs-mount.c: (prompt_for):
- don't mess up my terminal when entering passwords
-
-2008-02-27 Bastien Nocera <hadess@hadess.net>
-
- * client/test-uri-utils.c: add test for obex URIs
- * configure.ac: Require expat for the obexftp backend
- * daemon/Makefile.am:
- * daemon/gvfsbackendobexftp-cap-parser.c:
- * daemon/gvfsbackendobexftp-cap-parser.h:
- * daemon/gvfsbackendobexftp-fl-parser.c:
- * daemon/gvfsbackendobexftp-fl-parser.h:
- Added ObexFTP folder listing and capability parser from
- gnome-vfs-obexftp, ported to gio
-
- * daemon/gvfsbackendobexftp.c:
- * daemon/gvfsbackendobexftp.h:
- * daemon/obexftp-marshal.list:
- * daemon/obexftp.mount.in: Add read-only ObexFTP backend
-
- (Closes: #509621)
-
-2008-02-27 Luca Ferretti <elle.uca@libero.it>
-
- * daemon/gvfsbackendcdda.c: (do_query_info):
- Make "file don't exist" message conform to other backends;
- no, it isn't a string freeze break, the message yet exists
- elsewhere.
-
-2008-02-27 Benjamin Otte <otte@gnome.org>
-
- * common/gmountsource.c: (g_mount_source_ask_question_finish):
- Set out parameters for questions, too.
-
-2008-02-27 Benjamin Otte <otte@gnome.org>
-
- * common/gmountsource.c: (g_mount_source_ask_password_finish):
- Set out parameters even in error case.
-
-2008-02-26 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c: (do_delete):
- Correct error domain in case delete failed.
-
-2008-02-26 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Redo authentication and implement keyring support. Based
- on a patch by Carlos Garcia Campos.
-
-2008-02-26 Alexander Larsson <alexl@redhat.com>
-
- * programs/gvfs-bash-completion.sh:
- * programs/gvfs-ls.c:
- Better completion
-
-2008-02-26 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsjobmount.c (run):
- No need to ref backend specifically now, as
- the core refs the job and the job refs the
- backend. Revert that change.
-
-2008-02-26 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsjob.c:
- (g_vfs_job_run):
- (g_vfs_job_try):
- Ref job while calling out.
-
- * daemon/gvfsjobmount.c:
- Own ref to backend while job is alive.
-
-2008-02-26 Carlos Garcia Campos <carlosgc@gnome.org>
-
- * daemon/gvfsbackendsmb.c: (auth_callback):
- Fix parameters order in keyring lookup call.
-
-2008-02-26 Yanko Kaneti <yaneti@declera.com>
-
- * configure.ac: explicitly depend on libxml-2.0
- for building the dav backend.
-
-2008-02-26 Benjamin Otte <otte@gnome.org>
-
- * common/gmountsource.c: (ask_password_reply),
- (g_mount_source_ask_password_async), (ask_question_reply),
- (g_mount_source_ask_question_async):
- make errors say "Internal Error" instead of failing
-
-2008-02-26 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsjobmount.c: (run), (try):
- use ref/unref pair to stop backend from going away when the mount
- fails
-
-2008-02-26 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsjobmount.c: (mount_failed):
- no g_warning for failed monts, please
-
-2008-02-26 Benjamin Otte <otte@gnome.org>
-
- * daemon/gvfsjob.c: (g_vfs_job_failed_from_error):
- * daemon/gvfsjob.h:
- make the error argument const
-
-2008-02-26 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvolumemonitor.c:
- Use standard lock instead of recursive lock.
-
-2008-02-25 David Zeuthen <davidz@redhat.com>
-
- * configure.ac: fix typo in AC_ARG_ENABLE for gphoto2
-
-2008-02-25 Alexander Larsson <alexl@redhat.com>
-
- * common/gdbusutils.c:
- * daemon/dbus-gmain.c:
- Only use dbus_watch_get_unix_fd for
- dbus >= 1.1.1
-
-2008-02-25 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.1.8 ===
-
-2008-02-25 Alexander Larsson <alexl@redhat.com>
-
- * programs/Makefile.am (EXTRA_DIST):
- Add gvfs-bash-completion.sh
-
- * NEWS:
- Update for release
-
-2008-02-25 Carlos Garcia Campos <carlosgc@gnome.org>
-
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendsmb.c:
- Update to gvfskeyring api changes
-
- * daemon/gvfskeyring.c:
- * daemon/gvfskeyring.h:
- Add object, authtype and port parameters for both save and
- lookup.
-
-2008-02-25 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Initial take on implementing delete.
-
- * daemon/gvfsbackendhttp.c:
- * daemon/gvfsbackendhttp.h:
- Add http_error_code_from_status helper function.
-
-2008-02-25 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Also check if the URL is a directory by doing a PROPFIND in
- addition to the OPTIONS. That will also force authentication
- since some servers (e.g. Zope) allow OPTIONS without doing
- authentication.
-
-2008-02-25 Alexander Larsson <alexl@redhat.com>
-
- * client/sftpuri.c:
- Make sure both no-port and port 22 refer to the same mount.
-
- * daemon/gvfsbackendsftp.c:
- Support ports. (#518504)
-
-2008-02-25 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Keep the SoupMessage around for as long as Multistatus is
- valid.
-
-2008-02-25 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- * daemon/gvfsbackendhttp.c:
- * daemon/gvfsbackendhttp.h:
- Add a SoupSessionAsync to be used for SoupInputStream doesn't
- yet work with SoupSessionSync. Also make sure we share
- authentication.
-
-2008-02-25 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- - Port the mount operation to use the sync i/op.
- - Keep the auth information around so we can use them again in
- the case that a subpath requires different authentication. This
- is needed since libsoup will forgot all auth after a 401.
- - Ignore trailing slashes in ms_response_is_target ().
- - Add an initial version of make_directory ().
- * daemon/gvfsbackendhttp.c:
- * daemon/gvfsbackendhttp.h:
- Add message_new_from_filename_full which will add a trailing "/"
- if is_dir is true. (Saves uneccesary redirects in some cases)
-
- Various bits and pieces came from Yann Rouillard.
-
-2008-02-25 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsmb.c:
- Support gnome-keyring (#511517)
- Patch from Carlos Garcia Campos
-
-2008-02-25 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendnetwork.c (recompute_files):
- Fix spelling inconsistency "Network" vs "network" (#518487)
-
-2008-02-25 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.c (get_mountspec_from_uri):
- g_uri_get_scheme -> g_uri_parse_scheme
-
-2008-02-25 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * hal/ghalvolume.c (do_update_from_hal_for_camera): Add
- two translator comments.
-
-2008-02-24 David Zeuthen <davidz@redhat.com>
-
- * client/gdaemonfile.c:
- * client/gdaemonvolumemonitor.c:
- * client/gdaemonvolumemonitor.h: Prefer to return a GDaemonMount
- from an existing GDaemonVolumeMonitor rather than rolling our own
- for GDaemonFile's g_file_find_enclosing_mount()
- implementation. This is to ensure that g_mount_get_volume() will
- work properly with mounts that are adopted by GVolume objects from
- other volume monitors.
-
- * configure.ac: Check for libgphoto2
-
- * daemon/Makefile.am:
- * daemon/gvfsbackendcdda.c: Use HAL to detect when the disc is
- removed and then forcibly unmount the mount. Report size of
- disc. Hint the file manager to preview files.
-
- * hal/ghaldrive.c:
- * hal/ghalmount.c:
- * hal/ghalvolume.c:
- * hal/ghalvolumemonitor.c:
- * hal/ghalvolumemonitor.h:
- * hal/hal-pool.c: Ensure that audio and blank CD's are
- displayed (#514139). Read info.desktop.[icon|name] properties
- from hal and use these if found. Use proper icon for audio players
- and make the gphoto2 detection support it as well. Also check for
- subsystem when filtering on hal capabilities. Also revert the
- commit to ignore NFS mounts as gio will now only report an user
- visible mount if it's in /media or $HOME. Make LUKS encrypted
- volumes work.
-
- * daemon/Makefile.am:
- * daemon/gphoto2.mount.in:
- * daemon/gvfsbackendgphoto2.c:
- Land the gphoto2 backend.
-
- * programs/Makefile.am:
- * programs/gvfs-ls.c: Make the --hidden option work. Default
- to short listing and add a --long option. Implement new options
- --show-completions and --show-mounts that can be used for
- shell completions.
- * programs/gvfs-tree.c: New program
- * programs/gvfs-bash-completion.sh: Bash completion for gvfs;
- uses the new --show-completions and --show-mounts options in
- gvfs-ls.
-
-2008-02-25 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendnetwork.c:
- Add monitoring of inlined locations. (#509600)
- Patch from A. Walton
-
-2008-02-22 A. Walton <awalton@svn.gnome.org>
-
- * daemon/gvfsbackendnetwork.c: (recompute_files):
- Make network:// really add extra domain links.
-
-2008-02-22 A. Walton <awalton@svn.gnome.org>
-
- * daemon/gvfsbackendnetwork.c: (recompute_files):
- Fix typo so we generate correct dns-sd links.
-
-2008-02-22 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendnetwork.c:
- (g_vfs_backend_network_init):
- Fix up dns-sd method name and gconf directory.
-
-2008-02-22 Alexander Larsson <alexl@redhat.com>
-
- * daemon/dns-sd.mount.in:
- Correct type and exec name
-
-2008-02-22 Alexander Larsson <alexl@redhat.com>
-
- * common/gmounttracker.c:
- Unlock lock if returning early.
-
-2008-02-22 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- * daemon/Makefile.am:
- * daemon/dns-sd.mount.in:
- * daemon/gvfsbackenddnssd.[ch]:
- Landed initial version of dns-sd backend.
-
-2007-02-22 Christian Neumair <cneumair@gnome.org>
-
- * gconf/gconf-module.c: (g_io_module_load):
- * gconf/Makefile.am:
- * hal/hal-module.c: (g_io_module_load):
- * hal/Makefile.am:
- * client/gdaemonvfs.c: (g_daemon_vfs_init):
- * client/Makefile.am:
- Bind to GVFS text domain. Fixes #517892.
-
-2008-02-22 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendnetwork.c:
- Fix up network_file_equal.
-
-2008-02-22 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendnetwork.c:
- Update the network backend to use inline files and
- remove the default workgroup link. Also add dns-sd
- support (not used yet). (#509600)
- Patch from A. Walton
-
-2008-02-22 Carlos Garcia Campos <carlosgc@gnome.org>
-
- * daemon/gvfsbackendsftp.c: (handle_login), (do_mount):
- Ask for the username in the sftp login when it's not
- provided. (#511509)
-
-2008-02-21 Christian Persch <chpe@gnome.org>
-
- * configure.ac: Update hal req to 0.5.10. Bug #515779.
-
-2008-02-21 Carlos Garcia Campos <carlosgc@gnome.org>
-
- * daemon/gvfsbackendsftp.c: (handle_login):
- Fix memory leak.
-
-2008-02-21 Carlos Garcia Campos <carlosgc@gnome.org>
-
- * daemon/gvfsbackendsftp.c: (handle_login):
- Fix password save flags initialization.
-
-2008-02-21 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac (DISTCHECK_CONFIGURE_FLAGS):
- Require latest glib for the contains_file
- change.
-
-2008-02-21 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- (g_daemon_file_prefix_matches):
- (g_daemon_file_file_iface_init):
- Update for the contains_file rename in gio.
-
-2008-02-20 Alexander Larsson <alexl@redhat.com>
-
- * daemon/Makefile.am:
- * daemon/gvfsbackendsmb.c:
- * daemon/gvfsbackendsmbbrowse.c:
- If gconf availible, initialize default workgroup
- from gconf.
- Handle X-GNOME-DEFAULT-WORKGROUP special case
- to list the current workgroup
-
-2008-02-20 Alexander Larsson <alexl@redhat.com>
-
- * daemon/daemon-main.c (send_spawned):
- Fix "_" spew.
-
-2008-02-20 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Fix spelling in string
-
-2008-02-20 Alexander Larsson <alexl@redhat.com>
-
- * common/gmountsource.[ch]:
- Add ask_question support
-
- * daemon/gvfsbackendsftp.c:
- Handle host identity changed messages (#517460)
-
- Patch from Carlos Garcia Campos
-
-2008-02-20 Alexander Larsson <alexl@redhat.com>
-
- * daemon/Makefile.am:
- * daemon/gvfsbackendnetwork.[ch]:
- * daemon/network.mount.in:
- Initial network backend work (#509600)
-
-2008-02-19 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Authentication fixups (#511517)
- Patch from Carlos Garcia Campos
-
-2008-02-19 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendtrash.c:
- * gconf/gapplookupgconf.c:
- * test/benchmark-common.c:
- Some more cleanup.
-
-2008-02-19 Alexander Larsson <alexl@redhat.com>
-
- * lots of *.c files:
- Code cleanup from Kjartan:
- Removes unused code/variables.
- Uses right printf types
- Uses non-deprecated dbus calls.
- Removes spurious ; and ,
- deleted extra checks for NULL for g_free
-
-2008-02-18 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalmount.c:
- Cleanups of case insensitive search. (#154549)
- patch from John Millikin.
-
-2008-02-18 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsjobenumerate.c (g_vfs_job_enumerate_add_info):
- Ensure we're using "/" as separator for uris.
- This only affects win32, which probably doesn't work atm, but
- still its nice to be explicit.
-
-2008-02-18 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Detect gnome-keyring
-
- * common/gmountsource.[ch]:
- Add password out to ask_password
-
- * daemon/Makefile.am:
- * daemon/gvfskeyring.[ch]:
- Helper code for keyring support
-
- * daemon/gvfsbackendsftp.c:
- Add keyring support
-
- * daemon/gvfsbackenddav.c:
- * daemon/gvfsbackendsmb.c:
- Update to api changes
-
- This is the initial work on keyring support (#511517)
- Patch from Carlos Garcia Campos
-
-2008-02-16 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- * daemon/gvfsbackendhttp.c:
- * daemon/soup-input-stream.c:
- * daemon/soup-output-stream.c:
- Use SoupSessionSync instead of SoupSessionAsync and
- convert SoupStreams and authentication logic.
-
-2008-02-15 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsjobenumerate.c:
- Fix a little crasher (NULL terminate g_build_filename) that
- was introduced by the optional uri addition change to enumerate.
-
-2008-02-15 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Completly redo Multistatus parsing.
-
-2008-02-15 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- Pass uri in query_info_async too.
-
-2008-02-15 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- Pass an optional uri to query_info and enumerate
-
- * daemon/gvfsbackend.[ch]:
- Add automatic info filling, implement thumbnail
- checking if uri passed in.
-
- * daemon/gvfsjobenumerate.[ch]:
- * daemon/gvfsjobqueryinfo.[ch]:
- Get optional uri argument.
- Call automatic backend info filling.
-
-2008-02-15 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackendhttp.c: (g_vfs_backend_uri_for_filename):
- Escape the filename.
-
-2008-02-14 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendcomputer.c:
- If lookup returns NULL it already set the error.
- Handle this in all callers.
-
-2008-02-14 Alexander Larsson <alexl@redhat.com>
-
- * daemon/Makefile.am:
- Disable install of ftp.mount for now
-
-2008-02-14 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfschannel.c:
- Fix case where current_job has died (NULL) but
- the current_job_seq_nr was left and matched
- a sent cancel op. (#515959)
-
-2008-02-13 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsmb.c (do_read):
- Limit smb reads to 65535 bytes to avoid issues on
- large reads.
-
-2008-02-13 Ryan Lortie <desrt@desrt.ca>
-
- * daemon/gvfsbackendtrash.c:
- Keep track of the number of top level items in the trash.
- Expose this value via the trash::item-count attribute.
-
-2008-02-13 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalmount.c:
- Don't show nfs mounts (#516036)
-
-2008-02-12 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalvolumemonitor.c (g_hal_volume_monitor_finalize):
- Don't double free list optical disc list.
-
-2008-02-11 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.1.7 ===
-
-2008-02-11 Alexander Larsson <alexl@redhat.com>
-
- * NEWS:
- Update for release
-
-2008-02-11 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- Set the correct copy name.
- Set description.
-
-2008-02-11 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsmb.c:
- (do_set_display_name):
- Fix typo: get_dirname, not get_basename.
- Fixes renames on smb (#514126)
-
-2008-02-11 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Set new path in set_display name.
-
- * daemon/gvfsjobsetdisplayname.c:
- Assert that new_path is set
-
-2008-02-11 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * client/gdaemonfileinputstream.c:
- * client/gdaemonfileoutputstream.c:
- * common/gsysutils.c:
- * common/gvfsdaemonprotocol.c:
- * daemon/gvfsbackendburn.c:
- * daemon/gvfsbackendcdda.c:
- * daemon/gvfsbackenddav.c:
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendsmb.c:
- * daemon/gvfsbackendsmbbrowse.c:
- * daemon/gvfsbackendtest.c:
- * daemon/gvfsdaemonutils.c:
- * daemon/gvfsjob.c:
- * daemon/mount.c:
- * daemon/pty_open.c:
- Save errno befor making other calls.
- Be safe when calling g_set_error()
- Patch from Christian Persch (#514822)
-
-2008-02-11 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * daemon/gvfsbackendcomputer.c:
- * hal/ghalvolume.c:
- * programs/gvfs-mount.c:
- Update for the new mount flag argument.
-
- * hal/ghaldrive.c:
- * programs/gvfs-open.c:
- Fix warnings
-
-2008-02-10 Luca Ferretti <elle.uca@libero.it>
-
- * daemon/gvfsbackendburn.c: (g_vfs_backend_burn_init),
- (file_info_from_node):
- Rename burn:// with old "CD/DVD Creator" name.
-
- * daemon/gvfsbackendtrash.c: (g_vfs_backend_trash_init),
- (do_query_info):
- Rename trash:// with old "Trash" name.
-
-2008-02-08 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalvolume.c:
- Implement g_volume_should_automount.
-
-2008-02-08 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendcomputer.c:
- Add "filesystem" to computer:
-
- * hal/ghalmount.c:
- Remove spew
-
-2008-02-08 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalmount.c:
- Try to find cdrom icons from autorun.inf.
- Based on patch from John Millikin
-
-2008-02-08 Alexander Larsson <alexl@redhat.com>
-
- * common/gvfsdaemonprotocol.c:
- Fix up indentation
- Don't unref file from g_file_icon_get_file().
-
-2008-02-08 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- Always set CAN_TRASH to false
-
-2008-02-08 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c (unescape_pathname):
- Handle unescaping __ correctly (#514040)
-
-2008-02-06 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendsmb.c:
- Ensure name is set in query_info (#511601)
- Clean up setting display name of /
-
-2008-02-05 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvolumemonitor.c (mount_removed):
- Don't spew warnings when hidden mounts are unmounted.
-
-2008-02-05 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- (do_query_info):
- Correctly set the name for toplevel items.
-
-2008-02-04 Tomas Bzatek <tbzatek@redhat.com>
-
- * daemon/gvfsjobmakesymlink.c:
- Wrong symlink target passed to backend
-
-2008-02-04 Alexander Larsson <alexl@redhat.com>
-
- * README:
- Add some info in README
-
-2008-02-04 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Make name of sftp root be "/ on <host>" (#511515)
-
-2008-02-04 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsdaemonutils.c:
- * hal/ghalvolume.c:
- Cleanup i18n strings (#510192)
-
-2008-02-04 Alexander Larsson <alexl@redhat.com>
-
- * common/gvfsdaemonprotocol.h:
- * client/gdaemonfileinputstream.c:
- * client/gdaemonfileoutputstream.c:
- * daemon/gvfsreadchannel.c:
- * daemon/gvfswritechannel.c:
- Remove SEEK_CUR from channel protocol. This
- doesn't work with readahead, and can be converted
- to a SEEK_SET since we know the file position on
- the client side.
-
-2008-02-04 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfileinputstream.c:
- * client/gdaemonfileoutputstream.c:
- Init seq_nr to 1 so that seq_nr 0 is special
- (used for e.g. readahead ops)
-
- * daemon/gvfschannel.[ch]:
- * daemon/gvfsreadchannel.c:
- Implement readahead.
-
-2008-02-03 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- * daemon/gvfsbackendhttp.c:
- Move write logic (replace, create) to the dav backend.
-
-2008-02-01 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsreadchannel.c:
- Request larger buffers than the client requested
- so for better network efficiency. (#512472)
-
-2008-02-01 Alexander Larsson <alexl@redhat.com>
-
- * programs/gvfs-open.c:
- Pass on uris unmodified to avoid roundtripping
- through GFile which can be destructive.
-
-2008-01-31 Alexander Larsson <alexl@redhat.com>
-
- Implement uri navigation for http uris (#509341)
-
- * client/gvfsurimapper.[ch]:
- Add get_mount_info_for_path method for mount types
- like ssh that change MountInfo as the path changes.
-
- * client/httpuri.c:
- Implement get_mount_info_for_path.
- For http, set the path from the uri.
- The will be removed on i/o by the corresponding
- path being in the mount_prefix.
-
- * daemon/gvfsbackendhttp.c:
- Set mount_prefix to path from uri.
- Remove unused code in message_new_from_filename
-
- * client/gdaemonfile.c:
- * client/gdaemonvfs.[ch]:
- Use the new uri mapper function to change GMountInfo
- as the path changes.
-
-2008-01-31 Alexander Larsson <alexl@redhat.com>
-
- * common/gmountspec.[ch]:
- Add shared path canonicalization:
- g_mount_spec_canonicalize_path()
-
-2008-01-31 Alexander Larsson <alexl@redhat.com>
-
- * daemon/soup-input-stream.c:
- Handle errors in send_finish.
-
-2008-01-30 Tomas Bzatek <tbzatek@redhat.com>
-
- * daemon/gvfsbackendlocaltest.c:
- Use read/write operations instead of do_copy ()
-
-2008-01-30 Alexander Larsson <alexl@redhat.com>
-
- * client/gvfsfusedaemon.c:
- Set read and execute privs for all directories.
- Fix up type when reading can-read etc attributes.
- Don't use uid/gid in the fuse mount. The
- uid/gid doesn't make sense locally anyway.
-
-2008-01-30 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackend.c:
- (g_vfs_backend_register_mount):
- Correctly detect unset stable name
-
-2008-01-29 Tomas Bzatek <tbzatek@redhat.com>
-
- * daemon/gvfsbackendlocaltest.c:
- Fixed error handling in do_enumerate ()
- More cleanup
-
-2008-01-29 Alexander Larsson <alexl@redhat.com>
-
- * Makefile.am:
- * configure.ac:
- * gconf/Makefile.am: Added.
- * gconf/gapplookupgconf.[ch]: Added.
- * gconf/gconf-module.c: Added.
- Add gconf based implementation of
- g_app_info_get_default_for_uri_scheme ()
-
-2008-01-29 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalvolumemonitor.c (g_hal_volume_monitor_class_init):
- Remove setting prio/name
-
-2008-01-29 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Require glib 2.15.5 for g_file_query_default_handler ().
-
- * programs/Makefile.am:
- * programs/gvfs-open.c:
- Added gvfs-open app
-
-2008-01-29 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.1.6 ===
-
-2008-01-29 Alexander Larsson <alexl@redhat.com>
-
- * NEWS:
- Update for release
-
- * daemon/Makefile.am:
- Always dist all .mount.in files
-
-2008-01-28 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.1.5 ===
-
-2008-01-28 Alexander Larsson <alexl@redhat.com>
-
- * daemon/daemon-main.c:
- * daemon/main.c:
- Include locate.h for setlocale
-
-2008-01-28 Alexander Larsson <alexl@redhat.com>
-
- * NEWS:
- Update for release
-
-2008-01-28 Alexander Larsson <alexl@redhat.com>
-
- * hal/hal-device.c:
- Use gi18n-lib.h, not gi18n.h in client side code.
-
-2008-01-28 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c (g_daemon_file_move):
- Fix typo G_DAEMON_FILE -> G_IS_DAEMON_FILE
-
- * configure.ac:
- Require glib >= 2.15.4
-
- * client/gdaemonvfs.c:
- * client/gdaemonvolumemonitor.c:
- * hal/ghalvolumemonitor.c:
- Register with the new extension points API.
-
-2008-01-28 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendlocaltest.c:
- * programs/gvfs-cat.c:
- C89 fixes from Jens Granseuer (#511838)
-
-2008-01-28 Alexander Larsson <alexl@redhat.com>
-
- * daemon/Makefile.am:
- * daemon/daemon-main.c:
- * daemon/main.c:
- Enable translations for daemons and some l10n
- fixes. Patch from Luca Ferretti.
-
-2008-01-24 Matthias Clasen <mclasen@redhat.com>
-
- * daemon/gvfsbackendsmbbrowse.c
- (get_file_info_from_entry): Replace : by :: in
- smb::comment, too.
-
-2008-01-24 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Update intltool req for po/LINGUAS
-
-2008-01-24 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalvolumemonitor.c:
- Remove debug spew.
-
- * hal/ghaldrive.c:
- * hal/ghalvolume.c:
- Implement identifier getters
-
- * programs/gvfs-mount.c:
- Show identifiers
-
-2008-01-24 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsdaemon.c:
- Indentation fix
-
- * hal/ghaldrive.[ch]:
- * hal/hal-device.c:
- * hal/ghalvolume.c:
- * hal/ghalmount.c:
- Clean up coding style
-
- * hal/ghalvolumemonitor.[ch]:
- Clean up coding style
- Don't show drives if we're ignoring all their
- volumes (and there are volumes)
-
- * hal/hal-pool.c:
- Clean up coding style
- Actually look at cap_only.
- Free private dbus_connection on error
-
-2008-01-24 Bastien Nocera <hadess@hadess.net>
-
- * programs/Makefile.am:
- * programs/gvfs-mkdir.c: (main): Add a test mkdir program
-
-2008-01-23 Bastien Nocera <hadess@hadess.net>
-
- * client/test-uri-utils.c: (main):
- * client/Makefile.am: Add test program for the
- functions in gvfsuriutils.c
-
- * client/gvfsuriutils.c: (g_vfs_decode_uri):
- Fix parsing of IPv6 URIs where the host is in brackets
-
-2008-01-23 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- (add_extra_trash_info):
- Use -, not _ in attribute names
-
-2008-01-23 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- (add_extra_trash_info):
- Use :: to delimit namespace for trash attributes
-
-2008-01-22 Gil Forcada <gforcada@gnome.org>
-
- * configure.ac: Added ca to ALL_LINUGAS.
-
-2008-01-22 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Ensure we return a IS_DIRECTORY error when
- we open a file for reading (#511225)
- The same needs to happen for writes.
-
-2008-01-21 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.1.4 ===
-
-2008-01-21 Alexander Larsson <alexl@redhat.com>
-
- * NEWS:
- Update for release
-
-2008-01-21 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * client/sftpuri.c:
- * common/gmounttracker.c:
- * daemon/gvfsmonitor.c:
- * daemon/gvfsbackend.c:
- Fix warnings
-
- * daemon/gvfsbackendburn.c:
- * daemon/gvfsbackendlocaltest.c:
- * daemon/gvfsbackendtrash.c:
- Update to latest gio API (removal of
- duplicate GSeekable calls).
-
-2008-01-21 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.1.3 ===
-
-2008-01-21 Alexander Larsson <alexl@redhat.com>
-
- * NEWS:
- Update for release
-
- * daemon/Makefile.am:
- * daemon/main.c:
- Autospawn fuse on daemon start.
-
- * daemon/mount.c:
- (read_mountable_config):
- Remove debug spew
-
-2008-01-21 Alexander Larsson <alexl@redhat.com>
-
- * client/gvfsfusedaemon.c:
- Fix error with the names of the root items the
- fuse mount.
-
-2008-01-21 Alexander Larsson <alexl@redhat.com>
-
- * daemon/mount.c:
- Reload the list of mountables on SIGUSR1
-
-2008-01-21 Christian Kellner <gicmo@gnome.org>
-
-
- * daemon/gvfsbackenddav.c:
- Small cleanups.
-
- * daemon/gvfsbackendhttp.c:
- * daemon/gvfsbackendhttp.h:
- Implement query_info for plain http.
-
-2008-01-21 Alexander Larsson <alexl@redhat.com>
-
- * client/Makefile.am:
- * client/gdaemonvfs.c:
- * client/sftpuri.c: Added.
- Added sftp uri mapper that aliases ssh: to sftp: (#509860)
-
- * client/smburi.c:
- (smb_from_uri):
- Fix leak.
-
-2008-01-21 Alexander Larsson <alexl@redhat.com>
-
- * common/gmounttracker.c:
- Do the initial mount tracker call sync so that
- the volume monitor is populated with the current
- status after construction. This is more in-line
- with what apps expect.
-
-2008-01-18 Alexander Larsson <alexl@redhat.com>
-
- * common/gmountspec.c:
- (g_mount_spec_new_from_data):
- Ensure that mount_prefix is never NULL. It
- should be "/" in that case.
-
-2008-01-18 Luca Ferretti <elle.uca@libero.it>
-
- * programs/Makefile.am:
- * programs/gvfs-cat.c: (cat), (main):
- Add i18n/l10n to gvfs-cat, plus indentation. For details see
- http://mail.gnome.org/archives/gnome-vfs-list/2008-January/msg00020.html
-
-2008-01-18 David Zeuthen <davidz@redhat.com>
-
- The volume monitor bits of gphoto2 support. The actual backend
- will follow later. Right now the code is only enabled on Linux,
- need trivial changes to work on other operating systems.
-
- * hal/ghalvolume.c: (do_update_from_hal_for_camera),
- (update_from_hal), (g_hal_volume_new):
- * hal/ghalvolumemonitor.c: (get_hal_pool),
- (g_hal_volume_monitor_finalize), (get_volumes),
- (mountpoints_changed), (mounts_changed),
- (g_hal_volume_monitor_force_update), (hal_changed),
- (g_hal_volume_monitor_constructor), (find_camera_volume_by_udi),
- (update_cameras):
- * hal/ghalvolumemonitor.h:
- * hal/hal-pool.c: (hal_pool_finalize), (has_cap_only),
- (hal_pool_add_device_by_udi),
- (hal_pool_add_device_by_udi_and_properties), (hal_pool_new):
- * hal/hal-pool.h:
-
-2008-01-17 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- Disconnect signal handler, since the data struct we pass
- into the signal handler will be invalid after the mount
- is finished.
-
-2008-01-17 Christian Kellner <gicmo@gnome.org>
-
- * common/gmountsource.c:
- * common/gmountsource.h:
- Make g_mount_source_ask_password_async () public and add
- g_mount_source_ask_password_finish ().
-
- * daemon/gvfsbackenddav.c:
- Use g_mount_source_ask_password_async instead of the sync
- version so we don't hang during auth. Few cleanups.
-
- * programs/gvfs-mount.c:
- Don't echo the password, if possible.
-
-2008-01-17 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalvolume.c:
- * hal/ghalvolumemonitor.c:
- Initial work on LUKS, from david.
-
-2008-01-17 Alexander Larsson <alexl@redhat.com>
-
- * common/gvfsdaemonprotocol.h:
- * client/gdaemonfile.c:
- Add upload operation (requires latest glib)
-
- * daemon/gvfsbackend.[ch]:
- * daemon/gvfsjobupload.[ch]: Added.
- Implement upload in daemon
-
- * daemon/Makefile.am:
- * daemon/burn.mount.in: Added.
- * daemon/gvfsbackendburn.[ch]: Added.
- Added initial burn:/// implementation.
- Not fully implemented, but read works.
-
- * daemon/gvfsbackendcomputer.c:
- Ensure we set right mimetype for dirs
-
-2008-01-16 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- * daemon/gvfsbackendhttp.c:
- * daemon/gvfsbackendhttp.h:
- A few cleanups.
-
-2008-01-16 Christian Kellner <gicmo@gnome.org>
-
- * daemon/gvfsbackenddav.c:
- * daemon/gvfsbackendhttp.c:
- * daemon/gvfsbackendhttp.h:
- * daemon/soup-input-stream.c:
- * daemon/soup-output-stream.c:
- Port to libsoup-2.4.
-
- * configure.ac:
- * daemon/Makefile.am:
- Make building of http optional (and depend on wether
- libsoup is found or not)
- Patch from Dan Winship.
-
-2008-01-16 Frederic Crozat <fcrozat@mandriva.com>
-
- * Makefile.am: Only build hal module when hal support is
- enabled (#509693).
-
-2008-01-15 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * daemon/daemon-main.c:
- * daemon/gvfsbackendcdda.c:
- * daemon/gvfsbackendcomputer.c:
- * daemon/gvfsbackendftp.c:
- * daemon/gvfsbackendlocaltest.c:
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendsmb.c:
- * daemon/gvfsbackendsmbbrowse.c:
- * daemon/gvfsbackendtrash.c:
- * daemon/gvfsjobsetattribute.c:
- * hal/ghaldrive.c:
- Clean up strings and add translator comments
-
-2008-01-15 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendcomputer.c:
- (recompute_files):
- Fix crash (#508236)
- Patch from Joe Marcus Clarke
-
-2008-01-15 David Zeuthen <davidz@redhat.com>
-
- * hal/ghaldrive.c: (_eject_unmount_mounts_cb),
- (_eject_unmount_mounts), (g_hal_drive_eject):
- * hal/ghalvolume.c: (g_hal_volume_new), (g_hal_volume_can_mount),
- (g_hal_volume_has_device_path), (g_hal_volume_mount),
- (g_hal_volume_eject):
- * hal/ghalvolume.h:
- * hal/ghalvolumemonitor.c:
- (g_hal_volume_monitor_lookup_volume_for_device_path),
- (update_volumes), (update_mounts), (update_discs):
- Fix debug spew and use try device path before mount path to tie
- volume and mount objects together. Also fix some issues with
- mounting and unmounting.
-
-2008-01-15 Daniel Nylander <po@danielnylander.se>
-
- * configure.ac: Added sv to ALL_LINGUAS.
-
-2008-01-14 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.1.2 ===
-
-2008-01-14 Alexander Larsson <alexl@redhat.com>
-
- * NEWS:
- Update for release
-
-2008-01-14 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac (DISTCHECK_CONFIGURE_FLAGS):
- Require glib 2.15.2
-
-2008-01-14 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * daemon/gvfsbackendlocaltest.c:
- * daemon/gvfsbackendtrash.c:
- * programs/gvfs-monitor-dir.c:
- * programs/gvfs-monitor-file.c:
- Update to new gio API
-
-2008-01-14 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- (match_prefix):
- Handle root correctly in g_file_get_relative_path (#508719)
-
-2008-01-14 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsdaemon.c:
- Don't translate g_warning strings
-
-2008-01-14 Alexander Larsson <alexl@redhat.com>
-
- * client/httpuri.c:
- (http_from_uri):
- Only set "ssl" key in dav case.
-
-2008-01-14 Alexander Larsson <alexl@redhat.com>
-
- * client/httpuri.c:
- (http_to_uri_scheme):
- Fix some crashes
-
-2008-01-13 Dan Winship <danw@gnome.org>
-
- * client/httpuri.c (http_from_uri): fix
-
- * daemon/soup-output-stream.c: Initial SoupOutputStream; still
- works like gnome-vfs http did, by storing all the writes in memory
- until close.
-
- * daemon/gvfsbackendhttp.c (try_create, try_replace): Implement.
- For now we need to do HEAD-then-PUT, but we may later be able to
- do a single PUT with "Expect: 100-continue".
- (try_write, try_close_write): Implement.
-
-2008-01-13 Christian Kellner <gicmo@gnome.org>
-
- * client/httpuri.c:
- Also handle dav uris in the http mapper.
-
- * daemon/dav.mount.in:
- * daemon/Makefile.am:
- Add the new dav backend.
-
- * daemon/gvfsbackendhttp.c:
- * daemon/gvfsbackendhttp.h:
- Implement a utility function so dav and http
- backend can share uri from filename creation.
-
- * daemon/gvfsbackenddav.c:
- First attempt to write the dav backend as a subclass of http.
- Mount, QueryInfo, Enumerate should work and Read is provided
- by the base class.
-
-2008-01-12 Leonid Kanter <leon@asplinux.ru>
-
- * configure.ac: Added "ru" (Russian) to ALL_LINGUAS.
-
-2008-01-12 Alexander Larsson <alexl@redhat.com>
-
- * daemon/Makefile.am:
- Set the http daemon dbus busname so that multiple mounts
- work in the same process.
-
-2008-01-11 Dan Winship <danw@gnome.org>
-
- * daemon/soup-input-stream.c: implement GSeekable (a bit hackishly
- due to a bug in libsoup 2.2.x)
-
- * daemon/gvfsbackendhttp.c (try_seek_on_read): implement
-
-2008-01-11 Dan Winship <danw@gnome.org>
-
- * daemon/gvfsbackendhttp.c (g_vfs_backend_http_finalize): cleanup
- (g_vfs_backend_http_init): move session creation here. Don't
- explicitly set ASYNC_CONTEXT to g_main_context_default() because
- that trips up SoupInputStream.
- (uri_for_filename): create a SoupUri corresponding to a filename.
- In particular, "/" corresponds to mount_base, not the result of
- combining mount_base with "/".
- (try_open_for_read): use uri_for_filename, free the result.
-
-2008-01-11 Dan Winship <danw@gnome.org>
-
- * daemon/soup-input-stream.c (soup_input_stream_send)
- (wrapper_callback, soup_input_stream_send_async): Fix for changes
- to g_input_stream_set_pending() since I wrote this.
-
- * client/gdaemonfile.c (g_daemon_file_hash): x86_64 fix.
-
-2008-01-11 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendhttp.c:
- Make http mount not user visible.
- Set backend mount spec in try_mount.
-
-2008-01-11 Christian Kellner <gicmo@gnome.org>
-
- * client/gdaemonvfs.c:
- Fix the double use of a counter variable inside nested loops.
-
- * client/Makefile.am:
- * client/httpuri.c:
- UriMapper added, which is needed for plain http method.
-
- * configure.ac:
- Check for libsoup version >= 2.2.104
-
- * daemon/gvfsbackendhttp.c:
- Initial implementation of plain http methods.
-
- * daemon/Makefile.am:
- * daemon/http.mount.in:
- Added.
-
- * daemon/soup-input-stream.c:
- * daemon/soup-input-stream.h:
- Import of Dan Winship's libsoup based streaming classes.
-
-2008-01-11 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * configure.ac: Added "eu" (Basque) to ALL_LINGUAS.
-
-2008-01-11 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendcomputer.c:
- Set can't write info on the root.
-
-2008-01-11 Alexander Larsson <alexl@redhat.com>
-
- * programs/gvfs-mount.c (list_volumes):
- Fix crash if no mount in volume.
-
-2008-01-11 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * common/gvfsdaemonprotocol.h:
- Implement unmount_mountable and eject_mountable
- on client side.
-
- * common/gmountoperationdbus.c:
- Fix warnings
-
- * daemon/gvfsbackend.[ch]:
- * daemon/gvfsjobunmountmountable.[ch]:
- Add unmount_mountable and eject_mountable in daemon.
-
- * daemon/gvfsbackendcomputer.c:
- Implement unmount_mountable and eject_mountable
-
- * daemon/gvfsbackendlocaltest.c:
- Update to latest API
-
- * daemon/gvfsbackendsftp.c:
- Fix indentation
-
- * daemon/gvfsjobunmount.c:
- Always allow unmount if unmount is not
- implemented.
-
-2008-01-11 Christian Kellner <gicmo@gnome.org>
-
- * configure.ac:
- * daemon/Makefile.am:
- * daemon/gvfsbackendhttp.c:
- * daemon/gvfsbackendhttp.h:
- Initial attempt of writing the http backend. Not much
- there yet only a stub.
-
-2008-01-10 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackend.h:
- * daemon/gvfsmonitor.[ch]:
- * daemon/gvfsbackendcomputer.c:
- * daemon/gvfsbackendtrash.c:
- Make GVfsMonitor API simpler for users.
-
-2008-01-10 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsmonitor.c:
- Remove freeing of initial ref after delay.
-
- * daemon/gvfsjobcreatemonitor.[ch]:
- Set the monitor as result here, not only the obj path.
- Nicer and allows better lifetime handling.
- If returning a obj ref, keep the monitor alive for
- some time to allow a subscribe request.
-
- * daemon/gvfsbackendcomputer.c:
- * daemon/gvfsbackendtrash.c:
- Update to the new APIs
-
-2008-01-10 Alexander Larsson <alexl@redhat.com>
-
- * common/gmounttracker.c:
- Handle error reply from list_mounts.
-
- * programs/gvfs-mount.c:
- Add option to list mounts.
- Based on patch from nf2@scheinwelt.at
-
-2008-01-09 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghaldrive.c:
- * hal/ghalmount.c:
- * hal/ghalvolume.c:
- Use default fallbacks for icons
-
-2008-01-09 Alexander Larsson <alexl@redhat.com>
-
- * common/gmountsource.[ch]:
- Add g_mount_source_get_operation() that lets
- you handle a remote GMountSource as if it
- was a GMountOperation.
-
- * common/gmountoperationdbus.c:
- * programs/gvfs-mount.c:
- Update to new GMountOperation APIs
-
- * client/gdaemonfile.c:
- * daemon/gvfsjobmountmountable.[ch]:
- Also let you return target by uri, as not all
- targets are from gvfs.
-
- * daemon/gvfsbackendcomputer.c:
- Initial cut at mount_mountable
-
-2008-01-09 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.c (_g_daemon_vfs_get_mount_info_sync):
- Better error return on not mounted.
-
-2008-01-09 Luca Ferretti <elle.uca@libero.it>
-
- * Makefile.am:
- * autogen.sh:
- * configure.ac:
-
- Reuse intltool by now, glib-gettext rules seems unable
- to properly remove "[encoding: UTF-8]" generating
- po/POTFILES.
-
- * mkinstalldirs:
-
- Removed, autogenerated by intltool
-
-2008-01-08 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.1.1 ===
-
-2008-01-08 Alexander Larsson <alexl@redhat.com>
-
- * NEWS:
- Update for release
-
-2008-01-08 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Require glib 2.15.1
-
-2008-01-08 Alexander Larsson <alexl@redhat.com>
-
- * daemon/Makefile.am:
- * daemon/computer.mount.in:
- * daemon/gvfsbackendcomputer.[ch]:
- Add initial computer backend
-
- * daemon/gvfsbackend.h:
- * daemon/gvfsjobunmountmountable.[ch]:
- Add umount_mountable calls
-
-2008-01-07 Alexander Larsson <alexl@redhat.com>
-
- * client/Makefile.am:
- * client/gdaemondirectorymonitor.[ch]:
- * client/gdaemonfile.c:
- * daemon/gvfsbackendtrash.c:
- * programs/gvfs-monitor-dir.c:
- Update to handle removed GDirectoryMonitor from
- API.
-
- * daemon/gvfsbackendsftp.c:
- Fix warnings
-
-2008-01-07 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Remove debug spew
-
-2008-01-07 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Update to new gio API
-
-2008-01-04 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- (make_reply_stream):
- Update to new gio API
-
-2008-01-03 Matthias Clasen <mclasen@redhat.com>
-
- * daemon/Makefile.am: Install the .mount files
- in /usr/share/gvfs/mounts, not in /etc/gvfs/mounts
-
-2008-01-03 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghalvolumemonitor.c:
- Handle pool finalizing on unloads of hal module
- (#507037)
-
-2008-01-03 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Return icons
-
-2008-01-03 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Use right types for file times (#506494)
-
-2008-01-03 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Don't return errors on EOF (#506493)
-
-2008-01-03 Alexander Larsson <alexl@redhat.com>
-
- * Makefile.am:
- * mkinstalldirs: Added.
- Added mkinstalldirs to svn and EXTRA_DIST ase
- we now don't gettextize in autogen.
-
-2008-01-03 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghaldrive.c:
- (_drive_get_description):
- Fix plus/minus utf8 string.
- Patch from Luca Ferretti.
-
-2007-12-20 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.1.0 ===
-
-2007-12-20 Alexander Larsson <alexl@redhat.com>
-
- * NEWS:
- Update for release
-
- * configure.ac:
- Bump version to 0.1.0
-
-2007-12-20 Alexander Larsson <alexl@redhat.com>
-
- * autogen.sh:
- Don't run gettextize
-
- * programs/Makefile.am:
- dist gvfs-less
-
-2007-12-20 Alexander Larsson <alexl@redhat.com>
-
- * daemon/main.c:
- Fix translated "".
-
- * hal/ghaldrive.c:
- Encode +/- as utf8 c escapes
-
-2007-12-20 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Require glib 2.15.0
-
-2007-12-20 Alexander Larsson <alexl@redhat.com>
-
- * client/gvfsfusedaemon.c:
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendsmb.c:
- * daemon/gvfsbackendsmbbrowse.c:
- * daemon/gvfsbackendtrash.c:
- * daemon/gvfsjobqueryinfo.c:
- * programs/gvfs-copy.c:
- * programs/gvfs-ls.c:
- * programs/gvfs-move.c:
- * test/benchmark-gvfs-big-files.c:
- * test/benchmark-gvfs-small-files.c:
- Update to new file attribute names
-
-2007-12-20 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonmount.c:
- * hal/ghaldrive.c:
- * hal/ghalmount.c:
- * hal/ghalvolume.c:
- * programs/gvfs-mount.c:
- Update to new unmount flag api
-
-2007-12-20 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfileinputstream.c:
- * client/gdaemonfileoutputstream.c:
- * client/gdaemonvfs.c:
- * client/gvfsfusedaemon.c:
- Fix warnings
-
-2007-12-20 Alexander Larsson <alexl@redhat.com>
-
- * daemon/Makefile.am:
- Build without cdda.
- Patch from nf2@scheinwelt.at
-
-2007-12-19 David Zeuthen <davidz@redhat.com>
-
- Add missing files from previous patch.
-
- * daemon/cdda.mount.in:
- * daemon/gvfsbackendcdda.c: (g_vfs_backend_cdda_finalize),
- (g_vfs_backend_cdda_init), (do_mount), (try_mount), (do_unmount),
- (get_track_num_from_name), (free_read_handle), (create_header),
- (do_open_for_read), (paranoia_callback), (do_read),
- (do_seek_on_read), (do_close_read), (set_info_for_track),
- (do_query_info), (do_enumerate), (g_vfs_backend_cdda_class_init):
- * daemon/gvfsbackendcdda.h:
- * programs/gvfs-less:
-
-2007-12-19 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.[ch]:
- * client/gdaemonvolumemonitor.c:
- * hal/ghalvolumemonitor.c:
- * hal/hal-module.c:
- Remove spew
- Update for new APIs
- Don't use GDaemonVolumeMonitor if not using GDaemonVfs.
-
- * hal/hal-pool.c:
- Close custom dbus connection before unrefing
-
-2007-12-19 David Zeuthen <davidz@redhat.com>
-
- Add the cdda:// backend for Compact Disc Digital Audio discs.
-
- Allow a backend to specify the fuse name directly instead of
- using the display name
-
- Make GDaemonVolumeMonitor and GDaemonMount use the new
- adopt_orphan_mount() function on GVolumeMonitor in gio. Also,
- since a GMount now can be associated with a GVolume, implement
- eject().
-
- Add a new gvfs-less program.
-
- Make gvfs-mount capable of unmounting as well.
-
- HAL backend changes: attempt to unmount all mounts from
- enclosing volumes and fail the ejection if one of the unmount
- operations fails. Use new adopt_orphan_mount() from gio to
- adopt cdda:// volumes for audio discs. Emit the 'eject-button'
- signal on GDrive. Various other fixes.
-
- * client/gdaemonfile.c: (g_daemon_file_find_enclosing_mount):
- * client/gdaemonmount.c: (g_daemon_mount_finalize),
- (g_daemon_mount_new), (g_daemon_mount_get_volume),
- (g_daemon_mount_get_drive), (g_daemon_mount_can_eject),
- (foreign_volume_removed), (g_daemon_mount_set_foreign_volume),
- (eject_wrapper_callback), (g_daemon_mount_eject),
- (g_daemon_mount_eject_finish), (g_daemon_mount_mount_iface_init):
- * client/gdaemonmount.h:
- * client/gdaemonvolumemonitor.c: (mount_added), (mount_removed),
- (g_daemon_volume_monitor_init):
- * client/gvfsfusedaemon.c: (file_handle_close_stream),
- (free_file_handle_for_path), (mount_record_new):
- * common/gmounttracker.c: (g_mount_info_dup), (g_mount_info_unref),
- (g_mount_info_from_dbus):
- * common/gmounttracker.h:
- * configure.ac:
- * daemon/Makefile.am:
- * daemon/gvfsbackend.c: (g_vfs_backend_finalize),
- (g_vfs_backend_init), (g_vfs_backend_set_fuse_name),
- (g_vfs_backend_get_fuse_name), (g_vfs_backend_register_mount):
- * daemon/gvfsbackend.h:
- * daemon/gvfsjobunmount.c: (unregister_mount_callback),
- (send_reply):
- * daemon/mount.c: (vfs_mount_free), (vfs_mount_to_dbus),
- (register_mount), (list_mounts):
- * hal/ghaldrive.c: (g_hal_drive_finalize), (hal_condition),
- (g_hal_drive_new), (spawn_cb), (g_hal_drive_eject_do),
- (free_unmount_mounts_op), (_eject_unmount_mounts_cb),
- (_eject_unmount_mounts), (g_hal_drive_eject):
- * hal/ghalmount.c: (g_hal_mount_finalize), (unmount_cb),
- (unmount_read_error), (unmount_do), (g_hal_mount_unmount),
- (eject_wrapper_callback), (g_hal_mount_eject),
- (g_hal_mount_eject_finish):
- * hal/ghalvolume.c: (g_hal_volume_finalize), (do_update_from_hal),
- (g_hal_volume_new), (g_hal_volume_get_mount),
- (foreign_mount_unmounted), (g_hal_volume_adopt_foreign_mount),
- (g_hal_volume_has_foreign_mount_root), (spawn_cb),
- (mount_foreign_callback), (g_hal_volume_mount),
- (g_hal_volume_mount_finish), (eject_wrapper_callback),
- (g_hal_volume_eject), (g_hal_volume_eject_finish):
- * hal/ghalvolume.h:
- * hal/ghalvolumemonitor.c: (adopt_orphan_mount),
- (g_hal_volume_monitor_class_init), (update_volumes),
- (update_mounts), (update_discs):
- * hal/hal-device.c: (hal_device_class_init),
- (_hal_device_hal_condition):
- * hal/hal-device.h:
- * hal/hal-marshal.list:
- * hal/hal-pool.c: (hal_pool_class_init), (_hal_condition),
- (hal_pool_new):
- * hal/hal-pool.h:
- * programs/Makefile.am:
- * programs/gvfs-mount.c: (unmount_done_cb), (unmount), (main):
-
-2007-12-18 Luca Ferretti <elle.uca@libero.it>
-
- * configure.ac: Add ALL_LINGUAS and definition for GVFS_LOCALEDIR;
- the second one is unused by now, but could be needed, so all
- l10n stuff in this file should be OK.
-
-2007-12-17 David Zeuthen <davidz@redhat.com>
-
- * hal/ghalvolumemonitor.c (update_mounts): g_get_unix_mounts()
- was renamed to g_unix_mounts_get() in gio
-
- * hal/hal-pool.c, Makefile.am: Instead of dbus-glib-1, use the
- function _g_dbus_connection_integrate_with_main() for mainloop
- integration.
-
- * hal/ghalmount.h, hal/ghalvolume.h, hal/ghaldrive.h: Use a weak
- pointer for the volume monitor
-
- * configure.ac: Don't require dbus-glib-1 for the hal vm backend
-
-2007-12-17 David Zeuthen <davidz@redhat.com>
-
- * client/gdaemonmount.c (g_daemon_mount_mount_iface_init): Fix typo
- with setting the can_eject() function
-
-2007-12-17 Bastien Nocera <hadess@hadess.net>
-
- * daemon/gvfsbackendtrash.c: (list_trash_dirs):
- Fix build, renamed g_get_unix_mounts to g_unix_mounts_get
-
-2007-12-17 Alexander Larsson <alexl@redhat.com>
-
- * hal/ghaldrive.[ch]:
- * hal/ghalmount.[ch]:
- * hal/ghalvolume.[ch]:
- * hal/ghalvolumemonitor.[ch]:
- * hal/hal-device.[ch]:
- * hal/hal-module.c:
- * hal/hal-pool.[ch]:
- Make types dynamic and update to support volume monitor
- backend name and is_supported().
-
-2007-12-17 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonmount.c (g_daemon_mount_mount_iface_init):
- Eject not supported. Make vtable NULL.
-
-2007-12-14 David Zeuthen <davidz@redhat.com>
-
- * Makefile.am:
- * client/gdaemonmount.c: (g_daemon_mount_get_uuid),
- (g_daemon_mount_can_eject), (g_daemon_mount_eject),
- (g_daemon_mount_eject_finish), (g_daemon_mount_mount_iface_init):
- * client/gdaemonvolumemonitor.c: (get_volume_for_uuid),
- (get_mount_for_uuid), (g_daemon_volume_monitor_class_init):
- * configure.ac:
- * hal/*: new files
-
- Update to latest gio API changes and add the HAL backend for
- volume monitoring.
-
-2007-12-14 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * client/gdaemonfileinputstream.c:
- * client/gvfsfusedaemon.c:
- * common/gvfsdaemonprotocol.c:
- * common/gvfsdaemonprotocol.h:
- * daemon/gvfsbackend.h:
- * daemon/gvfsjobsetattribute.c:
- * daemon/gvfsjobsetattribute.h:
- * programs/gvfs-info.c:
- * programs/gvfs-ls.c:
- Update for gio API changes (removal of GFileAttributeValue).
-
-2007-12-14 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * common/gmountsource.c:
- * common/gmountsource.h:
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendsmb.c:
- * programs/gvfs-info.c:
- * programs/gvfs-monitor-dir.c:
- * programs/gvfs-monitor-file.c:
- * programs/gvfs-mount.c:
- * programs/gvfs-save.c:
- * test/benchmark-gvfs-big-files.c:
- * test/benchmark-gvfs-small-files.c:
- Update to new gio flag enum types/values
-
-2007-12-14 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemondirectorymonitor.c:
- * client/gdaemondirectorymonitor.h:
- * client/gdaemonfile.c:
- * client/gdaemonfile.h:
- * client/gdaemonfileenumerator.c:
- * client/gdaemonfileenumerator.h:
- * client/gdaemonfileinputstream.c:
- * client/gdaemonfileinputstream.h:
- * client/gdaemonfilemonitor.c:
- * client/gdaemonfilemonitor.h:
- * client/gdaemonfileoutputstream.c:
- * client/gdaemonfileoutputstream.h:
- * client/gdaemonmount.c:
- * client/gdaemonmount.h:
- * client/gdaemonvfs.c:
- * client/gdaemonvfs.h:
- * client/gdaemonvolumemonitor.h:
- * client/gvfsdaemondbus.c:
- * client/gvfsdaemondbus.h:
- * client/gvfsfusedaemon.c:
- * client/gvfsurimapper.h:
- * client/smburi.c:
- * common/gdbusutils.c:
- * common/gdbusutils.h:
- * common/gmountoperationdbus.c:
- * common/gmountoperationdbus.h:
- * common/gmountsource.c:
- * common/gmountsource.h:
- * common/gsysutils.c:
- * common/gvfsdaemonprotocol.c:
- * common/gvfsdaemonprotocol.h:
- * daemon/gvfsbackend.h:
- * daemon/gvfsbackendftp.c:
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendsmb.c:
- * daemon/gvfsbackendsmbbrowse.c:
- * daemon/gvfsbackendtest.c:
- * daemon/gvfsbackendtrash.c:
- * daemon/gvfsdaemonutils.c:
- * daemon/gvfsjob.c:
- * daemon/gvfsjob.h:
- * daemon/gvfsjobcopy.h:
- * daemon/gvfsjobcreatemonitor.h:
- * daemon/gvfsjobdelete.h:
- * daemon/gvfsjobenumerate.h:
- * daemon/gvfsjobmakedirectory.h:
- * daemon/gvfsjobmakesymlink.h:
- * daemon/gvfsjobmount.h:
- * daemon/gvfsjobmountmountable.h:
- * daemon/gvfsjobmove.h:
- * daemon/gvfsjobqueryattributes.h:
- * daemon/gvfsjobqueryfsinfo.h:
- * daemon/gvfsjobqueryinfo.h:
- * daemon/gvfsjobsetattribute.h:
- * daemon/gvfsjobsetdisplayname.h:
- * daemon/gvfsjobtrash.h:
- * daemon/gvfsjobunmount.h:
- * daemon/gvfsmonitor.h:
- * daemon/mount.c:
- * daemon/mount.h:
- * programs/gvfs-cat.c:
- * programs/gvfs-copy.c:
- * programs/gvfs-info.c:
- * programs/gvfs-ls.c:
- * programs/gvfs-monitor-dir.c:
- * programs/gvfs-monitor-file.c:
- * programs/gvfs-mount.c:
- * programs/gvfs-move.c:
- * programs/gvfs-rm.c:
- * programs/gvfs-save.c:
- * programs/gvfs-trash.c:
- * test/benchmark-gvfs-big-files.c:
- * test/benchmark-gvfs-small-files.c:
- * test/benchmark-posix-big-files.c:
- * test/benchmark-posix-small-files.c:
- Only use <gio/gio.h> include
-
-2007-12-13 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * programs/gvfs-mount.c:
- Update for g_mount_for_location to g_file_mount_enclosing_volume change.
-
-2007-12-11 David Zeuthen <davidz@redhat.com>
-
- Update for API changes in gio trunk.
-
- * client/Makefile.am:
- * client/gdaemonfile.c: (g_daemon_file_find_enclosing_mount),
- (g_daemon_file_file_iface_init):
- * client/gdaemonvolumemonitor.c: (get_mounts), (get_volumes),
- (find_mount_by_mount_info), (mount_added), (mount_removed),
- (g_daemon_volume_monitor_init), (g_daemon_volume_monitor_finalize),
- (g_daemon_volume_monitor_class_init):
- * client/gdaemonvolumemonitor.h:
- * client/gvfsfusedaemon.c: (mount_record_new),
- (mount_record_for_mount_exists), (mount_list_update),
- (mount_tracker_mounted_cb), (mount_tracker_unmounted_cb),
- (subthread_main):
- * daemon/gvfsbackendtrash.c: (list_trash_dirs):
-
-2007-12-05 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.c:
- (g_daemon_vfs_init):
- Use the new API to load the modules
-
-2007-12-05 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * client/gdaemonfileenumerator.c:
- * client/gdaemonfileinputstream.c:
- * client/gdaemonfileoutputstream.c:
- Update to gio API change
-
-2007-11-27 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfileinputstream.c:
- * client/gdaemonfileoutputstream.c:
- * client/gdaemonvfs.c:
- * client/gvfsfusedaemon.c:
- * client/gvfsuriutils.h:
- * daemon/gvfsbackend.c:
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendtrash.c:
- * daemon/gvfschannel.c:
- * daemon/gvfsmonitor.c:
- * daemon/mount.c:
- Update to build with the latest glib included
- gio
-
-2007-11-27 Alexander Larsson <alexl@redhat.com>
-
- * Makefile.am:
- * configure.ac:
- * programs/Makefile.am:
- * programs/gvfs-cat.c:
- * programs/gvfs-copy.c:
- * programs/gvfs-info.c:
- * programs/gvfs-ls.c:
- * programs/gvfs-monitor-dir.c:
- * programs/gvfs-monitor-file.c:
- * programs/gvfs-mount.c:
- * programs/gvfs-move.c:
- * programs/gvfs-rm.c:
- * programs/gvfs-save.c:
- * programs/gvfs-trash.c:
- Moved the gio tools from gio-standalone
-
-2007-11-20 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Add comment
-
- * daemon/gvfsbackendsmb.c:
- Support new WOULD_MERGE error code
-
-2007-11-16 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * client/gdaemonfileinputstream.c:
- * client/gdaemonfileoutputstream.c:
- * client/smburi.c:
- * common/gdbusutils.c:
- * common/gmountsource.c:
- * daemon/gvfsbackendftp.c:
- * daemon/gvfsbackendtrash.c:
- * daemon/gvfsdaemon.c:
- * daemon/gvfsjob.c:
- * daemon/gvfsjobdbus.c:
- * daemon/gvfsjobopenforwrite.h:
- * daemon/mount.c:
- * daemon/pty_open.c:
- * test/benchmark-gvfs-big-files.c:
- * test/benchmark-gvfs-small-files.c:
- * test/benchmark-posix-small-files.c:
- Code cleanups from Kjartan Maraas.
-
-2007-11-15 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.0.2 ===
-
-2007-11-15 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Require gio 0.1.2
-
- * NEWS:
- Update for release
-
-2007-11-15 Alexander Larsson <alexl@redhat.com>
-
- * daemon/Makefile.am:
- * daemon/ftp.mount.in:
- * daemon/gvfs-daemon.service.in:
- * daemon/sftp.mount.in:
- * daemon/smb-browse.mount.in:
- * daemon/smb.mount.in:
- * daemon/trash.mount.in:
- Rename gvfs daemon processes to start
- with "gvfsd". This is shorter and nicer.
-
-2007-11-14 Alexander Larsson <alexl@redhat.com>
-
- * common/gvfsdaemonprotocol.h:
- Add unmount operation and
- unregister mount mounttracker call
-
- * client/gdaemonvolume.c:
- Implement client side of unmount
-
- * daemon/Makefile.am:
- * daemon/gvfsjobunmount.[ch]: Added.
- Add unmount job type
-
- * daemon/gvfsbackend.[ch]:
- Implement unmount
-
-2007-11-14 Alexander Larsson <alexl@redhat.com>
-
- * common/gdbusutils.c:
- Handle NULL callback in _g_dbus_connection_call_async
-
- * daemon/gvfsdaemon.c:
- Re-register backends with new main daemons
-
-2007-11-14 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.[ch]:
- * client/gvfsdaemondbus.c:
- Make sure we somewhat cleanly handle the
- various dbus daemons going down. By somewhat
- I mean that no problem should be persistant
- even if you might get some transient error
- messages.
-
- Unfortunately the only way to be able to cleanly
- handle this involves globally ignoring SIGPIPE.
- What can I say, unix sucks.
-
- * common/gsysutils.c:
- (_g_socket_receive_fd):
- Handle errors if e.g. the fd is closed
-
-2007-11-13 Alexander Larsson <alexl@redhat.com>
-
- * common/gsysutils.c:
- * daemon/gvfschannel.c:
- * daemon/gvfsdaemonutils.c:
- * daemon/gvfsjobcopy.c:
- * daemon/gvfsmonitor.c:
- * daemon/gvfswritechannel.c:
- Add required includes for solaris
- Patch from Damien Carbery
-
-2007-11-12 Alexander Larsson <alexl@redhat.com>
-
- * client/gvfsurimapper.[ch]:
- Make this class dynamic
-
- * client/Makefile.am:
- * client/gdaemonvfs.c:
- * client/smburi.c:
- Build smb uri mapper into module
- (this avoids extra .so files)
-
-2007-11-12 Alexander Larsson <alexl@redhat.com>
-
- * common/gmountspec.[ch]:
- (g_mount_spec_new_from_data):
- (g_mount_spec_set_with_len):
- Add new functions
-
- * client/Makefile.am:
- * common/Makefile.am:
- Update for moved files
- Build non-shared version of common libs.
- Ups non-shared common libs in client module.
-
- * common/gvfsuriutils.[ch]: Removed.
- * client/gvfsuriutils.[ch]: Added.
- Moved uriutils to gvfs (not used by daemon)
- Re-namespace to g_vfs_*
-
- * common/gvfsurimapper.[ch]: Removed.
- * client/gvfsurimapper.[ch]: Added.
- Move UriMapper to client lib
- Remove/Hide use of GMountSpec
-
- * client/gdaemonvfs.c:
- * client/smburi.c:
- Update to the new APIs
-
- * client/gvfsfusedaemon.c:
- * daemon/gvfsbackendtrash.c:
- * daemon/gvfsjobqueryfsinfo.c:
- Fix warnings
-
-2007-11-08 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsdaemon.c:
- * daemon/gvfsjobmove.c:
- * test/benchmark-common.c:
- Fixes for solaris build.
- Patches from Damien Carbery
-
-2007-11-07 Sebastian Dröge <slomo@circular-chaos.org>
-
- * daemon/gvfsbackendsftp.c:
- Update g_memory_output_stream_set_free_on_close() to
- g_memory_output_stream_set_free_data().
-
-2007-11-07 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.c:
- Update to new gvfs construction API
-
-2007-11-07 Alexander Larsson <alexl@redhat.com>
-
- * common/gdbusutils.c:
- * daemon/gvfsbackendtest.c:
- * daemon/gvfsbackendtrash.c:
- Ansi C fixes from Jens Granseuer
-
-2007-11-06 Sebastian Dröge <slomo@circular-chaos.org>
-
- * configure.ac:
- * daemon/gvfsdaemonutils.c: (dbus_connection_send_fd):
- * daemon/mount.c: (vfs_mount_to_dbus), (dbus_message_function):
- Fix typo: availible -> available.
-
-2007-11-06 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Post release version bump
-
-=== gvfs 0.0.1 ===
-
-2007-11-06 Alexander Larsson <alexl@redhat.com>
-
- * client/Makefile.am:
- * daemon/Makefile.am:
- * test/Makefile.am:
- Fix make distcheck
-
-2007-11-06 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- (g_daemon_file_file_iface_init):
- Actually export get_uri_scheme
-
- * client/gdaemonfileinputstream.c:
- (g_daemon_file_input_stream_query_info):
- Set NOT_SUPPORTED error
-
-2007-11-06 Alexander Larsson <alexl@redhat.com>
-
- * common/gmountoperationdbus.c:
- * common/gmounttracker.c:
- * daemon/gvfsbackend.h:
- * daemon/gvfschannel.h:
- Remove use of old giotypes.h header
-
-2007-11-03 Paolo Borelli <pborelli@katamail.com>
-
- * client/gdaemonvfs.c (get_mountspec_from_uri):
- Do not leak the decoded uri.
-
-2007-11-02 Sebastien Bacher <seb128@ubuntu.com>
-
- * common/Makefile.am: use the correct gmountoperationdbus.h naming
-
-2007-11-01 Christian Kellner <gicmo@gnome.org>
-
- * client/*.[ch]:
- * common/*.[ch]:
- * daemon/*.[ch]:
- * test/*.[ch]:
- Add copyright information to source files.
-
-2007-11-01 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * client/gdaemonvfs.[ch]:
- Implement get_uri_scheme
-
- * daemon/mount.c:
- Add needed includes
-
-2007-10-31 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- Implement contains_file and get_relative_path
-
-2007-10-31 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackend.[ch]:
- Add g_vfs_backend_get_mount_spec
-
- * daemon/gvfsjobqueryfsinfo.c:
- Fix indentation
-
- * daemon/gvfsjobqueryinfo.c:
- Implement id:fs attribute
-
-2007-10-31 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvolume.c:
- Remove get_platform_id
-
-2007-10-31 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- Implement find_enclosing_volume
-
- * client/gdaemonvolume.[ch]:
- * client/gdaemonvolumemonitor.c:
- No need to pass volume monitor when
- createing volumes
-
-2007-10-31 Alexander Larsson <alexl@redhat.com>
-
- * common/gmounttracker.[ch]:
- Add all mount info to GMountInfo
- Make it refcounted
-
- * client/gdaemonvfs.[ch]:
- * client/gdaemonfile.c:
- * client/gdaemonvolumemonitor.c:
- Remove GMountRef, replacing its use with
- GMountInfo
-
-2007-10-31 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsjobqueryfsinfo.c:
- Remove volume name attribute
-
-2007-10-31 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- Update to new API
-
-2007-10-30 Alexander Larsson <alexl@redhat.com>
-
- * common/gmounttracker.c:
- Handle threads not being initialized
-
- * daemon/gvfsjobqueryfsinfo.c:
- Set volume name
-
-2007-10-26 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvolumemonitor.c:
- Don't show not user visible mounts
-
- * daemon/mount.c:
- Don't give fuse mounts for non visible mounts
- (as they don't get mounted)
-
- * daemon/gvfsbackendsmbbrowse.c:
- * daemon/gvfsbackendtrash.c:
- Mark as not user visible
-
-2007-10-26 Alexander Larsson <alexl@redhat.com>
-
- * common/gvfsdaemonprotocol.h:
- Add registerFuse call
-
- * client/gvfsfusedaemon.c:
- Register with vfs daemon
- Exit (and unmount) if daemon dies
-
- * daemon/mount.c:
- Hand out fuse mountpaths when availible.
-
- * client/gdaemonvfs.[ch]:
- * common/gmounttracker.c:
- Handle sent fuse mountpath
-
- * client/gdaemonfile.c:
- Implement g_daemon_file_get_path using fuse
- if availible.
-
-2007-10-26 Alexander Larsson <alexl@redhat.com>
-
- * client/Makefile.am:
- * client/gvfsfusedaemon.c:
- Update fuse daemon to use the giomodule instead of
- linking to a copy of the code. The old way was
- problematic with the module code being a dynamic
- type in the module and not in the fuse daemon.
-
-2007-10-25 Alexander Larsson <alexl@redhat.com>
-
- * client/smburi.c:
- * common/gvfsurimapper.[ch]:
- Make to_uri_scheme return const string.
-
- * client/gdaemonfile.[ch]:
- * client/gdaemonvfs.[ch]:
- Add _g_daemon_vfs_mountspec_has_uri_scheme and use it to
- implement g_file_has_uri_scheme
-
-2007-10-24 Alexander Larsson <alexl@redhat.com>
-
- * common/gmountsource.c:
- (g_mount_source_ask_password):
- Increase password dialog timeout to 30 minutes
-
-2007-10-24 Alexander Larsson <alexl@redhat.com>
-
- * common/gmountspec.c:
- (g_mount_spec_set_mount_prefix):
- Actually assign the mount_prefix in the GMountSpec
-
-2007-10-23 Sebastian Dröge <slomo@circular-chaos.org>
-
- * client/Makefile.am:
- Change the GIO module dir to $(libdir)/gio/modules as was
- done in GIO.
-
-2007-10-23 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * client/gdaemonvfs.c:
- * common/gmountspec.[ch]:
- Ensure GDaemonFile mount specs are actually unique.
- When a non-unique mount spec was finalized any unique
- version of the same was removed from the hashtable.
-
-2007-10-23 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.c:
- (_g_daemon_vfs_get_uri_for_mountspec):
- Better handling for default types.
- (Handle hostname, port and username)
-
-2007-10-22 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.c:
- * common/gvfsuriutils.[ch]:
- * daemon/gvfsbackendtrash.c:
- Update to use the gurifuncs.h from gio.
- Fix filename parsing to handle ~/x
-
-2007-10-19 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackend.[ch]:
- Rename set_icon -> set_icon_name
- Add getter for icon_name and display_name
-
- * daemon/gvfsbackendsmb.c:
- * daemon/gvfsbackendsmbbrowse.c:
- Update for API changes
- Set display name for in fileinfo
-
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendtrash.c:
- Update for API changes
-
-
-2007-10-19 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- (g_daemon_file_hash): Faster hash, since mount_spec is unique
- (g_daemon_file_equal): Compare mount spec too
-
- * daemon/gvfsbackendsmb.c:
- * daemon/gvfsbackendsmbbrowse.c:
- Set volume display names and icons
- Set content type and icon for files
-
-2007-10-19 Alexander Larsson <alexl@redhat.com>
-
- * common/gmounttracker.[ch]:
- * client/gdaemonvfs.c:
- * daemon/mount.c:
- Add user_visible to mount info
- Reorder args so that new stuff comes at the end
-
- * daemon/gvfsbackend.[ch]:
- Add user_visible setting
- Fix up various setters that set the wrong variable
-
- * daemon/gvfsbackendtrash.c:
- Add icon and better display name
-
-2007-10-19 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonvfs.[ch]:
- * client/gdaemonvolume.c:
- * client/gdaemonvolumemonitor.[ch]:
- Implement using DEFINE_DYNAMIC_TYPE
- Actually register GDaemonVolumeMonitor in giomodule
-
- * common/gmounttracker.c:
- Update to the on-dbus format for mounts
-
-2007-10-19 Alexander Larsson <alexl@redhat.com>
-
- * client/smburi.c (smb_to_uri):
- No port by default
-
-2007-10-16 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- (g_daemon_file_get_parent):
- Fix get_parent to handle files that are in the root directory
-
-2007-10-16 Alexander Larsson <alexl@redhat.com>
-
- * common/gvfsdaemonprotocol.[ch]:
- Make sending icons actually work
-
- * daemon/gvfsbackendtrash.c:
- Set icon for toplevel
-
- * daemon/gvfsmonitor.c:
- Initialize error before call
-
-2007-10-12 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsdaemon.c:
- Build fixes
- Patch from Milosz Derezynski <internalerror@gmail.com>
-
-2007-10-10 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- Support file monitor on trash:/// (for icon)
-
-2007-10-10 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- Add support for directory monitor on root dir
-
-2007-10-09 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- Correctly handle len arg in unescape_pathname
-
-2007-10-09 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- Nicer filenames for things in the home trash.
- This is the common case, so lets make them look nice.
-
-2007-10-09 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- Check for trash dirs in fork to avoid getting stuck
- on e.g. hanged nfs dirs
-
-2007-10-09 Alexander Larsson <alexl@redhat.com>
-
- * client/Makefile.am:
- * client/gdaemonfile.c:
- * client/gdaemonfilemonitor.[ch]:
- Implement file monitor in client
-
- * common/gvfsdaemonprotocol.h:
- * daemon/gvfsbackend.c:
- Implement file monitor in daemon
-
- * daemon/gvfsbackendtrash.c:
- Implement file monitor in trash backend
- Make trash filename escaping nicer
-
-2007-10-09 Alexander Larsson <alexl@redhat.com>
-
- * configure.ac:
- Pull in gio-unix-2.0
-
- * daemon/gvfsbackendtrash.c:
- Use GUnixMounts instead of volume monitor
- This shows *all* mounts and avoids unnecessary stuff
-
-2007-10-08 Alexander Larsson <alexl@redhat.com>
-
- * common/gvfsdaemonprotocol.h:
- Add defines for monitoring
-
- * client/Makefile.am:
- * client/gdaemondirectorymonitor.[ch]:
- * client/gdaemonfilemonitor.[ch]:
- * client/gdaemonfile.c:
- Add daemon directory monitor and initial work on file monitor
-
- * client/gdaemonfileenumerator.c:
- Make path_counter private
- Return DBUS_HANDLER_RESULT_HANDLED when handling messages.
-
- * client/gdaemonvfs.[ch]:
- Make _g_mount_ref_ref "public"
-
- * client/gvfsdaemondbus.c:
- Handle NULL callbacks for async calls
-
- * daemon/Makefile.am:
- * daemon/gvfsbackend.[ch]:
- * daemon/gvfsjobcreatemonitor.[ch]:
- Add create_dir_monitor and create_file_monitor.
- Add g_vfs_backend_get_daemon
-
- * daemon/gvfsmonitor.[ch]:
- Helper code for monitors
-
- * daemon/gvfsbackendtrash.c:
- Implement directory monitor for trash dirs
-
-2007-10-08 Sebastian Dröge <slomo@circular-chaos.org>
-
- * client/gdaemonvfs.c: (g_daemon_vfs_finalize),
- (g_daemon_vfs_init), (fill_supported_uri_schemes),
- (g_daemon_vfs_get_supported_uri_schemes),
- (g_daemon_vfs_class_init):
- * client/smburi.c: (smb_to_uri_scheme),
- (g_vfs_uri_mapper_smb_class_init):
- * common/gvfsdaemonprotocol.h:
- * common/gvfsurimapper.c: (g_vfs_uri_mapper_to_uri_scheme):
- * common/gvfsurimapper.h:
- * daemon/mount.c: (list_mount_types), (dbus_message_function):
- Implement get_supported_uri_schemes method and add a GVfsUriMapper
- method to map a mount spec to an URI scheme.
-
-2007-10-05 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendtrash.c:
- Add delete support to trash
-
-2007-10-04 Alexander Larsson <alexl@redhat.com>
-
- * common/gvfsuriutils.c:
- (g_uri_unescape_string):
- Allow NULL end pointer
-
- * daemon/gvfsjob.[ch]:
- Add cancellable to GVfsJob for backends that want one
-
- * daemon/gvfsjobenumerate.[ch]:
- * daemon/gvfsjobqueryinfo.[ch]:
- Also store attribute in string form.
- Needed if you want to pass it on into gio.
-
- * daemon/Makefile.am:
- * daemon/gvfsbackendtrash.[ch]:
- * daemon/trash.mount.in: Added.
- Added trash backend
-
-2007-10-04 Alexander Larsson <alexl@redhat.com>
-
- * TODO:
- * client/gdaemonfile.c:
- * client/gvfsfusedaemon.c:
- * daemon/gvfsbackend.h:
- * daemon/gvfsbackendftp.c:
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendsmb.c:
- * daemon/gvfsjobopenforwrite.[ch]:
- * test/benchmark-gvfs-big-files.c:
- * test/benchmark-gvfs-small-files.c:
- Add GFileCreateFlags flag to open for write.
- No actual backend support yet though.
-
-2007-10-02 Sebastian Dröge <slomo@circular-chaos.org>
-
- * client/gdaemonfile.c: (g_daemon_file_append_to),
- (g_daemon_file_create), (g_daemon_file_replace):
- * test/benchmark-gvfs-big-files.c: (create_file):
- * test/benchmark-gvfs-small-files.c: (create_file): Update to API
- changes in gio.
-
- * daemon/gvfschannel.c:
- * daemon/gvfsreadchannel.c:
- * daemon/gvfswritechannel.c:
- * daemon/main.c:
- Drop unecessary includes.
-
-2007-09-29 Sebastian Dröge <slomo@circular-chaos.org>
-
- * configure.ac: Revert accidentally included local change.
-
-2007-09-29 Sebastian Dröge <slomo@circular-chaos.org>
-
- * configure.ac: Update to the new pkg-config filename.
- * gio-standalone.pc.in: Remove pkg-config file that belongs to gio.
-
-2007-09-27 Sebastian Dröge <slomo@circular-chaos.org>
-
- * daemon/gvfsbackendftp.c: (do_replace), (do_query_info),
- (do_query_fs_info), (do_enumerate):
- Update signatures for API changes in gio.
-
-2007-09-25 Alexander Larsson <alexl@redhat.com>
-
- * client/gvfsdaemondbus.c:
- Clear VfsConnectionData on creation
- (fixes read of uninitialized data on thread shutdown)
-
- * daemon/sftp.mount.in:
- Correct the type to "sftp"
-
-2007-09-25 Alexander Larsson <alexl@redhat.com>
-
- * daemon/mount.c:
- Return NOT_SUPPORTED error for unsupported uri types
-
-2007-09-25 Alexander Larsson <alexl@redhat.com>
-
- * client/gvfsfusedaemon.c:
- * daemon/gvfsbackendsmbbrowse.c:
- Update for G_IO_ERROR_NOT_MOUNTABLE_FILE name change
-
-2007-09-25 Alexander Larsson <alexl@redhat.com>
-
- * common/gmountoperationdbus.[ch]:
- * common/gmounttracker.[ch]:
- Pass in DBusConnection to use instead of using default one
-
- * client/gdaemonfile.c:
- * client/gdaemonvfs.[ch]:
- * client/gvfsdaemondbus.c:
- Use private dbus connection even for async calls, since the
- mainloop integration is conflicting with dbus-glib.
- This is a temporary measure until this is solved in a better way.
-
- * client/gdaemonvolumemonitor.c:
- * client/gvfsfusedaemon.c:
- * daemon/gvfsbackendsmbbrowse.c:
- Update to the API changes
-
-2007-09-25 Sebastian Dröge <slomo@circular-chaos.org>
-
- * client/gdaemonvfs.c: (g_daemon_vfs_finalize):
- Don't unref wrapped_vfs as it's just a pointer to the single instance
- return value of g_vfs_get_local().
-
-2007-09-25 Sebastian Dröge <slomo@circular-chaos.org>
-
- * client/gdaemonfile.c: (g_daemon_file_resolve_relative_path),
- (g_daemon_file_file_iface_init):
- * test/benchmark-gvfs-big-files.c: (create_file):
- * test/benchmark-gvfs-small-files.c: (create_file):
- Update for API change in GIO. g_file_resolve_relative was renamed
- to g_file_resolve_relative_path.
-
-2007-09-25 Sebastian Dröge <slomo@circular-chaos.org>
-
- * common/gmountspec.c: (g_mount_spec_to_dbus_with_path):
- * common/gvfsdaemonprotocol.c: (_g_dbus_append_file_attribute),
- (_g_dbus_append_file_info), (_g_dbus_append_attribute_info_list):
- * daemon/mount.c: (vfs_mount_to_dbus):
- Don't pass the contained signature when creating a DBus struct. Since
- DBus 1.1.0 this will lead to an assertion. The signature will filled
- automatically while adding values to the struct.
-
-2007-09-17 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfile.c:
- * client/gdaemonfileinputstream.c:
- * client/gdaemonfileoutputstream.c:
- * client/gvfsfusedaemon.c:
- * common/gvfsdaemonprotocol.h:
- * daemon/Makefile.am:
- * daemon/gvfsbackend.[ch]:
- * daemon/gvfsbackendftp.c:
- * daemon/gvfsbackendsftp.c:
- * daemon/gvfsbackendsmb.c:
- * daemon/gvfsbackendsmbbrowse.c:
- * daemon/gvfsbackendtest.c:
- * daemon/gvfsjobenumerate.h:
- * daemon/gvfsjobgetfsinfo.[ch]: Removed.
- * daemon/gvfsjobgetinfo.[ch]: Removed.
- * daemon/gvfsjobqueryfsinfo.[ch]: Added.
- * daemon/gvfsjobqueryinfo.[ch]: Added.
- * daemon/gvfsjobsetattribute.[ch]:
- * test/benchmark-gvfs-big-files.c:
- * test/benchmark-gvfs-small-files.c:
- Update with the get_info -> query_info rename in gio
-
-2007-09-17 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Update to new GDataInputStream function names
-
-2007-09-14 Alexander Larsson <alexl@redhat.com>
-
- * client/gdaemonfileoutputstream.c:
- (g_daemon_file_output_stream_get_etag):
- Update to new get_etag API.
-
-2007-09-14 Alexander Larsson <alexl@redhat.com>
-
- * daemon/gvfsbackendsftp.c:
- Add etag support for close on write
-
-I stopped tracked changes here. Look at "git log" instead.
-
-2006-09-28 Alexander Larsson <alexl@redhat.com>
-
- * gfilesimple.[ch]:
- Move GFileSimple struct into c file
-
-2006-09-28 Alexander Larsson <alexl@redhat.com>
-
- * gfile.[ch]:
- Add follow_symlinks argument to get_info
-
- * gfileinfo.[ch]:
- Some mask fixes
-
- * gfilesimple.c:
- More implementation work
-
- * glocalfileoutputstream.[ch]:
- Implement set_original_mtime and set_create_backup
-
-2006-09-28 Alexander Larsson <alexl@redhat.com>
-
- * Makefile:
- Add gfilesimple
-
- * gfile.[ch]:
- Add g_file_copy()
- Finish rename to parse_name
- Remove set_keep_open for now
-
- * gfilesimple.[ch]:
- Initial skeleton for GFileSimple
- Handle parse names
-
- * gvfssimple.c:
- Handle parse names
-
-2006-09-28 Alexander Larsson <alexl@redhat.com>
-
- * gfileenumerator.c:
- * gfileinfo.c:
- * gfileinputstream.c:
- * gfileoutputstream.c:
- * ginputstream.c:
- * glocalfileinputstream.c:
- * glocalfileoutputstream.c:
- * goutputstream.c:
- * gvfssimple.c:
- Use macro-created parent_class
-
-2006-09-28 Alexander Larsson <alexl@redhat.com>
-
- * gfile.c:
- * gvfs.[ch]:
- * gvfssimple.c:
- Clean up parse_name names.
-
-2006-09-28 Alexander Larsson <alexl@redhat.com>
-
- * gfile.[ch]:
- Add request flags & attributes
- Use FileStreams
-
- * gfileinputstream.h:
- * gfileoutputstream.h:
- Fix G_TYPE_... defines
-
- * glocalfileoutputstream.c:
- Small cleanups and mention gedit.
-
-2006-09-27 Alexander Larsson <alexl@redhat.com>
-
- * gfileinfo.[ch]:
- Added g_file_info_new, g_file_info_set_from_stat
-
- * glocalfileinputstream.c:
- * glocalfileoutputstream.c:
- Implemented get_file_info.
-
-2006-09-27 Alexander Larsson <alexl@redhat.com>
-
- * glocalfileoutputstream.c:
- Update implementation of final mtime
-
-2006-09-27 Alexander Larsson <alexl@redhat.com>
-
- * gfileinfo.h:
- * gfileinputstream.[ch]:
- * gfileoutputstream.[ch]:
- Flags & attributes in get_file_info
-
-2006-09-27 Alexander Larsson <alexl@redhat.com>
-
- * Makefile:
- * ginputstreamfile.[ch]:
- * goutputstreamfile.[ch]:
- * glocalfileinputstream.[ch]:
- * glocalfileoutputstream.[ch]:
- Rename local file streams and make them
- inherit from FileInput/OutputStream
-
- * test.c:
- Update
-
-2006-09-27 Alexander Larsson <alexl@redhat.com>
-
- * Makefile:
- * gfileinputstream.[ch]:
- * gfileoutputstream.[ch]:
- Add new classes.
-
- * gfileinfo.[ch]:
- Add flags, symlink_target and edit_name
-
- * ginputstream.[ch]
- * goutputstream.[ch]:
- Export close/pending state a bit
-
- * gvfserror.h:
- Add NOT_SUPPORTED
-
-2006-09-27 Alexander Larsson <alexl@redhat.com>
-
- * ginputstream.c:
- * goutputstream.c:
- Wrap async callback to automatically handle
- setting of pending, closed and ref/unref of the stream.
-
-2006-09-27 Alexander Larsson <alexl@redhat.com>
-
- reviewed by: <delete if not using a buddy>
-
- * ginputstream.c: (read_async_callback_wrapper),
- (g_input_stream_read_async), (skip_async_callback_wrapper),
- (g_input_stream_skip_async), (close_async_callback_wrapper),
- (g_input_stream_close_async), (read_op_report), (read_op_free),
- (g_input_stream_real_read_async), (skip_op_report), (skip_op_free),
- (g_input_stream_real_skip_async), (close_op_report),
- (close_op_free), (g_input_stream_real_close_async):
- * goutputstream.c: (write_async_callback_wrapper),
- (g_output_stream_write_async), (flush_async_callback_wrapper),
- (g_output_stream_flush_async), (close_async_callback_wrapper),
- (g_output_stream_close_async):
-
-2006-09-27 Alexander Larsson <alexl@redhat.com>
-
- * ginputstream.[ch]:
- Update of close and pending handling.
-
- * goutputstream.[ch]:
- Implement default async version
-
-2006-09-27 Alexander Larsson <alexl@redhat.com>
-
- * Makefile:
- Add output file streams
-
- * ginputstream.c: (g_input_stream_is_cancelled):
- Cleanup
-
- * ginputstreamfile.[ch]:
- remove get_fd.
-
- * goutputstream.[ch]:
- Add g_output_stream_is_cancelled
- Add padding
- Add cancel_async
-
- * goutputstreamfile.[ch]:
- Add new class
-
- * gvfserror.h:
- Add new errors
-
- * test.c:
- Some tests
-
-2006-09-26 Alexander Larsson <alexl@redhat.com>
-
- * Makefile:
- Add gthread-2.0
-
- * ginputstream.h:
- add async_skip and is_cancelled.
-
- * ginputstream.c:
- Implement async fallbacks using thread
-
- * ginputstreamfile.c:
- Handle cancellation
-
- * gioscheduler.c:
- Schedule cancelled jobs first
- Fix out-of-lock reads of job
- Add g_io_job_mark_done().
-
- * gioscheduler.h:
- Add g_io_job_mark_done().
-
- * test.c:
- Add some stream tests
-
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index f10b3409..00000000
--- a/INSTALL
+++ /dev/null
@@ -1,3 +0,0 @@
-The ObexFTP backend requires the obex-data-server D-Bus service in
-addition to the dependencies listed in the configure. See:
-http://wiki.muiline.com/obex-data-server
diff --git a/MAINTAINERS b/MAINTAINERS
deleted file mode 100644
index 0bc82219..00000000
--- a/MAINTAINERS
+++ /dev/null
@@ -1,8 +0,0 @@
-Alex Larsson
-E-mail: alexl@redhat.com
-Userid: alexl
-
-Christian Kellner
-E-mail: gicmo@gnome.org
-Userid: gicmo
-
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644
index 826a35ce..00000000
--- a/Makefile.am
+++ /dev/null
@@ -1,24 +0,0 @@
-NULL =
-
-SUBDIRS = \
- common \
- client \
- daemon \
- monitor \
- gconf \
- po \
- programs \
- test \
- $(NULL)
-
-DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
-
-EXTRA_DIST = \
- MAINTAINERS \
- $(NULL)
-
-DISTCLEANFILES = \
- intltool-extract \
- intltool-merge \
- intltool-update \
- $(NULL)
diff --git a/NEWS b/NEWS
deleted file mode 100644
index 495b63cf..00000000
--- a/NEWS
+++ /dev/null
@@ -1,275 +0,0 @@
-Major changes in 0.99.8
-=======================
-
-* Bug fixes:
- 552295 - leaks a GSimpleAsyncResult
- 551337 - gedit crashes browsing fileselector ssh locations
- 552126 - --enable/disable-keyring switch is currently broken
-
-* Translation updates:
- nb.po (Kjartan Maraas), gu.po (Sweta Kothari), pl.po (Tomasz Dominikowski),
- zh_CN.po (Funda Wang), it.po (Luca Ferretti), en_GB.po (Philip Withnall),
- nl.po (Wouter Bolsterlee), pt.po (Duarte Loreto), cs.po (Petr Kovar),
- te.po (Krishnababu K), mr.po (Sandeep Shedmake), ta.po (I. Felix),
- lt.po (Gintautas Miliauskas), sr.po (Goran Rakić), bg.po (Alexander Shopov),
- ar.po (Djihed Afifi), ca.po (Gil Forcada)
-
-Major changes in 0.99.7.1
-=========================
-
-* Go back to using powers of 10 instead of powers of 2 for display sizes.
- This means we will agree with printed sizes for most devices (e.g. memory
- sticks will now correctly report "64MB volume" instead of previous
- "61.7MB volume").
-
-* Bug fixes:
- 546971 - rhythmbox crashed when ejecting an ipod device
-
-Major changes in 0.99.6
-=======================
-
-* Better cross-backend copy/move logic. Now will perform an actual file
- system move if possible, even when the source and target are handled
- by different backends (e.g. trash and local).
-* Now requires libsoup >= 2.23.91.
-
-* Bug fixes
- 548841 - Incorrect usage of plural forms in gphoto backend
- 547133 - Getting mtime over http backend is broken
- 538573 - lastmodified uses ISO 8601 date/time where it should use http-date
- 549253 - error path leaks
- 549553 - gvfs mangles uri for unhandled schemes
- 550100 - gio uses 10^3 base (SI) for volume names
- 529971 - Restore from trash appears to do a file copy
- RH 460223 - gnome-mount no longer automatically opens LUKS-encrypted
- partitions
-
-* Translation updates:
- nl.po (Wouter Bolsterlee), gl.po (Ignacio Casal Quinteiro), es.po
- (Jorge Gonzalez), pt_BR.po (Og Maciel), et.po (Priit Laes), eu.po
- (Inaki Larranaga Murgoitio), th.po (Theppitak Karoonboonyanan), ja.po
- (Takeshi AIHANA), vi.po (Nguyễn Thái Ngọc Duy), fr.po (Robert-André
- Mauchin), he.po (Yair Hershkovitz), nb.po (Kjartan Maraas), mk.po
- (Jovan Naumovski), de.po (Hendrik Richter), ga.po (Seán de Búrca),
- zh_HK.po (Chao-Hsiung Liao), zh_TW.po (Chao-Hsiung Liao), sv.po
- (Daniel Nylander)
-
-Major changes in 0.99.5
-=======================
-
-* FTP backend now restores file permissions when replacing a file.
-* Miscellaneous unreported bug fixes.
-
-* Bug fixes
- 41852 - Items should be restored to orig. name when moved out of trash
- 546300 - g_file_replace_async doesn't allow NULL etag
-
-* Translation updates:
- be@latin (Ihar Hrachyshka), es (Priit Laes, Jorge Gonzalez),
- th (Theppitak Karoonboonyanan), pt_BR (Og Maciel), pl (Tomasz
- Dominikowski), ml (Praveen Arimbrathodiyil), pt (Duarte Loreto),
- fi (Ilkka Tuohela), zh_HK (Chao-Hsiung Liao), zh_TW (Chao-Hsiung Liao),
- cs (Petr Kovar), gl (Ignacio Casal Quinteiro), ja (Takeshi AIHANA),
- he (Yair Hershkovitz), gu (Sweta Kothari), ar (Djihed Afifi)
-
-
-Major changes in 0.99.4
-=======================
-
-* Require glib >= 2.17.6
-* Support und update serialization of GEmblem and GEmblemedIcon
-* Add x-content/* support to daemon mounts
-* Use standard icon names
-
-* Bug fixes
- 545695 – any new volume is mounted twice
- 545489 – Nautilus hangs when inserting a CD
- 544008 – g_daemon_file_replace_async mode err
- 543552 – gvfs-fuse-daemon crashes if dbus dies
- 528891 – Handle URI schemes case insensitive
- 525779 – Dont look for trashs dir on sys mounts
- 545968 – leaks xml documents in error cases
- 545966 – Disallow net access to WebDAV xml parser
- 509740 – Trash icon not updated ..
- 539167 – Use g_set_error_literal where appropriate
- 528848 – [PATCH] statfs lies
- 518284 – need to add i18n on module branching
-
-* Translation updates:
- it (Luca Ferretti), gl (Ignacio Casal Quinteiro), es (Jorge Gonzalez)
- ja (Takeshi AIHANA), ar (Khaled Hosny), pt_BR (Vladimir Melo),
-
-
-Major changes in 0.99.3
-=======================
-* Fix frequent crasher in volume monitor
-
-Major changes in 0.99.2
-* Move hal and gphoto volume monitors out of process
-* Fix recursive copying
-* Require glib >= 2.17.4
-* Make the fuse daemon more reliable
-* Many smaller bugfixes
-* et (Ivar Smolin), vi (Clytie Siddall),
- ar (Djihed Afifi, Khaled Hosny)
-
-Major changes in 0.99.1:
-* Fix directory copy/delete problems
-* Fuse daemon robustness fixes
-* Allow mounting non-standard ISO images
-* Better username/domain tests on mount spec
-* Require gphoto >= 2.4.0
-* Fix strdup()/g_free() confusion
-* Use consistent translatable strings for mount and volume
-* Plug some memory leaks
-* Many smaller bug fixes
-* Translation updates:
- ar (Djihed Afifi, Khaled Hosny), bg (Alexander Shopov),
- et (Ivar Smolin), he (Yair Hershkovitz),
- nb (Kjartan Maraas), tr (Baris Cicek), vi (Clytie Siddall)
-
-Major changes in 0.2.2:
-* Respect the giomoduledir provided in gio package config file
-* Better mount icon and name for archive backend
-* Fix crashes with cancelled stream ops
-* Fix race that caused a mount to hang for a client
-* Implement async query_filesystem_info
-* Fix minor leaks
-* trash: Correct display names for directories
-* sftp: Kerberos support
-* smb: Port to new samba 3.2.0 API (backwards compat)
-* sftp: Handle overwrites correctly (was silent overwrite)
-
-Major changes in 0.2.1:
-* Added archive backend
-* Implement most of the async functions in GDaemonFile
-* Correctly handle usernames in uris for ftp://
-* Ftp fixes
-* Webdav fixes
-* Add gvfs-rename command line utility
-* Fix cancellation
-* OpenBSD fixes
-* smb: hide dot files
-* Enviroment variable to disable fuse backend at runtime
-
-Major changes in 0.2.0:
-* Fix crashes
-* Build and portability fixes
-* Better mime icons for remote shares
-* Don't show mounts and volumes outside /media
-* Don't automount gphoto mounts
-* Translate cd disc names
-* ftp: Updates
-* obex: Give better error message on broken phones
-* sftp: Allow setting permissions
-* dav: Correct mount name, file icons and file types
-
-Major changes in 0.1.11:
-* Correctly free mounts
-* Disable debug log
-
-Major changes in 0.1.10:
-* Fix volume monitor change reporting
-* Fix timeout during automount
-
-Major changes in 0.1.9:
-* Added ftp backend
-* Added obexftp backend
-* Locking fixed for volume monitors
-* Better bash completion
-* Better webdav support
-* Allow backends to specify uri details in .mount file
-* Fix leaks and crashes
-* Fix icon for audio cds
-
-Major changes in 0.1.8:
-* Update for gio API changes
-* Add gphoto2 backend
-* Add network: and dns-sd: backend support
-* Http and webdav backend updates
-* Keyring support
-* Fix crashes and deadlocks
-* Add trash::item-count attribute to trash:///
-* Fix smb reads > 65535 bytes breaking on some servers
-* Fix cancellation race in reading
-* Fill in thumbnail info for backends
-* sftp: Handle host identity changes
-* Enable translations everywhere
-* Add bash completion support for command line apps
-* Fix handling of blank cds and audio cds
-* Support port in sftp uris
-
-Major changes in 0.1.7:
-* Update for gio API changes
-* Add gconf based implementation of
- g_app_info_get_default_for_uri_scheme
-* Fix crashes
-* Allow navigation with http uris
-* Better file read performance with readahead and
- large block reads
-* Lots of bugs fixed in trash backend
-* Pick up cdrom icons from autorun.inf
-* Add "filesystem" file to computer://
-* Fix renaming in sftp and smb
-
-Major changes in 0.1.6:
-* Add files missing in the released 0.1.5 tarball
-
-Major changes in 0.1.5:
-* Update to work with latest glib
-* Fix sftp error handling on reading directories
-* Use correct file info attribute name style
-* Add gvfs-mkdir app
-* hal: Don't show drives if all volumes are hidden
-* Enable translations
-
-Major changes in 0.1.4:
-* Update to work with latest glib
-* Fix compiler warnings
-
-Major changes in 0.1.3:
-* Various fixes to hal volume monitor
-* Make gvfsd reload config on SIGUSR1
-* Updates to http/dav backends
-* Port http backend to libsoup 2.4.
-* Initial burn:/// backend
-* Add ssh: alias for sftp:
-* Fix fuse mount
-* Automount fuse on startup of daemon
-* Various bugfixes
-
-Major changes in 0.1.2:
-* Switch to intltool fro translation setup
-* Update to latest gio APIS
-* Add mount list option to gvfs-mount
-* Specify fallback icons in hal backend
-* Implement more of computer: backend
-* Initial http backend
-* Fix get_relative_path bug on root paths
-
-Major changes in 0.1.1:
-* Use gio from glib (glib 2.15.1 required)
-* Fix translation issues
-* Fix various sftp backend issues
-* Move .mount files to /usr/share/gvfs/mounts
-* Add initial computer:/// backend
-
-Major changes in 0.1.0:
-* Use gio from glib (glib 2.15.0 required)
-* Update to API changes in gio
-* add cdda backend
-* add hal volume monitor
-
-Major changes in 0.0.2:
-* Updated to work win gio-standalone 0.1.2
-* Build fixes on various platforms
-* Don't link client lib to libgvfscommon.so
-* Change how the uri mapper works
-* Integrate standard uri mappers (i.e. smb) into client libs
- (You might need to remove $prefix/lib/gvfs/modules/libsmb.so
- from an older version if you install this)
-* Cleanly handle when gvfs daemons die, without
- crashing the app
-* Implement unmounting
-* Rename master daemon to "gvfsd" and mount daemons to
- names like "gvfsd-sftp".
diff --git a/README b/README
deleted file mode 100644
index dc4de7a8..00000000
--- a/README
+++ /dev/null
@@ -1,21 +0,0 @@
-gvfs is a userspace virtual filesystem designed to work with the i/o
-abstractions of gio (a library availible in glib >= 2.15.1). It
-installs several modules that are automatically used by applications
-using the APIs of libgio. There is also fuse support that allows
-applications not using gio to access the gvfs filesystems.
-
-
-The gvfs model differs from e.g. gnome-vfs in that filesystems must
-be mounted before they are used. There is a central daemon (gvfsd)
-that handles coordinting mounts, and then each mount is (typically)
-in its own daemon process (although mounts can share daemon process).
-
-gvfs comes with a set of backends, including trash support, sftp,
-smb, http, dav and others. More backends are planned.
-
-gvfs also contains modules for gio that implement hal volume monitors
-and the gnome uri-scheme handler configuration.
-
-There is a set of command line programs starting with "gvfs-" that
-lets you run commands (like cat, ls, stat, etc) on files in the gvfs
-mounts.
diff --git a/TODO b/TODO
deleted file mode 100644
index 523051b9..00000000
--- a/TODO
+++ /dev/null
@@ -1,32 +0,0 @@
-Implement the rest of the mountable GDaemonFile ops:
- unmount_mountable
- eject_mountable
-
-implement readahead in GVFSReadStream, time difference
-
-implement seek & truncate
-
-implement get_file_info for GFileInputStreamDaemon, needs marshalling attributes over custom protocol
-
-finish implementing copy progress callbacks
-
-implement stuff in GDaemonVolume / GDaemonVolumeMonitor
-
-convert GDaemonFiles to fuse paths on request
-
-detect fuse paths and reverse map back to GDaemonFile
-
-remove owners from bus_name_map when they fail
-
-smb support for smbc_getxattr!
-smb - handle server going down
-
-add trash:/// support
-
-decide exactly how to handle not-mounted errors and make sure its consistent.
-mount daemons should re-register when new owner for vfs daemon.
-
-Make built-in uri parsers link into gvfs shared lib instead of using a module
- (smb is a shared lib atm to make sure that works)
-
-Implement GFileCreateFlags in backends as possible
diff --git a/autogen.sh b/autogen.sh
deleted file mode 100755
index 4f24b3b9..00000000
--- a/autogen.sh
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/bin/sh
-# Run this to generate all the initial makefiles, etc.
-
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-ORIGDIR=`pwd`
-cd $srcdir
-PROJECT=GVfs
-TEST_TYPE=-f
-FILE=client/gdaemonvfs.h
-
-DIE=0
-
-have_libtool=false
-if libtoolize --version < /dev/null > /dev/null 2>&1 ; then
- libtool_version=`libtoolize --version | sed 's/^[^0-9]*\([0-9.][0-9.]*\).*/\1/'`
- case $libtool_version in
- 1.4*|1.5*|2.2*)
- have_libtool=true
- ;;
- esac
-fi
-if $have_libtool ; then : ; else
- echo
- echo "You must have libtool 1.4 installed to compile $PROJECT."
- echo "Install the appropriate package for your distribution,"
- echo "or get the source tarball at http://ftp.gnu.org/gnu/libtool/"
- DIE=1
-fi
-
-(intltoolize --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "You must have intltool installed to compile $PROJECT."
- echo "Install the appropriate package for your distribution,"
- echo "or get the source tarball at http://ftp.gnome.org/pub/GNOME/sources/intltool"
- DIE=1
-}
-
-(gtkdocize --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "You must have gtk-doc installed to compile $PROJECT."
- echo "Install the appropriate package for your distribution,"
- echo "or get the source tarball at http://ftp.gnome.org/pub/GNOME/sources/gtk-doc/"
- DIE=1
-}
-
-(autoconf --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "You must have autoconf installed to compile $PROJECT."
- echo "Install the appropriate package for your distribution,"
- echo "or get the source tarball at http://ftp.gnu.org/gnu/autoconf/"
- DIE=1
-}
-
-if automake --version < /dev/null > /dev/null 2>&1 ; then
- AUTOMAKE=automake
- ACLOCAL=aclocal
-else
- echo
- echo "You must have automake 1.7.x installed to compile $PROJECT."
- echo "Install the appropriate package for your distribution,"
- echo "or get the source tarball at http://ftp.gnu.org/gnu/automake/"
- DIE=1
-fi
-
-if test "$DIE" -eq 1; then
- exit 1
-fi
-
-test $TEST_TYPE $FILE || {
- echo "You must run this script in the top-level $PROJECT directory"
- exit 1
-}
-
-if test -z "$AUTOGEN_SUBDIR_MODE"; then
- if test -z "$*"; then
- echo "I am going to run ./configure with no arguments - if you wish "
- echo "to pass any to it, please specify them on the $0 command line."
- fi
-fi
-
-if test -z "$ACLOCAL_FLAGS"; then
-
- acdir=`$ACLOCAL --print-ac-dir`
- m4list="glib-2.0.m4 glib-gettext.m4"
-
- for file in $m4list
- do
- if [ ! -f "$acdir/$file" ]; then
- echo "WARNING: aclocal's directory is $acdir, but..."
- echo " no file $acdir/$file"
- echo " You may see fatal macro warnings below."
- echo " If these files are installed in /some/dir, set the ACLOCAL_FLAGS "
- echo " environment variable to \"-I /some/dir\", or install"
- echo " $acdir/$file."
- echo ""
- fi
- done
-fi
-
-rm -rf autom4te.cache
-
-# README and INSTALL are required by automake, but may be deleted by clean
-# up rules. to get automake to work, simply touch these here, they will be
-# regenerated from their corresponding *.in files by ./configure anyway.
-touch README INSTALL
-
-libtoolize --force || exit $?
-intltoolize --force --copy --automake || exit $?
-gtkdocize || exit $?
-
-$ACLOCAL $ACLOCAL_FLAGS || exit $?
-
-autoheader || exit $?
-
-$AUTOMAKE --add-missing || exit $?
-autoconf || exit $?
-cd $ORIGDIR || exit $?
-
-if test -z "$AUTOGEN_SUBDIR_MODE"; then
- $srcdir/configure --enable-maintainer-mode $AUTOGEN_CONFIGURE_ARGS "$@" || exit $?
-
- echo
- echo "Now type 'make' to compile $PROJECT."
-fi
diff --git a/client/.gitignore b/client/.gitignore
deleted file mode 100644
index b185be91..00000000
--- a/client/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-gvfs-fuse-daemon
diff --git a/client/Makefile.am b/client/Makefile.am
deleted file mode 100644
index 9d61e204..00000000
--- a/client/Makefile.am
+++ /dev/null
@@ -1,81 +0,0 @@
-NULL =
-
-INCLUDES = -I$(top_srcdir) \
- -I$(top_srcdir)/client \
- -I$(top_srcdir)/common \
- $(GLIB_CFLAGS) $(DBUS_CFLAGS) \
- -DG_LOG_DOMAIN=\"GVFS\" -DG_DISABLE_DEPRECATED \
- -DGVFS_MODULE_DIR=\"$(libdir)/gvfs/modules\" \
- -DGVFS_LOCALEDIR=\""$(localedir)"\" \
- -DDBUS_API_SUBJECT_TO_CHANGE
-
-module_flags = -export_dynamic -avoid-version -module -no-undefined -export-symbols-regex '^g_vfs_.*|g_io_module_load|g_io_module_unload'
-
-## Common to dynamic and static client libs
-
-gvfsclientincludedir=$(includedir)/gvfs-client/gvfs/
-gvfsclientinclude_HEADERS = \
- gvfsuriutils.h gvfsurimapper.h \
- $(NULL)
-
-URI_PARSER_SOURCES = \
- smburi.c \
- httpuri.c \
- $(NULL)
-
-vfssources = \
- gdaemonvfs.c gdaemonvfs.h \
- gdaemonmount.c gdaemonmount.h \
- gdaemonvolumemonitor.c gdaemonvolumemonitor.h \
- gdaemonfile.c gdaemonfile.h \
- gdaemonfileinputstream.c gdaemonfileinputstream.h \
- gdaemonfileoutputstream.c gdaemonfileoutputstream.h \
- gdaemonfileenumerator.c gdaemonfileenumerator.h \
- gdaemonfilemonitor.c gdaemonfilemonitor.h \
- gvfsdaemondbus.c gvfsdaemondbus.h \
- gvfsuriutils.c gvfsuriutils.h \
- gvfsurimapper.c gvfsurimapper.h \
- $(URI_PARSER_SOURCES) \
- $(NULL)
-
-vfslibs = \
- $(top_builddir)/common/libgvfscommon-noin.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS) \
- $(NULL)
-
-## Dynamic client lib
-
-giomodules_LTLIBRARIES = libgvfsdbus.la
-
-libgvfsdbus_la_LDFLAGS = $(module_flags)
-libgvfsdbus_la_SOURCES = $(vfssources)
-libgvfsdbus_la_LIBADD = $(vfslibs)
-
-noinst_PROGRAMS = test-uri-utils
-
-test_uri_utils_SOURCES = test-uri-utils.c gvfsuriutils.c gvfsuriutils.h
-test_uri_utils_LDADD = $(vfslibs)
-test_uri_utils_CFLAGS = $(INCLUDES)
-
-if USE_FUSE
-
-## FUSE daemon
-
-libexec_PROGRAMS = gvfs-fuse-daemon
-
-gvfs_fuse_daemon_SOURCES = \
- gvfsfusedaemon.c
-
-gvfs_fuse_daemon_CFLAGS = \
- -I$(top_srcdir) \
- -I$(top_srcdir)/common \
- $(GLIB_CFLAGS) $(DBUS_CFLAGS) $(FUSE_CFLAGS) \
- -DG_LOG_DOMAIN=\"GVFS-FUSE\" -DG_DISABLE_DEPRECATED \
- -DDBUS_API_SUBJECT_TO_CHANGE
-
-gvfs_fuse_daemon_LDADD = \
- $(top_builddir)/common/libgvfscommon.la \
- $(GLIB_LIBS) $(DBUS_LIBS) $(FUSE_LIBS)
-
-endif
diff --git a/client/gdaemonfile.c b/client/gdaemonfile.c
deleted file mode 100644
index 9e8eb637..00000000
--- a/client/gdaemonfile.c
+++ /dev/null
@@ -1,2805 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include "gdaemonfile.h"
-#include "gvfsdaemondbus.h"
-#include "gdaemonmount.h"
-#include <gvfsdaemonprotocol.h>
-#include <gdaemonfileinputstream.h>
-#include <gdaemonfileoutputstream.h>
-#include <gdaemonfilemonitor.h>
-#include <gdaemonfileenumerator.h>
-#include <glib/gi18n-lib.h>
-#include "gdbusutils.h"
-#include "gmountoperationdbus.h"
-#include <gio/gio.h>
-
-static void g_daemon_file_file_iface_init (GFileIface *iface);
-
-struct _GDaemonFile
-{
- GObject parent_instance;
-
- GMountSpec *mount_spec;
- char *path;
-};
-
-static void g_daemon_file_read_async (GFile *file,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer callback_data);
-
-G_DEFINE_TYPE_WITH_CODE (GDaemonFile, g_daemon_file, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (G_TYPE_FILE,
- g_daemon_file_file_iface_init))
-
-static void
-g_daemon_file_finalize (GObject *object)
-{
- GDaemonFile *daemon_file;
-
- daemon_file = G_DAEMON_FILE (object);
-
- g_mount_spec_unref (daemon_file->mount_spec);
- g_free (daemon_file->path);
-
- if (G_OBJECT_CLASS (g_daemon_file_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_daemon_file_parent_class)->finalize) (object);
-}
-
-static void
-g_daemon_file_class_init (GDaemonFileClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_daemon_file_finalize;
-}
-
-static void
-g_daemon_file_init (GDaemonFile *daemon_file)
-{
-}
-
-GFile *
-g_daemon_file_new (GMountSpec *mount_spec,
- const char *path)
-{
- GDaemonFile *daemon_file;
-
- daemon_file = g_object_new (G_TYPE_DAEMON_FILE, NULL);
- daemon_file->mount_spec = g_mount_spec_get_unique_for (mount_spec);
- daemon_file->path = g_mount_spec_canonicalize_path (path);
-
- return G_FILE (daemon_file);
-}
-
-static gboolean
-g_daemon_file_is_native (GFile *file)
-{
- return FALSE;
-}
-
-static gboolean
-g_daemon_file_has_uri_scheme (GFile *file,
- const char *uri_scheme)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
- const char *scheme;
-
- scheme = _g_daemon_vfs_mountspec_get_uri_scheme (daemon_file->mount_spec);
- return g_ascii_strcasecmp (scheme, uri_scheme) == 0;
-}
-
-static char *
-g_daemon_file_get_uri_scheme (GFile *file)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
- const char *scheme;
-
- scheme = _g_daemon_vfs_mountspec_get_uri_scheme (daemon_file->mount_spec);
-
- return g_strdup (scheme);
-}
-
-static char *
-g_daemon_file_get_basename (GFile *file)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
- char *last_slash;
-
- /* This code relies on the path being canonicalized */
-
- last_slash = strrchr (daemon_file->path, '/');
- /* If no slash, or only "/" fallback to full path */
- if (last_slash == NULL ||
- last_slash[1] == '\0')
- return g_strdup (daemon_file->path);
-
- return g_strdup (last_slash + 1);
-}
-
-static char *
-g_daemon_file_get_path (GFile *file)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
- GMountInfo *mount_info;
- const char *rel_path;
- char *path;
-
- /* This is a sync i/o call, which is a bit unfortunate, as
- * this is supposed to be a fast call. However, in almost all
- * cases this will be cached.
- */
-
- mount_info = _g_daemon_vfs_get_mount_info_sync (daemon_file->mount_spec,
- daemon_file->path,
- NULL);
-
- if (mount_info == NULL)
- return NULL;
-
- path = NULL;
-
- if (mount_info->fuse_mountpoint)
- {
- rel_path = daemon_file->path +
- strlen (mount_info->mount_spec->mount_prefix);
-
- path = g_build_filename (mount_info->fuse_mountpoint, rel_path, NULL);
- }
-
- g_mount_info_unref (mount_info);
-
- return path;
-}
-
-static char *
-g_daemon_file_get_uri (GFile *file)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
-
- return _g_daemon_vfs_get_uri_for_mountspec (daemon_file->mount_spec,
- daemon_file->path,
- FALSE);
-}
-
-static char *
-g_daemon_file_get_parse_name (GFile *file)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
-
- return _g_daemon_vfs_get_uri_for_mountspec (daemon_file->mount_spec,
- daemon_file->path,
- TRUE);
-}
-
-static GFile *
-new_file_for_new_path (GDaemonFile *daemon_file,
- const char *new_path)
-{
- GFile *new_file;
- GMountSpec *new_spec;
-
- new_spec = _g_daemon_vfs_get_mount_spec_for_path (daemon_file->mount_spec,
- daemon_file->path,
- new_path);
-
- new_file = g_daemon_file_new (new_spec, new_path);
- g_mount_spec_unref (new_spec);
-
- return new_file;
-}
-
-static GFile *
-g_daemon_file_get_parent (GFile *file)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
- const char *path;
- GFile *parent;
- const char *base;
- char *parent_path;
- gsize len;
-
- path = daemon_file->path;
- base = strrchr (path, '/');
- if (base == NULL ||
- *(base+1) == 0)
- return NULL;
-
- while (base > path && *base == '/')
- base--;
-
- len = (guint) 1 + base - path;
-
- parent_path = g_new (gchar, len + 1);
- g_memmove (parent_path, path, len);
- parent_path[len] = 0;
-
- parent = new_file_for_new_path (daemon_file, parent_path);
- g_free (parent_path);
-
- return parent;
-}
-
-static GFile *
-g_daemon_file_dup (GFile *file)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
-
- return g_daemon_file_new (daemon_file->mount_spec,
- daemon_file->path);
-}
-
-static guint
-g_daemon_file_hash (GFile *file)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
-
- return
- g_str_hash (daemon_file->path) ^
- GPOINTER_TO_UINT (daemon_file->mount_spec); /* We have unique mount_spec objects so hash directly on it */
-}
-
-static gboolean
-g_daemon_file_equal (GFile *file1,
- GFile *file2)
-{
- GDaemonFile *daemon_file1 = G_DAEMON_FILE (file1);
- GDaemonFile *daemon_file2 = G_DAEMON_FILE (file2);
-
- return daemon_file1->mount_spec == daemon_file2->mount_spec &&
- g_str_equal (daemon_file1->path, daemon_file2->path);
-}
-
-
-static const char *
-match_prefix (const char *path, const char *prefix)
-{
- int prefix_len;
-
- prefix_len = strlen (prefix);
- if (strncmp (path, prefix, prefix_len) != 0)
- return NULL;
-
- /* Handle the case where prefix is the root, so that
- * the IS_DIR_SEPRARATOR check below works */
- if (prefix_len > 0 &&
- prefix[prefix_len-1] == '/')
- prefix_len--;
-
-
- return path + prefix_len;
-}
-
-static gboolean
-g_daemon_file_prefix_matches (GFile *parent,
- GFile *descendant)
-{
- GDaemonFile *parent_daemon = G_DAEMON_FILE (parent);
- GDaemonFile *descendant_daemon = G_DAEMON_FILE (descendant);
- const char *remainder;
-
- if (descendant_daemon->mount_spec != parent_daemon->mount_spec)
- return FALSE;
-
- remainder = match_prefix (descendant_daemon->path, parent_daemon->path);
- if (remainder != NULL && *remainder == '/')
- return TRUE;
- return FALSE;
-}
-
-static char *
-g_daemon_file_get_relative_path (GFile *parent,
- GFile *descendant)
-{
- GDaemonFile *parent_daemon = G_DAEMON_FILE (parent);
- GDaemonFile *descendant_daemon = G_DAEMON_FILE (descendant);
- const char *remainder;
-
- if (descendant_daemon->mount_spec != parent_daemon->mount_spec)
- return NULL;
-
- remainder = match_prefix (descendant_daemon->path, parent_daemon->path);
-
- if (remainder != NULL && *remainder == '/')
- return g_strdup (remainder + 1);
- return NULL;
-}
-
-static GFile *
-g_daemon_file_resolve_relative_path (GFile *file,
- const char *relative_path)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
- char *path;
- GFile *child;
-
- if (*relative_path == '/')
- return new_file_for_new_path (daemon_file, relative_path);
-
- path = g_build_path ("/", daemon_file->path, relative_path, NULL);
- child = new_file_for_new_path (daemon_file, path);
- g_free (path);
-
- return child;
-}
-
-static DBusMessage *
-create_empty_message (GFile *file,
- const char *op,
- GMountInfo **mount_info_out,
- GError **error)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
- DBusMessage *message;
- GMountInfo *mount_info;
- const char *path;
-
- mount_info = _g_daemon_vfs_get_mount_info_sync (daemon_file->mount_spec,
- daemon_file->path,
- error);
- if (mount_info == NULL)
- return NULL;
-
- if (mount_info_out)
- *mount_info_out = g_mount_info_ref (mount_info);
-
- message =
- dbus_message_new_method_call (mount_info->dbus_id,
- mount_info->object_path,
- G_VFS_DBUS_MOUNT_INTERFACE,
- op);
-
- path = g_mount_info_resolve_path (mount_info,
- daemon_file->path);
- _g_dbus_message_append_args (message, G_DBUS_TYPE_CSTRING, &path, 0);
-
- g_mount_info_unref (mount_info);
- return message;
-}
-
-static DBusMessage *
-do_sync_path_call (GFile *file,
- const char *op,
- GMountInfo **mount_info_out,
- DBusConnection **connection_out,
- GCancellable *cancellable,
- GError **error,
- int first_arg_type,
- ...)
-{
- DBusMessage *message, *reply;
- va_list var_args;
- GError *my_error;
-
- retry:
-
- message = create_empty_message (file, op, mount_info_out, error);
- if (!message)
- return NULL;
-
- va_start (var_args, first_arg_type);
- _g_dbus_message_append_args_valist (message,
- first_arg_type,
- var_args);
- va_end (var_args);
-
-
- my_error = NULL;
- reply = _g_vfs_daemon_call_sync (message,
- connection_out,
- NULL, NULL, NULL,
- cancellable, &my_error);
- dbus_message_unref (message);
-
- if (reply == NULL)
- {
- if (g_error_matches (my_error, G_VFS_ERROR, G_VFS_ERROR_RETRY))
- {
- g_error_free (my_error);
- goto retry;
- }
- g_propagate_error (error, my_error);
- }
-
- return reply;
-}
-
-static DBusMessage *
-do_sync_2_path_call (GFile *file1,
- GFile *file2,
- const char *op,
- const char *callback_obj_path,
- DBusObjectPathMessageFunction callback,
- gpointer callback_user_data,
- DBusConnection **connection_out,
- GCancellable *cancellable,
- GError **error,
- int first_arg_type,
- ...)
-{
- GDaemonFile *daemon_file1 = G_DAEMON_FILE (file1);
- GDaemonFile *daemon_file2 = G_DAEMON_FILE (file2);
- DBusMessage *message, *reply;
- GMountInfo *mount_info1, *mount_info2;
- const char *path1, *path2;
- va_list var_args;
- GError *my_error;
-
- retry:
-
- mount_info1 = _g_daemon_vfs_get_mount_info_sync (daemon_file1->mount_spec,
- daemon_file1->path,
- error);
- if (mount_info1 == NULL)
- return NULL;
-
- mount_info2 = NULL;
- if (daemon_file2)
- {
- mount_info2 = _g_daemon_vfs_get_mount_info_sync (daemon_file2->mount_spec,
- daemon_file2->path,
- error);
- if (mount_info2 == NULL)
- {
- g_mount_info_unref (mount_info1);
- return NULL;
- }
-
- if (mount_info1 != mount_info2)
- {
- g_mount_info_unref (mount_info1);
- /* For copy this will cause the fallback code to be involved */
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported, files on different mounts"));
- return NULL;
- }
- }
-
- message =
- dbus_message_new_method_call (mount_info1->dbus_id,
- mount_info1->object_path,
- G_VFS_DBUS_MOUNT_INTERFACE,
- op);
-
- path1 = g_mount_info_resolve_path (mount_info1,
- daemon_file1->path);
- _g_dbus_message_append_args (message, G_DBUS_TYPE_CSTRING, &path1, 0);
-
- if (daemon_file2)
- {
- path2 = g_mount_info_resolve_path (mount_info2,
- daemon_file2->path);
- _g_dbus_message_append_args (message, G_DBUS_TYPE_CSTRING, &path2, 0);
- }
-
- va_start (var_args, first_arg_type);
- _g_dbus_message_append_args_valist (message,
- first_arg_type,
- var_args);
- va_end (var_args);
-
- my_error = NULL;
- reply = _g_vfs_daemon_call_sync (message,
- connection_out,
- callback_obj_path,
- callback,
- callback_user_data,
- cancellable, &my_error);
- dbus_message_unref (message);
-
- g_mount_info_unref (mount_info1);
- if (mount_info2)
- g_mount_info_unref (mount_info2);
-
- if (reply == NULL)
- {
- if (g_error_matches (my_error, G_VFS_ERROR, G_VFS_ERROR_RETRY))
- {
- g_error_free (my_error);
- goto retry;
- }
- g_propagate_error (error, my_error);
- }
-
- return reply;
-}
-
-typedef void (*AsyncPathCallCallback) (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data);
-
-
-typedef struct {
- GSimpleAsyncResult *result;
- GFile *file;
- char *op;
- GCancellable *cancellable;
- DBusMessage *args;
- AsyncPathCallCallback callback;
- gpointer callback_data;
- GDestroyNotify notify;
-} AsyncPathCall;
-
-static void
-async_path_call_free (AsyncPathCall *data)
-{
- if (data->notify)
- data->notify (data->callback_data);
-
- if (data->result)
- g_object_unref (data->result);
- g_object_unref (data->file);
- g_free (data->op);
- if (data->cancellable)
- g_object_unref (data->cancellable);
- if (data->args)
- dbus_message_unref (data->args);
- g_free (data);
-}
-
-static void
-async_path_call_done (DBusMessage *reply,
- DBusConnection *connection,
- GError *io_error,
- gpointer _data)
-{
- AsyncPathCall *data = _data;
- GSimpleAsyncResult *result;
-
- if (io_error != NULL)
- {
- g_simple_async_result_set_from_error (data->result, io_error);
- g_simple_async_result_complete (data->result);
- async_path_call_free (data);
- }
- else
- {
- result = data->result;
- g_object_weak_ref (G_OBJECT (result), (GWeakNotify)async_path_call_free, data);
- data->result = NULL;
-
- data->callback (reply, connection,
- result,
- data->cancellable,
- data->callback_data);
-
- /* Free data here, or later if callback ref:ed the result */
- g_object_unref (result);
- }
-}
-
-static void
-do_async_path_call_callback (GMountInfo *mount_info,
- gpointer _data,
- GError *error)
-{
- AsyncPathCall *data = _data;
- GDaemonFile *daemon_file = G_DAEMON_FILE (data->file);
- const char *path;
- DBusMessage *message;
- DBusMessageIter arg_source, arg_dest;
-
- if (error != NULL)
- {
- g_simple_async_result_set_from_error (data->result, error);
- g_simple_async_result_complete (data->result);
- async_path_call_free (data);
- return;
- }
-
- message =
- dbus_message_new_method_call (mount_info->dbus_id,
- mount_info->object_path,
- G_VFS_DBUS_MOUNT_INTERFACE,
- data->op);
-
- path = g_mount_info_resolve_path (mount_info, daemon_file->path);
- _g_dbus_message_append_args (message, G_DBUS_TYPE_CSTRING, &path, 0);
-
- /* Append more args from data->args */
-
- if (data->args)
- {
- dbus_message_iter_init (data->args, &arg_source);
- dbus_message_iter_init_append (message, &arg_dest);
-
- _g_dbus_message_iter_copy (&arg_dest, &arg_source);
- }
-
- _g_vfs_daemon_call_async (message,
- async_path_call_done, data,
- data->cancellable);
-
- dbus_message_unref (message);
-}
-
-static void
-do_async_path_call (GFile *file,
- const char *op,
- GCancellable *cancellable,
- GAsyncReadyCallback op_callback,
- gpointer op_callback_data,
- AsyncPathCallCallback callback,
- gpointer callback_data,
- GDestroyNotify notify,
- int first_arg_type,
- ...)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
- va_list var_args;
- AsyncPathCall *data;
-
- data = g_new0 (AsyncPathCall, 1);
-
- data->result = g_simple_async_result_new (G_OBJECT (file),
- op_callback, op_callback_data,
- NULL);
-
- data->file = g_object_ref (file);
- data->op = g_strdup (op);
- if (cancellable)
- data->cancellable = g_object_ref (cancellable);
- data->callback = callback;
- data->callback_data = callback_data;
- data->notify = notify;
-
- if (first_arg_type != 0)
- {
- data->args = dbus_message_new (DBUS_MESSAGE_TYPE_METHOD_CALL);
- if (data->args == NULL)
- _g_dbus_oom ();
-
- va_start (var_args, first_arg_type);
- _g_dbus_message_append_args_valist (data->args,
- first_arg_type,
- var_args);
- va_end (var_args);
- }
-
-
- _g_daemon_vfs_get_mount_info_async (daemon_file->mount_spec,
- daemon_file->path,
- do_async_path_call_callback,
- data);
-}
-
-
-static GFileEnumerator *
-g_daemon_file_enumerate_children (GFile *file,
- const char *attributes,
- GFileQueryInfoFlags flags,
- GCancellable *cancellable,
- GError **error)
-{
- DBusMessage *reply;
- dbus_uint32_t flags_dbus;
- char *obj_path;
- GDaemonFileEnumerator *enumerator;
- DBusConnection *connection;
- char *uri;
-
- enumerator = g_daemon_file_enumerator_new (file);
- obj_path = g_daemon_file_enumerator_get_object_path (enumerator);
-
-
- uri = g_file_get_uri (file);
-
- if (attributes == NULL)
- attributes = "";
- flags_dbus = flags;
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_ENUMERATE,
- NULL, &connection,
- cancellable, error,
- DBUS_TYPE_STRING, &obj_path,
- DBUS_TYPE_STRING, &attributes,
- DBUS_TYPE_UINT32, &flags_dbus,
- DBUS_TYPE_STRING, &uri,
- 0);
- g_free (uri);
- g_free (obj_path);
-
- if (reply == NULL)
- goto error;
-
- dbus_message_unref (reply);
-
- g_daemon_file_enumerator_set_sync_connection (enumerator, connection);
-
- return G_FILE_ENUMERATOR (enumerator);
-
- error:
- if (reply)
- dbus_message_unref (reply);
- g_object_unref (enumerator);
- return NULL;
-}
-
-static GFileInfo *
-g_daemon_file_query_info (GFile *file,
- const char *attributes,
- GFileQueryInfoFlags flags,
- GCancellable *cancellable,
- GError **error)
-{
- DBusMessage *reply;
- dbus_uint32_t flags_dbus;
- DBusMessageIter iter;
- GFileInfo *info;
- char *uri;
-
- uri = g_file_get_uri (file);
-
- if (attributes == NULL)
- attributes = "";
- flags_dbus = flags;
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_QUERY_INFO,
- NULL, NULL,
- cancellable, error,
- DBUS_TYPE_STRING, &attributes,
- DBUS_TYPE_UINT32, &flags_dbus,
- DBUS_TYPE_STRING, &uri,
- 0);
-
- g_free (uri);
-
- if (reply == NULL)
- return NULL;
-
- info = NULL;
-
- if (!dbus_message_iter_init (reply, &iter) ||
- (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRUCT))
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from get_info"));
- goto out;
- }
-
- info = _g_dbus_get_file_info (&iter, error);
-
- out:
- dbus_message_unref (reply);
- return info;
-}
-
-static void
-query_info_async_cb (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data)
-{
- DBusMessageIter iter;
- GFileInfo *info;
- GError *error;
-
- info = NULL;
-
- if (!dbus_message_iter_init (reply, &iter) ||
- (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRUCT))
- {
- g_simple_async_result_set_error (result,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from query_info"));
- g_simple_async_result_complete (result);
- return;
- }
-
- error = NULL;
- info = _g_dbus_get_file_info (&iter, &error);
- if (info == NULL)
- {
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- g_simple_async_result_complete (result);
- return;
- }
-
- g_simple_async_result_set_op_res_gpointer (result, info, g_object_unref);
- g_simple_async_result_complete (result);
-}
-
-static void
-g_daemon_file_query_info_async (GFile *file,
- const char *attributes,
- GFileQueryInfoFlags flags,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- guint32 dbus_flags;
- char *uri;
-
- uri = g_file_get_uri (file);
-
- dbus_flags = flags;
- do_async_path_call (file,
- G_VFS_DBUS_MOUNT_OP_QUERY_INFO,
- cancellable,
- callback, user_data,
- query_info_async_cb, NULL, NULL,
- DBUS_TYPE_STRING, &attributes,
- DBUS_TYPE_UINT32, &dbus_flags,
- DBUS_TYPE_STRING, &uri,
- 0);
-
- g_free (uri);
-}
-
-static GFileInfo *
-g_daemon_file_query_info_finish (GFile *file,
- GAsyncResult *res,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GFileInfo *info;
-
- info = g_simple_async_result_get_op_res_gpointer (simple);
- if (info)
- return g_object_ref (info);
-
- return NULL;
-}
-
-typedef struct {
- GSimpleAsyncResult *result;
- gboolean can_seek;
-} GetFDData;
-
-static void
-read_async_get_fd_cb (int fd,
- gpointer callback_data)
-{
- GetFDData *data = callback_data;
- GFileInputStream *stream;
-
- if (fd == -1)
- {
- g_simple_async_result_set_error (data->result,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Couldn't get stream file descriptor"));
- }
- else
- {
- stream = g_daemon_file_input_stream_new (fd, data->can_seek);
- g_simple_async_result_set_op_res_gpointer (data->result, stream, g_object_unref);
- }
-
- g_simple_async_result_complete (data->result);
-
- g_object_unref (data->result);
- g_free (data);
-}
-
-static void
-read_async_cb (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data)
-{
- guint32 fd_id;
- dbus_bool_t can_seek;
- GetFDData *get_fd_data;
-
- if (!dbus_message_get_args (reply, NULL,
- DBUS_TYPE_UINT32, &fd_id,
- DBUS_TYPE_BOOLEAN, &can_seek,
- DBUS_TYPE_INVALID))
- {
- g_simple_async_result_set_error (result,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from open"));
- g_simple_async_result_complete (result);
- return;
- }
-
- get_fd_data = g_new0 (GetFDData, 1);
- get_fd_data->result = g_object_ref (result);
- get_fd_data->can_seek = can_seek;
-
- _g_dbus_connection_get_fd_async (connection, fd_id,
- read_async_get_fd_cb, get_fd_data);
-}
-
-static void
-g_daemon_file_read_async (GFile *file,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer callback_data)
-{
- do_async_path_call (file,
- G_VFS_DBUS_MOUNT_OP_OPEN_FOR_READ,
- cancellable,
- callback, callback_data,
- read_async_cb, NULL, NULL,
- 0);
-}
-
-static GFileInputStream *
-g_daemon_file_read_finish (GFile *file,
- GAsyncResult *res,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- gpointer op;
-
- op = g_simple_async_result_get_op_res_gpointer (simple);
- if (op)
- return g_object_ref (op);
-
- return NULL;
-}
-
-
-static GFileInputStream *
-g_daemon_file_read (GFile *file,
- GCancellable *cancellable,
- GError **error)
-{
- DBusConnection *connection;
- int fd;
- DBusMessage *reply;
- guint32 fd_id;
- dbus_bool_t can_seek;
-
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_OPEN_FOR_READ,
- NULL, &connection,
- cancellable, error,
- 0);
- if (reply == NULL)
- return NULL;
-
- if (!dbus_message_get_args (reply, NULL,
- DBUS_TYPE_UINT32, &fd_id,
- DBUS_TYPE_BOOLEAN, &can_seek,
- DBUS_TYPE_INVALID))
- {
- dbus_message_unref (reply);
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from open"));
- return NULL;
- }
-
- dbus_message_unref (reply);
-
- fd = _g_dbus_connection_get_fd_sync (connection, fd_id);
- if (fd == -1)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Didn't get stream file descriptor"));
- return NULL;
- }
-
- return g_daemon_file_input_stream_new (fd, can_seek);
-}
-
-static GFileOutputStream *
-g_daemon_file_append_to (GFile *file,
- GFileCreateFlags flags,
- GCancellable *cancellable,
- GError **error)
-{
- DBusConnection *connection;
- int fd;
- DBusMessage *reply;
- guint32 fd_id;
- dbus_bool_t can_seek;
- guint16 mode;
- guint64 initial_offset;
- dbus_bool_t make_backup;
- guint32 dbus_flags;
- char *etag;
-
- mode = 1;
- etag = "";
- make_backup = FALSE;
- dbus_flags = flags;
-
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_OPEN_FOR_WRITE,
- NULL, &connection,
- cancellable, error,
- DBUS_TYPE_UINT16, &mode,
- DBUS_TYPE_STRING, &etag,
- DBUS_TYPE_BOOLEAN, &make_backup,
- DBUS_TYPE_UINT32, &dbus_flags,
- 0);
- if (reply == NULL)
- return NULL;
-
- if (!dbus_message_get_args (reply, NULL,
- DBUS_TYPE_UINT32, &fd_id,
- DBUS_TYPE_BOOLEAN, &can_seek,
- DBUS_TYPE_UINT64, &initial_offset,
- DBUS_TYPE_INVALID))
- {
- dbus_message_unref (reply);
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from open"));
- return NULL;
- }
-
- dbus_message_unref (reply);
-
- fd = _g_dbus_connection_get_fd_sync (connection, fd_id);
- if (fd == -1)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Didn't get stream file descriptor"));
- return NULL;
- }
-
- return g_daemon_file_output_stream_new (fd, can_seek, initial_offset);
-}
-
-static GFileOutputStream *
-g_daemon_file_create (GFile *file,
- GFileCreateFlags flags,
- GCancellable *cancellable,
- GError **error)
-{
- DBusConnection *connection;
- int fd;
- DBusMessage *reply;
- guint32 fd_id;
- dbus_bool_t can_seek;
- guint16 mode;
- guint64 initial_offset;
- dbus_bool_t make_backup;
- char *etag;
- guint32 dbus_flags;
-
- mode = 0;
- etag = "";
- make_backup = FALSE;
- dbus_flags = flags;
-
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_OPEN_FOR_WRITE,
- NULL, &connection,
- cancellable, error,
- DBUS_TYPE_UINT16, &mode,
- DBUS_TYPE_STRING, &etag,
- DBUS_TYPE_BOOLEAN, &make_backup,
- DBUS_TYPE_UINT32, &dbus_flags,
- 0);
- if (reply == NULL)
- return NULL;
-
- if (!dbus_message_get_args (reply, NULL,
- DBUS_TYPE_UINT32, &fd_id,
- DBUS_TYPE_BOOLEAN, &can_seek,
- DBUS_TYPE_UINT64, &initial_offset,
- DBUS_TYPE_INVALID))
- {
- dbus_message_unref (reply);
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from open"));
- return NULL;
- }
-
- dbus_message_unref (reply);
-
- fd = _g_dbus_connection_get_fd_sync (connection, fd_id);
- if (fd == -1)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Didn't get stream file descriptor"));
- return NULL;
- }
-
- return g_daemon_file_output_stream_new (fd, can_seek, initial_offset);
-}
-
-static GFileOutputStream *
-g_daemon_file_replace (GFile *file,
- const char *etag,
- gboolean make_backup,
- GFileCreateFlags flags,
- GCancellable *cancellable,
- GError **error)
-{
- DBusConnection *connection;
- int fd;
- DBusMessage *reply;
- guint32 fd_id;
- dbus_bool_t can_seek;
- guint16 mode;
- guint64 initial_offset;
- dbus_bool_t dbus_make_backup;
- guint32 dbus_flags;
-
- mode = 2;
- dbus_make_backup = make_backup;
- dbus_flags = flags;
-
- if (etag == NULL)
- etag = "";
-
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_OPEN_FOR_WRITE,
- NULL, &connection,
- cancellable, error,
- DBUS_TYPE_UINT16, &mode,
- DBUS_TYPE_STRING, &etag,
- DBUS_TYPE_BOOLEAN, &dbus_make_backup,
- DBUS_TYPE_UINT32, &dbus_flags,
- 0);
- if (reply == NULL)
- return NULL;
-
- if (!dbus_message_get_args (reply, NULL,
- DBUS_TYPE_UINT32, &fd_id,
- DBUS_TYPE_BOOLEAN, &can_seek,
- DBUS_TYPE_UINT64, &initial_offset,
- DBUS_TYPE_INVALID))
- {
- dbus_message_unref (reply);
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from open"));
- return NULL;
- }
-
- dbus_message_unref (reply);
-
- fd = _g_dbus_connection_get_fd_sync (connection, fd_id);
- if (fd == -1)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Didn't get stream file descriptor"));
- return NULL;
- }
-
- return g_daemon_file_output_stream_new (fd, can_seek, initial_offset);
-}
-
-static void
-mount_mountable_location_mounted_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GSimpleAsyncResult *result = user_data;
- GError *error = NULL;
-
- if (!g_file_mount_enclosing_volume_finish (G_FILE (source_object), res, &error))
- {
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- }
-
- g_simple_async_result_complete (result);
- g_object_unref (result);
-
-}
-
-static void
-mount_mountable_async_cb (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data)
-{
- GMountOperation *mount_operation = callback_data;
- GMountSpec *mount_spec;
- char *path;
- DBusMessageIter iter;
- GFile *file;
- dbus_bool_t must_mount_location, is_uri;
-
- path = NULL;
-
- dbus_message_iter_init (reply, &iter);
-
- if (!_g_dbus_message_iter_get_args (&iter, NULL,
- DBUS_TYPE_BOOLEAN, &is_uri,
- G_DBUS_TYPE_CSTRING, &path,
- DBUS_TYPE_BOOLEAN, &must_mount_location,
- 0))
- {
- g_simple_async_result_set_error (result,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from call"));
- g_simple_async_result_complete (result);
-
- return;
- }
-
- if (is_uri)
- {
- file = g_file_new_for_uri (path);
- }
- else
- {
- mount_spec = g_mount_spec_from_dbus (&iter);
- if (mount_spec == NULL)
- {
- g_simple_async_result_set_error (result,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from call"));
- g_simple_async_result_complete (result);
- return;
- }
-
- file = g_daemon_file_new (mount_spec, path);
- g_mount_spec_unref (mount_spec);
- }
-
- g_free (path);
- g_simple_async_result_set_op_res_gpointer (result, file, g_object_unref);
-
- if (must_mount_location)
- {
- g_file_mount_enclosing_volume (file,
- 0,
- mount_operation,
- cancellable,
- mount_mountable_location_mounted_cb,
- g_object_ref (result));
-
- }
- else
- g_simple_async_result_complete (result);
-}
-
-static void
-g_daemon_file_mount_mountable (GFile *file,
- GMountMountFlags flags,
- GMountOperation *mount_operation,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GMountSource *mount_source;
- const char *dbus_id, *obj_path;
-
- mount_source = g_mount_operation_dbus_wrap (mount_operation, _g_daemon_vfs_get_async_bus ());
-
- dbus_id = g_mount_source_get_dbus_id (mount_source);
- obj_path = g_mount_source_get_obj_path (mount_source);
-
- if (mount_operation)
- g_object_ref (mount_operation);
-
- do_async_path_call (file,
- G_VFS_DBUS_MOUNT_OP_MOUNT_MOUNTABLE,
- cancellable,
- callback, user_data,
- mount_mountable_async_cb,
- mount_operation, mount_operation ? g_object_unref : NULL,
- DBUS_TYPE_STRING, &dbus_id,
- DBUS_TYPE_OBJECT_PATH, &obj_path,
- 0);
-
- g_object_unref (mount_source);
-}
-
-static GFile *
-g_daemon_file_mount_mountable_finish (GFile *file,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
- GFile *result_file;
-
- result_file = g_simple_async_result_get_op_res_gpointer (simple);
- if (result_file)
- return g_object_ref (result_file);
-
- return NULL;
-}
-
-static void
-eject_mountable_async_cb (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data)
-{
- g_simple_async_result_complete (result);
-}
-
-static void
-g_daemon_file_eject_mountable (GFile *file,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- guint32 dbus_flags;
-
- dbus_flags = flags;
- do_async_path_call (file,
- G_VFS_DBUS_MOUNT_OP_EJECT_MOUNTABLE,
- cancellable,
- callback, user_data,
- eject_mountable_async_cb,
- NULL, NULL,
- DBUS_TYPE_UINT32, &dbus_flags,
- 0);
-}
-
-static gboolean
-g_daemon_file_eject_mountable_finish (GFile *file,
- GAsyncResult *result,
- GError **error)
-{
- return TRUE;
-}
-
-static void
-unmount_mountable_async_cb (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data)
-{
- g_simple_async_result_complete (result);
-}
-
-static void
-g_daemon_file_unmount_mountable (GFile *file,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- guint32 dbus_flags;
-
- dbus_flags = flags;
- do_async_path_call (file,
- G_VFS_DBUS_MOUNT_OP_UNMOUNT_MOUNTABLE,
- cancellable,
- callback, user_data,
- unmount_mountable_async_cb,
- NULL, NULL,
- DBUS_TYPE_UINT32, &dbus_flags,
- 0);
-}
-
-static gboolean
-g_daemon_file_unmount_mountable_finish (GFile *file,
- GAsyncResult *result,
- GError **error)
-{
- return TRUE;
-}
-
-
-typedef struct {
- GFile *file;
- GMountOperation *mount_operation;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} MountData;
-
-static void g_daemon_file_mount_enclosing_volume (GFile *location,
- GMountMountFlags flags,
- GMountOperation *mount_operation,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-static void
-mount_reply (DBusMessage *reply,
- GError *error,
- gpointer user_data)
-{
- MountData *data = user_data;
- GSimpleAsyncResult *res;
-
- if (reply == NULL)
- {
- res = g_simple_async_result_new_from_error (G_OBJECT (data->file),
- data->callback,
- data->user_data,
- error);
- }
- else
- {
- res = g_simple_async_result_new (G_OBJECT (data->file),
- data->callback,
- data->user_data,
- g_daemon_file_mount_enclosing_volume);
- }
-
- g_simple_async_result_complete (res);
-
- g_object_unref (data->file);
- if (data->mount_operation)
- g_object_unref (data->mount_operation);
- g_free (data);
-}
-
-static void
-g_daemon_file_mount_enclosing_volume (GFile *location,
- GMountMountFlags flags,
- GMountOperation *mount_operation,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GDaemonFile *daemon_file;
- DBusMessage *message;
- GMountSpec *spec;
- GMountSource *mount_source;
- DBusMessageIter iter;
- MountData *data;
-
- daemon_file = G_DAEMON_FILE (location);
-
- message = dbus_message_new_method_call (G_VFS_DBUS_DAEMON_NAME,
- G_VFS_DBUS_MOUNTTRACKER_PATH,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_MOUNT_LOCATION);
-
- spec = g_mount_spec_copy (daemon_file->mount_spec);
- g_mount_spec_set_mount_prefix (spec, daemon_file->path);
- dbus_message_iter_init_append (message, &iter);
- g_mount_spec_to_dbus (&iter, spec);
- g_mount_spec_unref (spec);
-
- mount_source = g_mount_operation_dbus_wrap (mount_operation, _g_daemon_vfs_get_async_bus ());
- g_mount_source_to_dbus (mount_source, message);
- g_object_unref (mount_source);
-
- data = g_new0 (MountData, 1);
- data->callback = callback;
- data->user_data = user_data;
- data->file = g_object_ref (location);
- if (mount_operation)
- data->mount_operation = g_object_ref (mount_operation);
-
- /* TODO: Ignoring cancellable here */
- _g_dbus_connection_call_async (_g_daemon_vfs_get_async_bus (),
- message,
- G_VFS_DBUS_MOUNT_TIMEOUT_MSECS,
- mount_reply, data);
-
- dbus_message_unref (message);
-}
-
-static gboolean
-g_daemon_file_mount_enclosing_volume_finish (GFile *location,
- GAsyncResult *result,
- GError **error)
-{
- /* Errors handled in generic code */
- return TRUE;
-}
-
-static GFileInfo *
-g_daemon_file_query_filesystem_info (GFile *file,
- const char *attributes,
- GCancellable *cancellable,
- GError **error)
-{
- DBusMessage *reply;
- DBusMessageIter iter;
- GFileInfo *info;
-
- if (attributes == NULL)
- attributes = "";
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_QUERY_FILESYSTEM_INFO,
- NULL, NULL,
- cancellable, error,
- DBUS_TYPE_STRING, &attributes,
- 0);
- if (reply == NULL)
- return NULL;
-
- info = NULL;
-
- if (!dbus_message_iter_init (reply, &iter) ||
- (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRUCT))
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from get_filesystem_info"));
- goto out;
- }
-
- info = _g_dbus_get_file_info (&iter, error);
-
- out:
- dbus_message_unref (reply);
- return info;
-}
-
-static void
-query_fs_info_async_cb (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data)
-{
- DBusMessageIter iter;
- GFileInfo *info;
- GError *error;
-
- info = NULL;
-
- if (!dbus_message_iter_init (reply, &iter) ||
- (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRUCT))
- {
- g_simple_async_result_set_error (result,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from query_info"));
- g_simple_async_result_complete (result);
- return;
- }
-
- error = NULL;
- info = _g_dbus_get_file_info (&iter, &error);
- if (info == NULL)
- {
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- g_simple_async_result_complete (result);
- return;
- }
-
- g_simple_async_result_set_op_res_gpointer (result, info, g_object_unref);
- g_simple_async_result_complete (result);
-}
-
-static void
-g_daemon_file_query_filesystem_info_async (GFile *file,
- const char *attributes,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- do_async_path_call (file,
- G_VFS_DBUS_MOUNT_OP_QUERY_FILESYSTEM_INFO,
- cancellable,
- callback, user_data,
- query_fs_info_async_cb, NULL, NULL,
- DBUS_TYPE_STRING, &attributes,
- 0);
-}
-
-static GFileInfo *
-g_daemon_file_query_filesystem_info_finish (GFile *file,
- GAsyncResult *res,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GFileInfo *info;
-
- info = g_simple_async_result_get_op_res_gpointer (simple);
- if (info)
- return g_object_ref (info);
-
- return NULL;
-}
-
-static GMount *
-g_daemon_file_find_enclosing_mount (GFile *file,
- GCancellable *cancellable,
- GError **error)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
- GMountInfo *mount_info;
- GDaemonMount *mount;
-
- mount_info = _g_daemon_vfs_get_mount_info_sync (daemon_file->mount_spec,
- daemon_file->path,
- error);
- if (mount_info == NULL)
- return NULL;
-
- if (mount_info->user_visible)
- {
- /* if we have a daemon volume monitor then return one of it's mounts */
- mount = g_daemon_volume_monitor_find_mount_by_mount_info (mount_info);
- if (mount == NULL)
- {
- mount = g_daemon_mount_new (mount_info, NULL);
- }
- g_mount_info_unref (mount_info);
-
- if (mount)
- return G_MOUNT (mount);
- }
-
- g_set_error_literal (error, G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- /* translators: this is an error message when there is no user visible "mount" object
- corresponding to a particular path/uri */
- _("Could not find enclosing mount"));
- return NULL;
-}
-
-static GFile *
-g_daemon_file_get_child_for_display_name (GFile *file,
- const char *display_name,
- GError **error)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
- GMountInfo *mount_info;
- char *basename;
- GFile *child;
-
- mount_info = _g_daemon_vfs_get_mount_info_sync (daemon_file->mount_spec,
- daemon_file->path,
- NULL);
-
-
- if (mount_info && mount_info->prefered_filename_encoding)
- {
- basename = g_convert (display_name, -1,
- mount_info->prefered_filename_encoding,
- "UTF-8",
- NULL, NULL,
- NULL);
- if (basename == NULL)
- {
- g_set_error (error, G_IO_ERROR,
- G_IO_ERROR_INVALID_FILENAME,
- _("Invalid filename %s"), display_name);
- return NULL;
- }
-
- child = g_file_get_child (file, basename);
- g_free (basename);
- }
- else
- child = g_file_get_child (file, display_name);
-
- return child;
-}
-
-static GFile *
-g_daemon_file_set_display_name (GFile *file,
- const char *display_name,
- GCancellable *cancellable,
- GError **error)
-{
- GDaemonFile *daemon_file;
- DBusMessage *reply;
- DBusMessageIter iter;
- char *new_path;
-
- daemon_file = G_DAEMON_FILE (file);
-
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_SET_DISPLAY_NAME,
- NULL, NULL,
- cancellable, error,
- DBUS_TYPE_STRING, &display_name,
- 0);
- if (reply == NULL)
- return NULL;
-
-
- if (!dbus_message_iter_init (reply, &iter) ||
- !_g_dbus_message_iter_get_args (&iter, NULL,
- G_DBUS_TYPE_CSTRING, &new_path,
- 0))
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from query_filesystem_info"));
- goto out;
- }
-
- file = new_file_for_new_path (daemon_file, new_path);
- g_free (new_path);
-
- out:
- dbus_message_unref (reply);
- return file;
-}
-
-static gboolean
-g_daemon_file_delete (GFile *file,
- GCancellable *cancellable,
- GError **error)
-{
- DBusMessage *reply;
-
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_DELETE,
- NULL, NULL,
- cancellable, error,
- 0);
- if (reply == NULL)
- return FALSE;
-
- dbus_message_unref (reply);
- return TRUE;
-}
-
-static gboolean
-g_daemon_file_trash (GFile *file,
- GCancellable *cancellable,
- GError **error)
-{
- DBusMessage *reply;
-
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_TRASH,
- NULL, NULL,
- cancellable, error,
- 0);
- if (reply == NULL)
- return FALSE;
-
- dbus_message_unref (reply);
- return TRUE;
-}
-
-static gboolean
-g_daemon_file_make_directory (GFile *file,
- GCancellable *cancellable,
- GError **error)
-{
- DBusMessage *reply;
-
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_MAKE_DIRECTORY,
- NULL, NULL,
- cancellable, error,
- 0);
- if (reply == NULL)
- return FALSE;
-
- dbus_message_unref (reply);
- return TRUE;
-}
-
-static gboolean
-g_daemon_file_make_symbolic_link (GFile *file,
- const char *symlink_value,
- GCancellable *cancellable,
- GError **error)
-{
- DBusMessage *reply;
-
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_MAKE_SYMBOLIC_LINK,
- NULL, NULL,
- cancellable, error,
- G_DBUS_TYPE_CSTRING, &symlink_value,
- 0);
- if (reply == NULL)
- return FALSE;
-
- dbus_message_unref (reply);
- return TRUE;
-}
-
-static GFileAttributeInfoList *
-g_daemon_file_query_settable_attributes (GFile *file,
- GCancellable *cancellable,
- GError **error)
-{
- DBusMessage *reply;
- GFileAttributeInfoList *list;
- DBusMessageIter iter;
-
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_QUERY_SETTABLE_ATTRIBUTES,
- NULL, NULL,
- cancellable, error,
- 0);
- if (reply == NULL)
- return NULL;
-
- dbus_message_iter_init (reply, &iter);
- list = _g_dbus_get_attribute_info_list (&iter, error);
-
- dbus_message_unref (reply);
-
- return list;
-}
-
-static GFileAttributeInfoList *
-g_daemon_file_query_writable_namespaces (GFile *file,
- GCancellable *cancellable,
- GError **error)
-{
- DBusMessage *reply;
- GFileAttributeInfoList *list;
- DBusMessageIter iter;
-
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_QUERY_WRITABLE_NAMESPACES,
- NULL, NULL,
- cancellable, error,
- 0);
- if (reply == NULL)
- return NULL;
-
- dbus_message_iter_init (reply, &iter);
- list = _g_dbus_get_attribute_info_list (&iter, error);
-
- dbus_message_unref (reply);
-
- return list;
-
-}
-
-static gboolean
-g_daemon_file_set_attribute (GFile *file,
- const char *attribute,
- GFileAttributeType type,
- gpointer value_p,
- GFileQueryInfoFlags flags,
- GCancellable *cancellable,
- GError **error)
-{
- DBusMessage *message, *reply;
- DBusMessageIter iter;
- dbus_uint32_t flags_dbus;
- GError *my_error;
-
- retry:
-
- message = create_empty_message (file, G_VFS_DBUS_MOUNT_OP_SET_ATTRIBUTE, NULL, error);
- if (!message)
- return FALSE;
-
- dbus_message_iter_init_append (message, &iter);
-
- flags_dbus = flags;
- dbus_message_iter_append_basic (&iter,
- DBUS_TYPE_UINT32,
- &flags_dbus);
-
- _g_dbus_append_file_attribute (&iter, attribute, type, value_p);
-
- my_error = NULL;
- reply = _g_vfs_daemon_call_sync (message,
- NULL,
- NULL, NULL, NULL,
- cancellable, &my_error);
-
- dbus_message_unref (message);
-
- if (reply == NULL)
- {
- if (g_error_matches (my_error, G_VFS_ERROR, G_VFS_ERROR_RETRY))
- {
- g_error_free (my_error);
- goto retry;
- }
- g_propagate_error (error, my_error);
- return FALSE;
- }
-
- dbus_message_unref (reply);
- return TRUE;
-}
-
-struct ProgressCallbackData {
- GFileProgressCallback progress_callback;
- gpointer progress_callback_data;
-};
-
-static DBusHandlerResult
-progress_callback_message (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
-{
- struct ProgressCallbackData *data = user_data;
- dbus_uint64_t current_dbus, total_dbus;
-
- if (dbus_message_is_method_call (message,
- G_VFS_DBUS_PROGRESS_INTERFACE,
- G_VFS_DBUS_PROGRESS_OP_PROGRESS))
- {
- if (dbus_message_get_args (message, NULL,
- DBUS_TYPE_UINT64, &current_dbus,
- DBUS_TYPE_UINT64, &total_dbus,
- 0))
- data->progress_callback (current_dbus, total_dbus, data->progress_callback_data);
- }
- else
- g_warning ("Unknown progress callback message type\n");
-
- /* TODO: demarshal args and call reall callback */
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static gboolean
-file_transfer (GFile *source,
- GFile *destination,
- GFileCopyFlags flags,
- gboolean remove_source,
- GCancellable *cancellable,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data,
- GError **error)
-{
- DBusMessage *reply;
- char *obj_path, *dbus_obj_path;
- dbus_uint32_t flags_dbus;
- dbus_bool_t dbus_remove_source;
- struct ProgressCallbackData data;
- char *local_path = NULL;
- gboolean source_is_daemon;
- gboolean dest_is_daemon;
- gboolean native_transfer;
-
- native_transfer = FALSE;
- source_is_daemon = G_IS_DAEMON_FILE (source);
- dest_is_daemon = G_IS_DAEMON_FILE (destination);
-
- if (source_is_daemon && dest_is_daemon)
- native_transfer = TRUE;
- else if (dest_is_daemon && !source_is_daemon)
- local_path = g_file_get_path (source);
- else if (source_is_daemon && !dest_is_daemon)
- local_path = g_file_get_path (destination);
- else
- {
- /* Fall back to default copy/move */
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- "Operation not supported");
- return FALSE;
- }
-
- if (!native_transfer && local_path == NULL)
- {
- /* This will cause the fallback code to be involved */
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported, files on different mounts"));
- return FALSE;
-
- }
-
- if (progress_callback)
- {
- obj_path = g_strdup_printf ("/org/gtk/vfs/callback/%p", &obj_path);
- dbus_obj_path = obj_path;
- }
- else
- {
- obj_path = NULL;
- /* Can't pass NULL obj path as arg */
- dbus_obj_path = "/org/gtk/vfs/void";
- }
-
- data.progress_callback = progress_callback;
- data.progress_callback_data = progress_callback_data;
-
- flags_dbus = flags;
- dbus_remove_source = remove_source;
-
- if (native_transfer == TRUE)
- {
- const char *method_string;
-
- if (remove_source == FALSE)
- method_string = G_VFS_DBUS_MOUNT_OP_COPY;
- else
- method_string = G_VFS_DBUS_MOUNT_OP_MOVE;
-
- reply = do_sync_2_path_call (source, destination,
- method_string,
- obj_path, progress_callback_message, &data,
- NULL, cancellable, error,
- DBUS_TYPE_UINT32, &flags_dbus,
- DBUS_TYPE_OBJECT_PATH, &dbus_obj_path,
- 0);
- }
- else if (dest_is_daemon == TRUE)
- {
- reply = do_sync_2_path_call (destination, NULL,
- G_VFS_DBUS_MOUNT_OP_PUSH,
- obj_path, progress_callback_message, &data,
- NULL, cancellable, error,
- G_DBUS_TYPE_CSTRING, &local_path,
- DBUS_TYPE_UINT32, &flags_dbus,
- DBUS_TYPE_OBJECT_PATH, &dbus_obj_path,
- DBUS_TYPE_BOOLEAN, &dbus_remove_source,
- 0);
- }
- else
- {
- reply = do_sync_2_path_call (source, NULL,
- G_VFS_DBUS_MOUNT_OP_PULL,
- obj_path, progress_callback_message, &data,
- NULL, cancellable, error,
- G_DBUS_TYPE_CSTRING, &local_path,
- DBUS_TYPE_UINT32, &flags_dbus,
- DBUS_TYPE_OBJECT_PATH, &dbus_obj_path,
- DBUS_TYPE_BOOLEAN, &dbus_remove_source,
- 0);
-
- }
-
- g_free (local_path);
- g_free (obj_path);
-
- if (reply == NULL)
- return FALSE;
-
- dbus_message_unref (reply);
- return TRUE;
-}
-
-static gboolean
-g_daemon_file_copy (GFile *source,
- GFile *destination,
- GFileCopyFlags flags,
- GCancellable *cancellable,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data,
- GError **error)
-{
- gboolean result;
-
- result = file_transfer (source,
- destination,
- flags,
- FALSE,
- cancellable,
- progress_callback,
- progress_callback_data,
- error);
-
- return result;
-}
-
-static gboolean
-g_daemon_file_move (GFile *source,
- GFile *destination,
- GFileCopyFlags flags,
- GCancellable *cancellable,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data,
- GError **error)
-{
- gboolean result;
-
- result = file_transfer (source,
- destination,
- flags,
- TRUE,
- cancellable,
- progress_callback,
- progress_callback_data,
- error);
-
- return result;
-}
-
-static GFileMonitor*
-g_daemon_file_monitor_dir (GFile* file,
- GFileMonitorFlags flags,
- GCancellable *cancellable,
- GError **error)
-{
- GFileMonitor *monitor;
- char *obj_path;
- dbus_uint32_t flags_dbus;
- GMountInfo *mount_info;
- DBusMessage *reply;
-
- flags_dbus = flags;
-
- mount_info = NULL;
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_CREATE_DIR_MONITOR,
- &mount_info, NULL,
- cancellable, error,
- DBUS_TYPE_UINT32, &flags_dbus,
- 0);
-
- if (reply == NULL)
- {
- if (mount_info)
- g_mount_info_unref (mount_info);
- return NULL;
- }
-
- if (!dbus_message_get_args (reply, NULL,
- DBUS_TYPE_OBJECT_PATH, &obj_path,
- DBUS_TYPE_INVALID))
- {
- g_mount_info_unref (mount_info);
- dbus_message_unref (reply);
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from monitor_dir"));
- return NULL;
- }
-
- monitor = g_daemon_file_monitor_new (mount_info->dbus_id,
- obj_path);
-
- g_mount_info_unref (mount_info);
- dbus_message_unref (reply);
-
- return monitor;
-}
-
-static GFileMonitor*
-g_daemon_file_monitor_file (GFile* file,
- GFileMonitorFlags flags,
- GCancellable *cancellable,
- GError **error)
-{
- GFileMonitor *monitor;
- char *obj_path;
- dbus_uint32_t flags_dbus;
- GMountInfo *mount_info;
- DBusMessage *reply;
-
- flags_dbus = flags;
-
- mount_info = NULL;
- reply = do_sync_path_call (file,
- G_VFS_DBUS_MOUNT_OP_CREATE_FILE_MONITOR,
- &mount_info, NULL,
- cancellable, error,
- DBUS_TYPE_UINT32, &flags_dbus,
- 0);
-
- if (reply == NULL)
- {
- if (mount_info)
- g_mount_info_unref (mount_info);
- return NULL;
- }
-
- if (!dbus_message_get_args (reply, NULL,
- DBUS_TYPE_OBJECT_PATH, &obj_path,
- DBUS_TYPE_INVALID))
- {
- g_mount_info_unref (mount_info);
- dbus_message_unref (reply);
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid return value from monitor_file"));
- return NULL;
- }
-
- monitor = g_daemon_file_monitor_new (mount_info->dbus_id,
- obj_path);
-
- g_mount_info_unref (mount_info);
- dbus_message_unref (reply);
-
- return monitor;
-}
-
-typedef struct
-{
- GSimpleAsyncResult *result;
- dbus_bool_t can_seek;
- guint64 initial_offset;
-}
-StreamOpenParams;
-
-static void
-stream_open_cb (gint fd, StreamOpenParams *params)
-{
- GFileOutputStream *output_stream;
-
- if (fd == -1)
- {
- g_simple_async_result_set_error (params->result, G_IO_ERROR, G_IO_ERROR_FAILED,
- "%s", _("Didn't get stream file descriptor"));
- goto out;
- }
-
- output_stream = g_daemon_file_output_stream_new (fd, params->can_seek, params->initial_offset);
- g_simple_async_result_set_op_res_gpointer (params->result, output_stream, g_object_unref);
-
-out:
- g_simple_async_result_complete (params->result);
- g_object_unref (params->result);
- g_slice_free (StreamOpenParams, params);
-}
-
-static void
-append_to_async_cb (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data)
-{
- guint32 fd_id;
- StreamOpenParams *open_params;
-
- open_params = g_slice_new0 (StreamOpenParams);
-
- if (!dbus_message_get_args (reply, NULL,
- DBUS_TYPE_UINT32, &fd_id,
- DBUS_TYPE_BOOLEAN, &open_params->can_seek,
- DBUS_TYPE_UINT64, &open_params->initial_offset,
- DBUS_TYPE_INVALID))
- {
- g_simple_async_result_set_error (result, G_IO_ERROR, G_IO_ERROR_FAILED,
- "%s", _("Invalid return value from open"));
- goto failure;
- }
-
- open_params->result = g_object_ref (result);
- _g_dbus_connection_get_fd_async (connection, fd_id,
- (GetFdAsyncCallback) stream_open_cb, open_params);
- return;
-
-failure:
- g_slice_free (StreamOpenParams, open_params);
- g_simple_async_result_complete (result);
-}
-
-static void
-g_daemon_file_append_to_async (GFile *file,
- GFileCreateFlags flags,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- guint16 mode;
- dbus_bool_t make_backup;
- guint32 dbus_flags;
- char *etag;
-
- mode = 1;
- etag = "";
- make_backup = FALSE;
- dbus_flags = flags;
-
- do_async_path_call (file,
- G_VFS_DBUS_MOUNT_OP_OPEN_FOR_WRITE,
- cancellable,
- callback, user_data,
- append_to_async_cb, NULL, NULL,
- DBUS_TYPE_UINT16, &mode,
- DBUS_TYPE_STRING, &etag,
- DBUS_TYPE_BOOLEAN, &make_backup,
- DBUS_TYPE_UINT32, &dbus_flags,
- 0);
-}
-
-static GFileOutputStream *
-g_daemon_file_append_to_finish (GFile *file,
- GAsyncResult *res,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GFileOutputStream *output_stream;
-
- output_stream = g_simple_async_result_get_op_res_gpointer (simple);
- if (output_stream)
- return g_object_ref (output_stream);
-
- return NULL;
-}
-
-static void
-create_async_cb (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data)
-{
- guint32 fd_id;
- StreamOpenParams *open_params;
-
- open_params = g_slice_new0 (StreamOpenParams);
-
- if (!dbus_message_get_args (reply, NULL,
- DBUS_TYPE_UINT32, &fd_id,
- DBUS_TYPE_BOOLEAN, &open_params->can_seek,
- DBUS_TYPE_UINT64, &open_params->initial_offset,
- DBUS_TYPE_INVALID))
- {
- g_simple_async_result_set_error (result, G_IO_ERROR, G_IO_ERROR_FAILED,
- "%s", _("Invalid return value from open"));
- goto failure;
- }
-
- open_params->result = g_object_ref (result);
- _g_dbus_connection_get_fd_async (connection, fd_id,
- (GetFdAsyncCallback) stream_open_cb, open_params);
- return;
-
-failure:
- g_slice_free (StreamOpenParams, open_params);
- g_simple_async_result_complete (result);
-}
-
-static void
-g_daemon_file_create_async (GFile *file,
- GFileCreateFlags flags,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- guint16 mode;
- dbus_bool_t make_backup;
- char *etag;
- guint32 dbus_flags;
-
- mode = 0;
- etag = "";
- make_backup = FALSE;
- dbus_flags = flags;
-
- do_async_path_call (file,
- G_VFS_DBUS_MOUNT_OP_OPEN_FOR_WRITE,
- cancellable,
- callback, user_data,
- create_async_cb, NULL, NULL,
- DBUS_TYPE_UINT16, &mode,
- DBUS_TYPE_STRING, &etag,
- DBUS_TYPE_BOOLEAN, &make_backup,
- DBUS_TYPE_UINT32, &dbus_flags,
- 0);
-}
-
-static GFileOutputStream *
-g_daemon_file_create_finish (GFile *file,
- GAsyncResult *res,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GFileOutputStream *output_stream;
-
- output_stream = g_simple_async_result_get_op_res_gpointer (simple);
- if (output_stream)
- return g_object_ref (output_stream);
-
- return NULL;
-}
-
-static void
-enumerate_children_async_cb (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data)
-{
- GDaemonFileEnumerator *enumerator = callback_data;
-
- if (reply == NULL || connection == NULL)
- {
- g_simple_async_result_set_error (result, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Invalid return value from enumerate_children");
- goto out;
- }
-
- g_object_ref (enumerator);
-
- g_simple_async_result_set_op_res_gpointer (result, enumerator, g_object_unref);
-
-out:
- g_simple_async_result_complete (result);
-}
-
-static void
-g_daemon_file_enumerate_children_async (GFile *file,
- const char *attributes,
- GFileQueryInfoFlags flags,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- dbus_uint32_t flags_dbus;
- char *obj_path;
- GDaemonFileEnumerator *enumerator;
- char *uri;
-
- enumerator = g_daemon_file_enumerator_new (file);
- obj_path = g_daemon_file_enumerator_get_object_path (enumerator);
-
- uri = g_file_get_uri (file);
-
- if (attributes == NULL)
- attributes = "";
- flags_dbus = flags;
- do_async_path_call (file,
- G_VFS_DBUS_MOUNT_OP_ENUMERATE,
- cancellable,
- callback, user_data,
- enumerate_children_async_cb, enumerator, g_object_unref,
- DBUS_TYPE_STRING, &obj_path,
- DBUS_TYPE_STRING, &attributes,
- DBUS_TYPE_UINT32, &flags_dbus,
- DBUS_TYPE_STRING, &uri,
- 0);
- g_free (uri);
- g_free (obj_path);
-}
-
-static GFileEnumerator *
-g_daemon_file_enumerate_children_finish (GFile *file,
- GAsyncResult *res,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GDaemonFileEnumerator *enumerator;
-
- enumerator = g_simple_async_result_get_op_res_gpointer (simple);
- if (enumerator)
- return g_object_ref (enumerator);
-
- return NULL;
-}
-
-typedef struct
-{
- GFile *file;
- GSimpleAsyncResult *result;
- GCancellable *cancellable;
-}
-FindEnclosingMountData;
-
-static void
-find_enclosing_mount_cb (GMountInfo *mount_info,
- gpointer user_data,
- GError *error)
-{
- FindEnclosingMountData *data = user_data;
- GError *my_error = NULL;
-
- if (data->cancellable && g_cancellable_set_error_if_cancelled (data->cancellable, &my_error))
- {
- g_simple_async_result_set_from_error (data->result, my_error);
- goto out;
- }
-
- if (error)
- {
- g_simple_async_result_set_from_error (data->result, error);
- goto out;
- }
-
- if (!mount_info)
- {
- g_simple_async_result_set_error (data->result, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Internal error: \"%s\"",
- "No error but no mount info from g_daemon_vfs_get_mount_info_async");
- goto out;
- }
-
- if (mount_info->user_visible)
- {
- GDaemonMount *mount;
-
- /* if we have a daemon volume monitor then return one of it's mounts */
- mount = g_daemon_volume_monitor_find_mount_by_mount_info (mount_info);
- if (mount == NULL)
- mount = g_daemon_mount_new (mount_info, NULL);
-
- if (mount)
- g_simple_async_result_set_op_res_gpointer (data->result, mount, g_object_unref);
- else
- g_simple_async_result_set_error (data->result, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Internal error: \"%s\"",
- "Mount info did not yield a mount");
- }
-
-out:
- g_simple_async_result_complete (data->result);
-
- if (my_error)
- g_error_free (my_error);
- if (data->cancellable)
- g_object_unref (data->cancellable);
- g_object_unref (data->file);
- g_object_unref (data->result);
- g_free (data);
-}
-
-static void
-g_daemon_file_find_enclosing_mount_async (GFile *file,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GDaemonFile *daemon_file = G_DAEMON_FILE (file);
- FindEnclosingMountData *data;
-
- data = g_new0 (FindEnclosingMountData, 1);
-
- data->result = g_simple_async_result_new (G_OBJECT (file),
- callback, user_data,
- NULL);
- data->file = g_object_ref (file);
-
- if (cancellable)
- data->cancellable = g_object_ref (cancellable);
-
- _g_daemon_vfs_get_mount_info_async (daemon_file->mount_spec,
- daemon_file->path,
- find_enclosing_mount_cb,
- data);
-}
-
-static GMount *
-g_daemon_file_find_enclosing_mount_finish (GFile *file,
- GAsyncResult *res,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GMount *mount;
-
- mount = g_simple_async_result_get_op_res_gpointer (simple);
- if (mount)
- return g_object_ref (mount);
-
- return NULL;
-}
-
-static void
-replace_async_cb (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data)
-{
- guint32 fd_id;
- StreamOpenParams *open_params;
-
- open_params = g_slice_new0 (StreamOpenParams);
-
- if (!dbus_message_get_args (reply, NULL,
- DBUS_TYPE_UINT32, &fd_id,
- DBUS_TYPE_BOOLEAN, &open_params->can_seek,
- DBUS_TYPE_UINT64, &open_params->initial_offset,
- DBUS_TYPE_INVALID))
- {
- g_simple_async_result_set_error (result, G_IO_ERROR, G_IO_ERROR_FAILED,
- "%s", _("Invalid return value from open"));
- goto failure;
- }
-
- open_params->result = g_object_ref (result);
- _g_dbus_connection_get_fd_async (connection, fd_id,
- (GetFdAsyncCallback) stream_open_cb, open_params);
- return;
-
-failure:
- g_slice_free (StreamOpenParams, open_params);
- g_simple_async_result_complete (result);
-}
-
-static void
-g_daemon_file_replace_async (GFile *file,
- const char *etag,
- gboolean make_backup,
- GFileCreateFlags flags,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- dbus_bool_t dbus_make_backup = make_backup;
- guint32 dbus_flags = flags;
- guint16 mode = 2;
-
- if (etag == NULL)
- etag = "";
-
- do_async_path_call (file,
- G_VFS_DBUS_MOUNT_OP_OPEN_FOR_WRITE,
- cancellable,
- callback, user_data,
- replace_async_cb, NULL, NULL,
- DBUS_TYPE_UINT16, &mode,
- DBUS_TYPE_STRING, &etag,
- DBUS_TYPE_BOOLEAN, &dbus_make_backup,
- DBUS_TYPE_UINT32, &dbus_flags,
- 0);
-}
-
-static GFileOutputStream *
-g_daemon_file_replace_finish (GFile *file,
- GAsyncResult *res,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GFileOutputStream *output_stream;
-
- output_stream = g_simple_async_result_get_op_res_gpointer (simple);
- if (output_stream)
- return g_object_ref (output_stream);
-
- return NULL;
-}
-
-static void
-set_display_name_async_cb (DBusMessage *reply,
- DBusConnection *connection,
- GSimpleAsyncResult *result,
- GCancellable *cancellable,
- gpointer callback_data)
-{
- GDaemonFile *daemon_file = callback_data;
- GFile *file;
- DBusMessageIter iter;
- gchar *new_path;
-
- if (!dbus_message_iter_init (reply, &iter) ||
- !_g_dbus_message_iter_get_args (&iter, NULL,
- G_DBUS_TYPE_CSTRING, &new_path,
- 0))
- {
- g_simple_async_result_set_error (result, G_IO_ERROR, G_IO_ERROR_FAILED,
- "%s", "Invalid return value from set_display_name");
- goto out;
- }
-
- file = new_file_for_new_path (daemon_file, new_path);
- g_free (new_path);
-
- g_simple_async_result_set_op_res_gpointer (result, file, g_object_unref);
-
-out:
- g_simple_async_result_complete (result);
-}
-
-static void
-g_daemon_file_set_display_name_async (GFile *file,
- const char *display_name,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- g_object_ref (file);
-
- do_async_path_call (file,
- G_VFS_DBUS_MOUNT_OP_SET_DISPLAY_NAME,
- cancellable,
- callback, user_data,
- set_display_name_async_cb, file, g_object_unref,
- DBUS_TYPE_STRING, &display_name,
- 0);
-}
-
-static GFile *
-g_daemon_file_set_display_name_finish (GFile *file,
- GAsyncResult *res,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GFile *new_file;
-
- new_file = g_simple_async_result_get_op_res_gpointer (simple);
- return new_file;
-}
-
-#if 0
-
-static void
-g_daemon_file_set_attributes_async (GFile *file,
- GFileInfo *info,
- GFileQueryInfoFlags flags,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- /* TODO */
-}
-
-static gboolean
-g_daemon_file_set_attributes_finish (GFile *file,
- GAsyncResult *result,
- GFileInfo **info,
- GError **error)
-{
- /* TODO */
-}
-
-#endif
-
-static void
-g_daemon_file_file_iface_init (GFileIface *iface)
-{
- iface->dup = g_daemon_file_dup;
- iface->hash = g_daemon_file_hash;
- iface->equal = g_daemon_file_equal;
- iface->is_native = g_daemon_file_is_native;
- iface->has_uri_scheme = g_daemon_file_has_uri_scheme;
- iface->get_uri_scheme = g_daemon_file_get_uri_scheme;
- iface->get_basename = g_daemon_file_get_basename;
- iface->get_path = g_daemon_file_get_path;
- iface->get_uri = g_daemon_file_get_uri;
- iface->get_parse_name = g_daemon_file_get_parse_name;
- iface->get_parent = g_daemon_file_get_parent;
- iface->prefix_matches = g_daemon_file_prefix_matches;
- iface->get_relative_path = g_daemon_file_get_relative_path;
- iface->resolve_relative_path = g_daemon_file_resolve_relative_path;
- iface->get_child_for_display_name = g_daemon_file_get_child_for_display_name;
- iface->enumerate_children = g_daemon_file_enumerate_children;
- iface->query_info = g_daemon_file_query_info;
- iface->query_info_async = g_daemon_file_query_info_async;
- iface->query_info_finish = g_daemon_file_query_info_finish;
- iface->find_enclosing_mount = g_daemon_file_find_enclosing_mount;
- iface->read_fn = g_daemon_file_read;
- iface->append_to = g_daemon_file_append_to;
- iface->create = g_daemon_file_create;
- iface->replace = g_daemon_file_replace;
- iface->read_async = g_daemon_file_read_async;
- iface->read_finish = g_daemon_file_read_finish;
- iface->mount_enclosing_volume = g_daemon_file_mount_enclosing_volume;
- iface->mount_enclosing_volume_finish = g_daemon_file_mount_enclosing_volume_finish;
- iface->mount_mountable = g_daemon_file_mount_mountable;
- iface->mount_mountable_finish = g_daemon_file_mount_mountable_finish;
- iface->unmount_mountable = g_daemon_file_unmount_mountable;
- iface->unmount_mountable_finish = g_daemon_file_unmount_mountable_finish;
- iface->eject_mountable = g_daemon_file_eject_mountable;
- iface->eject_mountable_finish = g_daemon_file_eject_mountable_finish;
- iface->query_filesystem_info = g_daemon_file_query_filesystem_info;
- iface->query_filesystem_info_async = g_daemon_file_query_filesystem_info_async;
- iface->query_filesystem_info_finish = g_daemon_file_query_filesystem_info_finish;
- iface->set_display_name = g_daemon_file_set_display_name;
- iface->delete_file = g_daemon_file_delete;
- iface->trash = g_daemon_file_trash;
- iface->make_directory = g_daemon_file_make_directory;
- iface->copy = g_daemon_file_copy;
- iface->move = g_daemon_file_move;
- iface->query_settable_attributes = g_daemon_file_query_settable_attributes;
- iface->query_writable_namespaces = g_daemon_file_query_writable_namespaces;
- iface->set_attribute = g_daemon_file_set_attribute;
- iface->make_symbolic_link = g_daemon_file_make_symbolic_link;
- iface->monitor_dir = g_daemon_file_monitor_dir;
- iface->monitor_file = g_daemon_file_monitor_file;
-
- /* Async operations */
-
- iface->append_to_async = g_daemon_file_append_to_async;
- iface->append_to_finish = g_daemon_file_append_to_finish;
- iface->create_async = g_daemon_file_create_async;
- iface->create_finish = g_daemon_file_create_finish;
- iface->enumerate_children_async = g_daemon_file_enumerate_children_async;
- iface->enumerate_children_finish = g_daemon_file_enumerate_children_finish;
- iface->find_enclosing_mount_async = g_daemon_file_find_enclosing_mount_async;
- iface->find_enclosing_mount_finish = g_daemon_file_find_enclosing_mount_finish;
- iface->replace_async = g_daemon_file_replace_async;
- iface->replace_finish = g_daemon_file_replace_finish;
- iface->set_display_name_async = g_daemon_file_set_display_name_async;
- iface->set_display_name_finish = g_daemon_file_set_display_name_finish;
-#if 0
- iface->set_attributes_async = g_daemon_file_set_attributes_async;
- iface->set_attributes_finish = g_daemon_file_set_attributes_finish;
-#endif
-}
diff --git a/client/gdaemonfile.h b/client/gdaemonfile.h
deleted file mode 100644
index 297066a9..00000000
--- a/client/gdaemonfile.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_DAEMON_FILE_H__
-#define __G_DAEMON_FILE_H__
-
-#include <gio/gio.h>
-#include "gdaemonvfs.h"
-#include "gmountspec.h"
-
-G_BEGIN_DECLS
-
-#define G_TYPE_DAEMON_FILE (g_daemon_file_get_type ())
-#define G_DAEMON_FILE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DAEMON_FILE, GDaemonFile))
-#define G_DAEMON_FILE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DAEMON_FILE, GDaemonFileClass))
-#define G_IS_DAEMON_FILE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DAEMON_FILE))
-#define G_IS_DAEMON_FILE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DAEMON_FILE))
-#define G_DAEMON_FILE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DAEMON_FILE, GDaemonFileClass))
-
-typedef struct _GDaemonFile GDaemonFile;
-typedef struct _GDaemonFileClass GDaemonFileClass;
-
-struct _GDaemonFileClass
-{
- GObjectClass parent_class;
-};
-
-GType g_daemon_file_get_type (void) G_GNUC_CONST;
-
-GFile * g_daemon_file_new (GMountSpec *mount_spec,
- const char *path);
-
-G_END_DECLS
-
-#endif /* __G_DAEMON_FILE_H__ */
diff --git a/client/gdaemonfileenumerator.c b/client/gdaemonfileenumerator.c
deleted file mode 100644
index 56b1488d..00000000
--- a/client/gdaemonfileenumerator.c
+++ /dev/null
@@ -1,461 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gdaemonfileenumerator.h>
-#include <gio/gio.h>
-#include <gvfsdaemondbus.h>
-#include <gvfsdaemonprotocol.h>
-
-#define OBJ_PATH_PREFIX "/org/gtk/vfs/client/enumerator/"
-
-/* atomic */
-static volatile gint path_counter = 1;
-
-G_LOCK_DEFINE_STATIC(infos);
-
-struct _GDaemonFileEnumerator
-{
- GFileEnumerator parent;
-
- gint id;
- DBusConnection *sync_connection; /* NULL if async, i.e. we're listening on main dbus connection */
-
- /* protected by infos lock */
- GList *infos;
- gboolean done;
-
- /* For async ops, also protected by infos lock */
- int async_requested_files;
- GCancellable *async_cancel;
- gulong cancelled_tag;
- guint timeout_tag;
- GSimpleAsyncResult *async_res;
-};
-
-G_DEFINE_TYPE (GDaemonFileEnumerator, g_daemon_file_enumerator, G_TYPE_FILE_ENUMERATOR)
-
-static GFileInfo * g_daemon_file_enumerator_next_file (GFileEnumerator *enumerator,
- GCancellable *cancellable,
- GError **error);
-static void g_daemon_file_enumerator_next_files_async (GFileEnumerator *enumerator,
- int num_files,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-static GList * g_daemon_file_enumerator_next_files_finish (GFileEnumerator *enumerator,
- GAsyncResult *result,
- GError **error);
-static gboolean g_daemon_file_enumerator_close (GFileEnumerator *enumerator,
- GCancellable *cancellable,
- GError **error);
-static void g_daemon_file_enumerator_close_async (GFileEnumerator *enumerator,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-static gboolean g_daemon_file_enumerator_close_finish (GFileEnumerator *enumerator,
- GAsyncResult *result,
- GError **error);
-static DBusHandlerResult g_daemon_file_enumerator_dbus_filter (DBusConnection *connection,
- DBusMessage *message,
- void *user_data);
-
-static void
-free_info_list (GList *infos)
-{
- g_list_foreach (infos, (GFunc)g_object_unref, NULL);
- g_list_free (infos);
-}
-
-static void
-g_daemon_file_enumerator_finalize (GObject *object)
-{
- GDaemonFileEnumerator *daemon;
- char *path;
-
- daemon = G_DAEMON_FILE_ENUMERATOR (object);
-
- path = g_daemon_file_enumerator_get_object_path (daemon);
- _g_dbus_unregister_vfs_filter (path);
- g_free (path);
-
- free_info_list (daemon->infos);
-
- if (daemon->sync_connection)
- dbus_connection_unref (daemon->sync_connection);
-
- if (G_OBJECT_CLASS (g_daemon_file_enumerator_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_daemon_file_enumerator_parent_class)->finalize) (object);
-}
-
-
-static void
-g_daemon_file_enumerator_class_init (GDaemonFileEnumeratorClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GFileEnumeratorClass *enumerator_class = G_FILE_ENUMERATOR_CLASS (klass);
-
- gobject_class->finalize = g_daemon_file_enumerator_finalize;
-
- enumerator_class->next_file = g_daemon_file_enumerator_next_file;
- enumerator_class->next_files_async = g_daemon_file_enumerator_next_files_async;
- enumerator_class->next_files_finish = g_daemon_file_enumerator_next_files_finish;
- enumerator_class->close_fn = g_daemon_file_enumerator_close;
- enumerator_class->close_async = g_daemon_file_enumerator_close_async;
- enumerator_class->close_finish = g_daemon_file_enumerator_close_finish;
-}
-
-static void
-g_daemon_file_enumerator_init (GDaemonFileEnumerator *daemon)
-{
- char *path;
-
- daemon->id = g_atomic_int_exchange_and_add (&path_counter, 1);
-
- path = g_daemon_file_enumerator_get_object_path (daemon);
- _g_dbus_register_vfs_filter (path, g_daemon_file_enumerator_dbus_filter,
- G_OBJECT (daemon));
- g_free (path);
-}
-
-GDaemonFileEnumerator *
-g_daemon_file_enumerator_new (GFile *file)
-{
- GDaemonFileEnumerator *daemon;
-
- daemon = g_object_new (G_TYPE_DAEMON_FILE_ENUMERATOR,
- "container", file,
- NULL);
-
- return daemon;
-}
-
-/* Called with infos lock held */
-static void
-trigger_async_done (GDaemonFileEnumerator *daemon, gboolean ok)
-{
- GList *rest, *l;
-
- if (ok)
- {
- l = daemon->infos;
- rest = g_list_nth (l, daemon->async_requested_files);
- if (rest)
- {
- /* Split list */
- rest->prev->next = NULL;
- rest->prev = NULL;
- }
- daemon->infos = rest;
-
- g_simple_async_result_set_op_res_gpointer (daemon->async_res,
- l,
- (GDestroyNotify)free_info_list);
- }
-
- g_simple_async_result_complete_in_idle (daemon->async_res);
-
- if (daemon->cancelled_tag != 0)
- g_signal_handler_disconnect (daemon->async_cancel,
- daemon->cancelled_tag);
- daemon->async_cancel = 0;
- daemon->cancelled_tag = 0;
-
- if (daemon->timeout_tag != 0)
- g_source_remove (daemon->timeout_tag);
- daemon->timeout_tag = 0;
-
- daemon->async_requested_files = 0;
-
- g_object_unref (daemon->async_res);
- daemon->async_res = NULL;
-}
-
-static DBusHandlerResult
-g_daemon_file_enumerator_dbus_filter (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
-{
- GDaemonFileEnumerator *enumerator = user_data;
- const char *member;
- DBusMessageIter iter, array_iter;
- GList *infos;
- GFileInfo *info;
-
- member = dbus_message_get_member (message);
-
- if (strcmp (member, G_VFS_DBUS_ENUMERATOR_OP_DONE) == 0)
- {
- G_LOCK (infos);
- enumerator->done = TRUE;
- if (enumerator->async_requested_files > 0)
- trigger_async_done (enumerator, TRUE);
- G_UNLOCK (infos);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
- else if (strcmp (member, G_VFS_DBUS_ENUMERATOR_OP_GOT_INFO) == 0)
- {
- infos = NULL;
-
- dbus_message_iter_init (message, &iter);
- if (dbus_message_iter_get_arg_type (&iter) == DBUS_TYPE_ARRAY &&
- dbus_message_iter_get_element_type (&iter) == DBUS_TYPE_STRUCT)
- {
- dbus_message_iter_recurse (&iter, &array_iter);
-
- while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_STRUCT)
- {
- info = _g_dbus_get_file_info (&array_iter, NULL);
- if (info)
- g_assert (G_IS_FILE_INFO (info));
-
- if (info)
- infos = g_list_prepend (infos, info);
-
- dbus_message_iter_next (&iter);
- }
- }
-
- infos = g_list_reverse (infos);
-
- G_LOCK (infos);
- enumerator->infos = g_list_concat (enumerator->infos, infos);
- if (enumerator->async_requested_files > 0 &&
- g_list_length (enumerator->infos) >= enumerator->async_requested_files)
- trigger_async_done (enumerator, TRUE);
- G_UNLOCK (infos);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-char *
-g_daemon_file_enumerator_get_object_path (GDaemonFileEnumerator *enumerator)
-{
- return g_strdup_printf (OBJ_PATH_PREFIX"%d", enumerator->id);
-}
-
-void
-g_daemon_file_enumerator_set_sync_connection (GDaemonFileEnumerator *enumerator,
- DBusConnection *connection)
-{
- enumerator->sync_connection = dbus_connection_ref (connection);
-}
-
-static GFileInfo *
-g_daemon_file_enumerator_next_file (GFileEnumerator *enumerator,
- GCancellable *cancellable,
- GError **error)
-{
- GDaemonFileEnumerator *daemon = G_DAEMON_FILE_ENUMERATOR (enumerator);
- GFileInfo *info;
- gboolean done;
- int count;
-
- info = NULL;
- done = FALSE;
- count = 0;
- while (count++ < G_VFS_DBUS_TIMEOUT_MSECS / 100)
- {
- G_LOCK (infos);
- if (daemon->infos)
- {
- done = TRUE;
- info = daemon->infos->data;
- if (info)
- g_assert (G_IS_FILE_INFO (info));
- daemon->infos = g_list_delete_link (daemon->infos, daemon->infos);
- }
- else if (daemon->done)
- done = TRUE;
- G_UNLOCK (infos);
-
- if (info)
- g_assert (G_IS_FILE_INFO (info));
-
- if (done)
- break;
-
- /* We sleep only 100 msecs here, not the full time because we might have
- * raced with the filter func being called after unlocking
- * and setting done or ->infos. So, we want to check it again reasonaby soon.
- */
- if (daemon->sync_connection != NULL)
- {
- /* The initializing call for the enumerator was a sync one, and we
- have a reference to its private connection. In order to ensure we
- get the responses sent to that originating connection we pump it
- here.
- This should be safe as we're either on the thread that did the call
- so its our connection, or its the private connection for another
- thread. If that thread is idle the pumping won't affect anything, and
- if it is doing something thats ok to, because we don't use filters
- on the private sync connections so we won't cause any reentrancy
- (except the file enumerator filter, but that is safe to run in
- some other thread).
- */
- if (!dbus_connection_read_write_dispatch (daemon->sync_connection, 100))
- break;
- }
- else
- {
- /* The enumerator was initialized by an async call, so responses will
- come to the async dbus connection. We can't pump that as that would
- cause all sort of filters and stuff to run, possibly on the wrong
- thread. If you want to do async next_files you must create the
- enumerator asynchrounously.
- */
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Can't do synchronous next_files() on a file enumerator created asynchronously");
- return NULL;
- }
- }
-
- return info;
-}
-
-static void
-async_cancelled (GCancellable *cancellable,
- GDaemonFileEnumerator *daemon)
-{
- g_simple_async_result_set_error (daemon->async_res,
- G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- trigger_async_done (daemon, FALSE);
-}
-
-static gboolean
-async_timeout (gpointer data)
-{
- GDaemonFileEnumerator *daemon = G_DAEMON_FILE_ENUMERATOR (data);
- trigger_async_done (daemon, TRUE);
- return FALSE;
-}
-
-static void
-g_daemon_file_enumerator_next_files_async (GFileEnumerator *enumerator,
- int num_files,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GDaemonFileEnumerator *daemon = G_DAEMON_FILE_ENUMERATOR (enumerator);
-
- if (daemon->sync_connection != NULL)
- {
- /* If the enumerator was created synchronously then the connection used
- * for return messages will be the private connection for that thread.
- * We can't rely on it being pumped, so we don't support this.
- * We could possibly pump it ourselves in this case, but i'm not sure
- * how much sense this makes, so we don't for now.
- */
- g_simple_async_report_error_in_idle (G_OBJECT (enumerator),
- callback,
- user_data,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- "Can't do asynchronous next_files() on a file enumerator created synchronously");
- return;
- }
-
- G_LOCK (infos);
- daemon->async_cancel = cancellable;
- daemon->cancelled_tag = 0;
- daemon->timeout_tag = 0;
- daemon->async_requested_files = num_files;
- daemon->async_res = g_simple_async_result_new (G_OBJECT (enumerator), callback, user_data,
- g_daemon_file_enumerator_next_files_async);
-
- /* Maybe we already have enough info to fulfill the requeust already */
- if (daemon->done ||
- g_list_length (daemon->infos) >= daemon->async_requested_files)
- trigger_async_done (daemon, TRUE);
- else
- {
- if (cancellable)
- daemon->cancelled_tag = g_signal_connect (cancellable, "cancelled", (GCallback)async_cancelled, daemon);
- daemon->timeout_tag = g_timeout_add (G_VFS_DBUS_TIMEOUT_MSECS,
- async_timeout, daemon);
- }
-
- G_UNLOCK (infos);
-}
-
-static GList *
-g_daemon_file_enumerator_next_files_finish (GFileEnumerator *enumerator,
- GAsyncResult *result,
- GError **error)
-{
- GList *l;
-
- l = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result));
- /* We want the caller to own this, and not the result, so clear the result data */
- g_simple_async_result_set_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result),
- NULL, NULL);
-
- return l;
-}
-
-static gboolean
-g_daemon_file_enumerator_close (GFileEnumerator *enumerator,
- GCancellable *cancellable,
- GError **error)
-{
- /*GDaemonFileEnumerator *daemon = G_DAEMON_FILE_ENUMERATOR (enumerator); */
-
- return TRUE;
-}
-
-
-/* We want an explicitly async version of close (doing nothing) to avoid
- the default thread-using version. */
-static void
-g_daemon_file_enumerator_close_async (GFileEnumerator *enumerator,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *res;
-
- res = g_simple_async_result_new (G_OBJECT (enumerator), callback, user_data,
- g_daemon_file_enumerator_close_async);
- g_simple_async_result_complete_in_idle (res);
- g_object_unref (res);
-}
-
-static gboolean
-g_daemon_file_enumerator_close_finish (GFileEnumerator *enumerator,
- GAsyncResult *result,
- GError **error)
-{
- return TRUE;
-}
diff --git a/client/gdaemonfileenumerator.h b/client/gdaemonfileenumerator.h
deleted file mode 100644
index 25f5195a..00000000
--- a/client/gdaemonfileenumerator.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_DAEMON_FILE_ENUMERATOR_H__
-#define __G_DAEMON_FILE_ENUMERATOR_H__
-
-#include <gio/gio.h>
-#include <dbus/dbus.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_DAEMON_FILE_ENUMERATOR (g_daemon_file_enumerator_get_type ())
-#define G_DAEMON_FILE_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DAEMON_FILE_ENUMERATOR, GDaemonFileEnumerator))
-#define G_DAEMON_FILE_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DAEMON_FILE_ENUMERATOR, GDaemonFileEnumeratorClass))
-#define G_IS_DAEMON_FILE_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DAEMON_FILE_ENUMERATOR))
-#define G_IS_DAEMON_FILE_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DAEMON_FILE_ENUMERATOR))
-#define G_DAEMON_FILE_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DAEMON_FILE_ENUMERATOR, GDaemonFileEnumeratorClass))
-
-typedef struct _GDaemonFileEnumerator GDaemonFileEnumerator;
-typedef struct _GDaemonFileEnumeratorClass GDaemonFileEnumeratorClass;
-typedef struct _GDaemonFileEnumeratorPrivate GDaemonFileEnumeratorPrivate;
-
-struct _GDaemonFileEnumeratorClass
-{
- GFileEnumeratorClass parent_class;
-};
-
-GType g_daemon_file_enumerator_get_type (void) G_GNUC_CONST;
-
-GDaemonFileEnumerator *g_daemon_file_enumerator_new (GFile *file);
-char * g_daemon_file_enumerator_get_object_path (GDaemonFileEnumerator *enumerator);
-void g_daemon_file_enumerator_set_sync_connection (GDaemonFileEnumerator *enumerator,
- DBusConnection *connection);
-
-
-G_END_DECLS
-
-#endif /* __G_FILE_DAEMON_FILE_ENUMERATOR_H__ */
diff --git a/client/gdaemonfileinputstream.c b/client/gdaemonfileinputstream.c
deleted file mode 100644
index 8cdc3622..00000000
--- a/client/gdaemonfileinputstream.c
+++ /dev/null
@@ -1,1643 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <glib/gstdio.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-#include <gio/gunixinputstream.h>
-#include <gio/gunixoutputstream.h>
-#include "gdaemonfileinputstream.h"
-#include "gvfsdaemondbus.h"
-#include <gvfsdaemonprotocol.h>
-
-#define MAX_READ_SIZE (4*1024*1024)
-
-typedef enum {
- INPUT_STATE_IN_REPLY_HEADER,
- INPUT_STATE_IN_BLOCK
-} InputState;
-
-typedef enum {
- STATE_OP_DONE,
- STATE_OP_READ,
- STATE_OP_WRITE,
- STATE_OP_SKIP
-} StateOp;
-
-typedef enum {
- READ_STATE_INIT = 0,
- READ_STATE_WROTE_COMMAND,
- READ_STATE_HANDLE_INPUT,
- READ_STATE_HANDLE_INPUT_BLOCK,
- READ_STATE_SKIP_BLOCK,
- READ_STATE_HANDLE_HEADER,
- READ_STATE_READ_BLOCK
-} ReadState;
-
-typedef struct {
- ReadState state;
-
- /* Input */
- char *buffer;
- gsize buffer_size;
- /* Output */
- gssize ret_val;
- GError *ret_error;
-
- gboolean sent_cancel;
-
- guint32 seq_nr;
-} ReadOperation;
-
-typedef enum {
- SEEK_STATE_INIT = 0,
- SEEK_STATE_WROTE_REQUEST,
- SEEK_STATE_HANDLE_INPUT,
- SEEK_STATE_HANDLE_INPUT_BLOCK,
- SEEK_STATE_SKIP_BLOCK,
- SEEK_STATE_HANDLE_HEADER
-} SeekState;
-
-typedef struct {
- SeekState state;
-
- /* Input */
- goffset offset;
- GSeekType seek_type;
- /* Output */
- gboolean ret_val;
- GError *ret_error;
- goffset ret_offset;
-
- gboolean sent_cancel;
- gboolean sent_seek;
-
- guint32 seq_nr;
-} SeekOperation;
-
-typedef enum {
- CLOSE_STATE_INIT = 0,
- CLOSE_STATE_WROTE_REQUEST,
- CLOSE_STATE_HANDLE_INPUT,
- CLOSE_STATE_HANDLE_INPUT_BLOCK,
- CLOSE_STATE_SKIP_BLOCK,
- CLOSE_STATE_HANDLE_HEADER
-} CloseState;
-
-typedef struct {
- CloseState state;
-
- /* Input */
-
- /* Output */
- gboolean ret_val;
- GError *ret_error;
-
- gboolean sent_cancel;
-
- guint32 seq_nr;
-} CloseOperation;
-
-
-typedef struct {
- gboolean cancelled;
-
- char *io_buffer;
- gsize io_size;
- gsize io_res;
- /* The operation always succeeds, or gets cancelled.
- If we get an error doing the i/o that is considered fatal */
- gboolean io_allow_cancel;
- gboolean io_cancelled;
-} IOOperationData;
-
-typedef StateOp (*state_machine_iterator) (GDaemonFileInputStream *file, IOOperationData *io_op, gpointer data);
-
-struct _GDaemonFileInputStream {
- GFileInputStream parent;
-
- GOutputStream *command_stream;
- GInputStream *data_stream;
- guint can_seek : 1;
-
- int seek_generation;
- guint32 seq_nr;
- goffset current_offset;
-
- InputState input_state;
- gsize input_block_size;
- int input_block_seek_generation;
- GString *input_buffer;
-
- GString *output_buffer;
-};
-
-static gssize g_daemon_file_input_stream_read (GInputStream *stream,
- void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error);
-static gssize g_daemon_file_input_stream_skip (GInputStream *stream,
- gsize count,
- GCancellable *cancellable,
- GError **error);
-static gboolean g_daemon_file_input_stream_close (GInputStream *stream,
- GCancellable *cancellable,
- GError **error);
-static GFileInfo *g_daemon_file_input_stream_query_info (GFileInputStream *stream,
- char *attributes,
- GCancellable *cancellable,
- GError **error);
-static goffset g_daemon_file_input_stream_tell (GFileInputStream *stream);
-static gboolean g_daemon_file_input_stream_can_seek (GFileInputStream *stream);
-static gboolean g_daemon_file_input_stream_seek (GFileInputStream *stream,
- goffset offset,
- GSeekType type,
- GCancellable *cancellable,
- GError **error);
-static void g_daemon_file_input_stream_read_async (GInputStream *stream,
- void *buffer,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data);
-static gssize g_daemon_file_input_stream_read_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error);
-static void g_daemon_file_input_stream_skip_async (GInputStream *stream,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data);
-static gssize g_daemon_file_input_stream_skip_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error);
-static void g_daemon_file_input_stream_close_async (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data);
-static gboolean g_daemon_file_input_stream_close_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error);
-
-
-G_DEFINE_TYPE (GDaemonFileInputStream, g_daemon_file_input_stream,
- G_TYPE_FILE_INPUT_STREAM)
-
-static void
-g_daemon_file_input_stream_finalize (GObject *object)
-{
- GDaemonFileInputStream *file;
-
- file = G_DAEMON_FILE_INPUT_STREAM (object);
-
- if (file->command_stream)
- g_object_unref (file->command_stream);
- if (file->data_stream)
- g_object_unref (file->data_stream);
-
- g_string_free (file->input_buffer, TRUE);
- g_string_free (file->output_buffer, TRUE);
-
- if (G_OBJECT_CLASS (g_daemon_file_input_stream_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_daemon_file_input_stream_parent_class)->finalize) (object);
-}
-
-static void
-g_daemon_file_input_stream_class_init (GDaemonFileInputStreamClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GInputStreamClass *stream_class = G_INPUT_STREAM_CLASS (klass);
- GFileInputStreamClass *file_stream_class = G_FILE_INPUT_STREAM_CLASS (klass);
-
- gobject_class->finalize = g_daemon_file_input_stream_finalize;
-
- stream_class->read_fn = g_daemon_file_input_stream_read;
- if (0) stream_class->skip = g_daemon_file_input_stream_skip;
- stream_class->close_fn = g_daemon_file_input_stream_close;
-
- stream_class->read_async = g_daemon_file_input_stream_read_async;
- stream_class->read_finish = g_daemon_file_input_stream_read_finish;
- if (0)
- {
- stream_class->skip_async = g_daemon_file_input_stream_skip_async;
- stream_class->skip_finish = g_daemon_file_input_stream_skip_finish;
- }
- stream_class->close_async = g_daemon_file_input_stream_close_async;
- stream_class->close_finish = g_daemon_file_input_stream_close_finish;
-
- file_stream_class->tell = g_daemon_file_input_stream_tell;
- file_stream_class->can_seek = g_daemon_file_input_stream_can_seek;
- file_stream_class->seek = g_daemon_file_input_stream_seek;
- file_stream_class->query_info = g_daemon_file_input_stream_query_info;
-
-}
-
-static void
-g_daemon_file_input_stream_init (GDaemonFileInputStream *info)
-{
- info->output_buffer = g_string_new ("");
- info->input_buffer = g_string_new ("");
- info->seq_nr = 1;
-}
-
-GFileInputStream *
-g_daemon_file_input_stream_new (int fd,
- gboolean can_seek)
-{
- GDaemonFileInputStream *stream;
-
- stream = g_object_new (G_TYPE_DAEMON_FILE_INPUT_STREAM, NULL);
-
- stream->command_stream = g_unix_output_stream_new (fd, FALSE);
- stream->data_stream = g_unix_input_stream_new (fd, TRUE);
- stream->can_seek = can_seek;
-
- return G_FILE_INPUT_STREAM (stream);
-}
-
-static gboolean
-error_is_cancel (GError *error)
-{
- return error != NULL &&
- error->domain == G_IO_ERROR &&
- error->code == G_IO_ERROR_CANCELLED;
-}
-
-static void
-append_request (GDaemonFileInputStream *stream, guint32 command,
- guint32 arg1, guint32 arg2, guint32 *seq_nr)
-{
- GVfsDaemonSocketProtocolRequest cmd;
-
- g_assert (sizeof (cmd) == G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SIZE);
-
- if (seq_nr)
- *seq_nr = stream->seq_nr;
-
- cmd.command = g_htonl (command);
- cmd.seq_nr = g_htonl (stream->seq_nr++);
- cmd.arg1 = g_htonl (arg1);
- cmd.arg2 = g_htonl (arg2);
- cmd.data_len = 0;
-
- g_string_append_len (stream->output_buffer,
- (char *)&cmd, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SIZE);
-}
-
-static gsize
-get_reply_header_missing_bytes (GString *buffer)
-{
- GVfsDaemonSocketProtocolReply *reply;
- guint32 type;
- guint32 arg2;
-
- if (buffer->len < G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE)
- return G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE - buffer->len;
-
- reply = (GVfsDaemonSocketProtocolReply *)buffer->str;
-
- type = g_ntohl (reply->type);
- arg2 = g_ntohl (reply->arg2);
-
- if (type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_ERROR)
- return G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE + arg2 - buffer->len;
- return 0;
-}
-
-static char *
-decode_reply (GString *buffer, GVfsDaemonSocketProtocolReply *reply_out)
-{
- GVfsDaemonSocketProtocolReply *reply;
- reply = (GVfsDaemonSocketProtocolReply *)buffer->str;
- reply_out->type = g_ntohl (reply->type);
- reply_out->seq_nr = g_ntohl (reply->seq_nr);
- reply_out->arg1 = g_ntohl (reply->arg1);
- reply_out->arg2 = g_ntohl (reply->arg2);
-
- return buffer->str + G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE;
-}
-
-static void
-decode_error (GVfsDaemonSocketProtocolReply *reply, char *data, GError **error)
-{
- g_set_error_literal (error,
- g_quark_from_string (data),
- reply->arg1,
- data + strlen (data) + 1);
-}
-
-
-static gboolean
-run_sync_state_machine (GDaemonFileInputStream *file,
- state_machine_iterator iterator,
- gpointer data,
- GCancellable *cancellable,
- GError **error)
-{
- gssize res;
- StateOp io_op;
- IOOperationData io_data;
- GError *io_error;
-
- memset (&io_data, 0, sizeof (io_data));
-
- while (TRUE)
- {
- if (cancellable)
- io_data.cancelled = g_cancellable_is_cancelled (cancellable);
-
- io_op = iterator (file, &io_data, data);
-
- if (io_op == STATE_OP_DONE)
- return TRUE;
-
- io_error = NULL;
- if (io_op == STATE_OP_READ)
- {
- res = g_input_stream_read (file->data_stream,
- io_data.io_buffer, io_data.io_size,
- io_data.io_allow_cancel ? cancellable : NULL,
- &io_error);
- }
- else if (io_op == STATE_OP_SKIP)
- {
- res = g_input_stream_skip (file->data_stream,
- io_data.io_size,
- io_data.io_allow_cancel ? cancellable : NULL,
- &io_error);
- }
- else if (io_op == STATE_OP_WRITE)
- {
- res = g_output_stream_write (file->command_stream,
- io_data.io_buffer, io_data.io_size,
- io_data.io_allow_cancel ? cancellable : NULL,
- &io_error);
- }
- else
- {
- res = 0;
- g_assert_not_reached ();
- }
-
- if (res == -1)
- {
- if (error_is_cancel (io_error))
- {
- io_data.io_res = 0;
- io_data.io_cancelled = TRUE;
- g_error_free (io_error);
- }
- else
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Error in stream protocol: %s"), io_error->message);
- g_error_free (io_error);
- return FALSE;
- }
- }
- else if (res == 0 && io_data.io_size != 0)
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Error in stream protocol: %s"), _("End of stream"));
- return FALSE;
- }
- else
- {
- io_data.io_res = res;
- io_data.io_cancelled = FALSE;
- }
- }
-}
-
-/* read cycle:
-
- if we know of a (partially read) matching outstanding block, read from it
- create packet, append to outgoing
- flush outgoing
- start processing input, looking for a data block with same seek gen,
- or an error with same seq nr
- on cancel, send cancel command and go back to loop
- */
-
-static StateOp
-iterate_read_state_machine (GDaemonFileInputStream *file, IOOperationData *io_op, ReadOperation *op)
-{
- gsize len;
-
- while (TRUE)
- {
- switch (op->state)
- {
- /* Initial state for read op */
- case READ_STATE_INIT:
- /* If we're already reading some data, but we didn't read all, just use that
- and don't even send a request */
- if (file->input_state == INPUT_STATE_IN_BLOCK &&
- file->seek_generation == file->input_block_seek_generation)
- {
- op->state = READ_STATE_READ_BLOCK;
- io_op->io_buffer = op->buffer;
- io_op->io_size = MIN (op->buffer_size, file->input_block_size);
- io_op->io_allow_cancel = TRUE; /* Allow cancel before we sent request */
- return STATE_OP_READ;
- }
-
- append_request (file, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_READ,
- op->buffer_size, 0, &op->seq_nr);
- op->state = READ_STATE_WROTE_COMMAND;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = TRUE; /* Allow cancel before first byte of request sent */
- return STATE_OP_WRITE;
-
- /* wrote parts of output_buffer */
- case READ_STATE_WROTE_COMMAND:
- if (io_op->io_cancelled)
- {
- op->ret_val = -1;
- g_set_error_literal (&op->ret_error,
- G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return STATE_OP_DONE;
- }
-
- if (io_op->io_res < file->output_buffer->len)
- {
- memcpy (file->output_buffer->str,
- file->output_buffer->str + io_op->io_res,
- file->output_buffer->len - io_op->io_res);
- g_string_truncate (file->output_buffer,
- file->output_buffer->len - io_op->io_res);
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
- g_string_truncate (file->output_buffer, 0);
-
- op->state = READ_STATE_HANDLE_INPUT;
- break;
-
- /* No op */
- case READ_STATE_HANDLE_INPUT:
- if (io_op->cancelled && !op->sent_cancel)
- {
- op->sent_cancel = TRUE;
- append_request (file, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CANCEL,
- op->seq_nr, 0, NULL);
- op->state = READ_STATE_WROTE_COMMAND;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
-
- if (file->input_state == INPUT_STATE_IN_BLOCK)
- {
- op->state = READ_STATE_HANDLE_INPUT_BLOCK;
- break;
- }
- else if (file->input_state == INPUT_STATE_IN_REPLY_HEADER)
- {
- op->state = READ_STATE_HANDLE_HEADER;
- break;
- }
- g_assert_not_reached ();
- break;
-
- /* No op */
- case READ_STATE_HANDLE_INPUT_BLOCK:
- g_assert (file->input_state == INPUT_STATE_IN_BLOCK);
-
- if (file->seek_generation ==
- file->input_block_seek_generation)
- {
- op->state = READ_STATE_READ_BLOCK;
- io_op->io_buffer = op->buffer;
- io_op->io_size = MIN (op->buffer_size, file->input_block_size);
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_READ;
- }
- else
- {
- op->state = READ_STATE_SKIP_BLOCK;
- io_op->io_buffer = NULL;
- io_op->io_size = file->input_block_size;
- io_op->io_allow_cancel = !op->sent_cancel;
- return STATE_OP_SKIP;
- }
- break;
-
- /* Read block data */
- case READ_STATE_SKIP_BLOCK:
- if (io_op->io_cancelled)
- {
- op->state = READ_STATE_HANDLE_INPUT;
- break;
- }
-
- g_assert (io_op->io_res <= file->input_block_size);
- file->input_block_size -= io_op->io_res;
-
- if (file->input_block_size == 0)
- file->input_state = INPUT_STATE_IN_REPLY_HEADER;
-
- op->state = READ_STATE_HANDLE_INPUT;
- break;
-
- /* read header data, (or manual io_len/res = 0) */
- case READ_STATE_HANDLE_HEADER:
- if (io_op->io_cancelled)
- {
- op->state = READ_STATE_HANDLE_INPUT;
- break;
- }
-
- if (io_op->io_res > 0)
- {
- gsize unread_size = io_op->io_size - io_op->io_res;
- g_string_set_size (file->input_buffer,
- file->input_buffer->len - unread_size);
- }
-
- len = get_reply_header_missing_bytes (file->input_buffer);
- if (len > 0)
- {
- gsize current_len = file->input_buffer->len;
- g_string_set_size (file->input_buffer,
- current_len + len);
- io_op->io_buffer = file->input_buffer->str + current_len;
- io_op->io_size = len;
- io_op->io_allow_cancel = !op->sent_cancel;
- return STATE_OP_READ;
- }
-
- /* Got full header */
-
- {
- GVfsDaemonSocketProtocolReply reply;
- char *data;
- data = decode_reply (file->input_buffer, &reply);
-
- if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_ERROR &&
- reply.seq_nr == op->seq_nr)
- {
- op->ret_val = -1;
- decode_error (&reply, data, &op->ret_error);
- g_string_truncate (file->input_buffer, 0);
- return STATE_OP_DONE;
- }
- else if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_DATA)
- {
- g_string_truncate (file->input_buffer, 0);
- file->input_state = INPUT_STATE_IN_BLOCK;
- file->input_block_size = reply.arg1;
- file->input_block_seek_generation = reply.arg2;
- op->state = READ_STATE_HANDLE_INPUT_BLOCK;
- break;
- }
- /* Ignore other reply types */
- }
-
- g_string_truncate (file->input_buffer, 0);
-
- /* This wasn't interesting, read next reply */
- op->state = READ_STATE_HANDLE_HEADER;
- break;
-
- /* Read block data */
- case READ_STATE_READ_BLOCK:
- if (io_op->io_cancelled)
- {
- op->ret_val = -1;
- g_set_error_literal (&op->ret_error,
- G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return STATE_OP_DONE;
- }
-
- if (io_op->io_res > 0)
- {
- g_assert (io_op->io_res <= file->input_block_size);
- file->input_block_size -= io_op->io_res;
- if (file->input_block_size == 0)
- file->input_state = INPUT_STATE_IN_REPLY_HEADER;
- }
-
- op->ret_val = io_op->io_res;
- op->ret_error = NULL;
- return STATE_OP_DONE;
-
- default:
- g_assert_not_reached ();
- }
-
- /* Clear io_op between non-op state switches */
- io_op->io_size = 0;
- io_op->io_res = 0;
- io_op->io_cancelled = FALSE;
-
- }
-}
-
-static gssize
-g_daemon_file_input_stream_read (GInputStream *stream,
- void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error)
-{
- GDaemonFileInputStream *file;
- ReadOperation op;
-
- file = G_DAEMON_FILE_INPUT_STREAM (stream);
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return -1;
-
- /* Limit for sanity and to avoid 32bit overflow */
- if (count > MAX_READ_SIZE)
- count = MAX_READ_SIZE;
-
- memset (&op, 0, sizeof (op));
- op.state = READ_STATE_INIT;
- op.buffer = buffer;
- op.buffer_size = count;
-
- if (!run_sync_state_machine (file, (state_machine_iterator)iterate_read_state_machine,
- &op, cancellable, error))
- return -1; /* IO Error */
-
- if (op.ret_val == -1)
- g_propagate_error (error, op.ret_error);
- else
- file->current_offset += op.ret_val;
-
- return op.ret_val;
-}
-
-static gssize
-g_daemon_file_input_stream_skip (GInputStream *stream,
- gsize count,
- GCancellable *cancellable,
- GError **error)
-{
-#if 0
- GDaemonFileInputStream *file;
-
- file = G_DAEMON_FILE_INPUT_STREAM (stream);
-#endif
- /* TODO: implement skip */
- g_assert_not_reached ();
-
- return 0;
-}
-
-static StateOp
-iterate_close_state_machine (GDaemonFileInputStream *file, IOOperationData *io_op, CloseOperation *op)
-{
- gsize len;
-
- while (TRUE)
- {
- switch (op->state)
- {
- /* Initial state for read op */
- case CLOSE_STATE_INIT:
- append_request (file, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CLOSE,
- 0, 0, &op->seq_nr);
- op->state = CLOSE_STATE_WROTE_REQUEST;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = TRUE; /* Allow cancel before first byte of request sent */
- return STATE_OP_WRITE;
-
- /* wrote parts of output_buffer */
- case CLOSE_STATE_WROTE_REQUEST:
- if (io_op->io_cancelled)
- {
- op->ret_val = FALSE;
- g_set_error_literal (&op->ret_error,
- G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return STATE_OP_DONE;
- }
-
- if (io_op->io_res < file->output_buffer->len)
- {
- memcpy (file->output_buffer->str,
- file->output_buffer->str + io_op->io_res,
- file->output_buffer->len - io_op->io_res);
- g_string_truncate (file->output_buffer,
- file->output_buffer->len - io_op->io_res);
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
- g_string_truncate (file->output_buffer, 0);
-
- op->state = CLOSE_STATE_HANDLE_INPUT;
- break;
-
- /* No op */
- case CLOSE_STATE_HANDLE_INPUT:
- if (io_op->cancelled && !op->sent_cancel)
- {
- op->sent_cancel = TRUE;
- append_request (file, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CANCEL,
- op->seq_nr, 0, NULL);
- op->state = CLOSE_STATE_WROTE_REQUEST;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
-
- if (file->input_state == INPUT_STATE_IN_BLOCK)
- {
- op->state = CLOSE_STATE_HANDLE_INPUT_BLOCK;
- break;
- }
- else if (file->input_state == INPUT_STATE_IN_REPLY_HEADER)
- {
- op->state = CLOSE_STATE_HANDLE_HEADER;
- break;
- }
- g_assert_not_reached ();
- break;
-
- /* No op */
- case CLOSE_STATE_HANDLE_INPUT_BLOCK:
- g_assert (file->input_state == INPUT_STATE_IN_BLOCK);
-
- op->state = CLOSE_STATE_SKIP_BLOCK;
- io_op->io_buffer = NULL;
- io_op->io_size = file->input_block_size;
- io_op->io_allow_cancel = !op->sent_cancel;
- return STATE_OP_SKIP;
-
- /* Read block data */
- case CLOSE_STATE_SKIP_BLOCK:
- if (io_op->io_cancelled)
- {
- op->state = CLOSE_STATE_HANDLE_INPUT;
- break;
- }
-
- g_assert (io_op->io_res <= file->input_block_size);
- file->input_block_size -= io_op->io_res;
-
- if (file->input_block_size == 0)
- file->input_state = INPUT_STATE_IN_REPLY_HEADER;
-
- op->state = CLOSE_STATE_HANDLE_INPUT;
- break;
-
- /* read header data, (or manual io_len/res = 0) */
- case CLOSE_STATE_HANDLE_HEADER:
- if (io_op->io_cancelled)
- {
- op->state = CLOSE_STATE_HANDLE_INPUT;
- break;
- }
-
- if (io_op->io_res > 0)
- {
- gsize unread_size = io_op->io_size - io_op->io_res;
- g_string_set_size (file->input_buffer,
- file->input_buffer->len - unread_size);
- }
-
- len = get_reply_header_missing_bytes (file->input_buffer);
- if (len > 0)
- {
- gsize current_len = file->input_buffer->len;
- g_string_set_size (file->input_buffer,
- current_len + len);
- io_op->io_buffer = file->input_buffer->str + current_len;
- io_op->io_size = len;
- io_op->io_allow_cancel = !op->sent_cancel;
- return STATE_OP_READ;
- }
-
- /* Got full header */
-
- {
- GVfsDaemonSocketProtocolReply reply;
- char *data;
- data = decode_reply (file->input_buffer, &reply);
-
- if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_ERROR &&
- reply.seq_nr == op->seq_nr)
- {
- op->ret_val = FALSE;
- decode_error (&reply, data, &op->ret_error);
- g_string_truncate (file->input_buffer, 0);
- return STATE_OP_DONE;
- }
- else if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_DATA)
- {
- g_string_truncate (file->input_buffer, 0);
- file->input_state = INPUT_STATE_IN_BLOCK;
- file->input_block_size = reply.arg1;
- file->input_block_seek_generation = reply.arg2;
- op->state = CLOSE_STATE_HANDLE_INPUT_BLOCK;
- break;
- }
- else if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_CLOSED)
- {
- op->ret_val = TRUE;
- g_string_truncate (file->input_buffer, 0);
- return STATE_OP_DONE;
- }
- /* Ignore other reply types */
- }
-
- g_string_truncate (file->input_buffer, 0);
-
- /* This wasn't interesting, read next reply */
- op->state = CLOSE_STATE_HANDLE_HEADER;
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- /* Clear io_op between non-op state switches */
- io_op->io_size = 0;
- io_op->io_res = 0;
- io_op->io_cancelled = FALSE;
- }
-}
-
-
-static gboolean
-g_daemon_file_input_stream_close (GInputStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- GDaemonFileInputStream *file;
- CloseOperation op;
- gboolean res;
-
- file = G_DAEMON_FILE_INPUT_STREAM (stream);
-
- /* We need to do a full roundtrip to guarantee that the writes have
- reached the disk. */
-
- memset (&op, 0, sizeof (op));
- op.state = CLOSE_STATE_INIT;
-
- if (!run_sync_state_machine (file, (state_machine_iterator)iterate_close_state_machine,
- &op, cancellable, error))
- res = FALSE;
- else
- {
- if (!op.ret_val)
- g_propagate_error (error, op.ret_error);
- res = op.ret_val;
- }
-
- /* Return the first error, but close all streams */
- if (res)
- res = g_output_stream_close (file->command_stream, cancellable, error);
- else
- g_output_stream_close (file->command_stream, cancellable, NULL);
-
- if (res)
- res = g_input_stream_close (file->data_stream, cancellable, error);
- else
- g_input_stream_close (file->data_stream, cancellable, NULL);
-
- return res;
-}
-
-static goffset
-g_daemon_file_input_stream_tell (GFileInputStream *stream)
-{
- GDaemonFileInputStream *file;
-
- file = G_DAEMON_FILE_INPUT_STREAM (stream);
-
- return file->current_offset;
-}
-
-static gboolean
-g_daemon_file_input_stream_can_seek (GFileInputStream *stream)
-{
- GDaemonFileInputStream *file;
-
- file = G_DAEMON_FILE_INPUT_STREAM (stream);
-
- return file->can_seek;
-}
-
-static StateOp
-iterate_seek_state_machine (GDaemonFileInputStream *file, IOOperationData *io_op, SeekOperation *op)
-{
- gsize len;
- guint32 request;
-
- while (TRUE)
- {
- switch (op->state)
- {
- /* Initial state for read op */
- case SEEK_STATE_INIT:
- request = G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_SET;
- if (op->seek_type == G_SEEK_CUR)
- op->offset = file->current_offset + op->offset;
- else if (op->seek_type == G_SEEK_END)
- request = G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_END;
- append_request (file, request,
- op->offset & 0xffffffff,
- op->offset >> 32,
- &op->seq_nr);
- op->state = SEEK_STATE_WROTE_REQUEST;
- op->sent_seek = FALSE;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = TRUE; /* Allow cancel before first byte of request sent */
- return STATE_OP_WRITE;
-
- /* wrote parts of output_buffer */
- case SEEK_STATE_WROTE_REQUEST:
- if (io_op->io_cancelled)
- {
- op->ret_val = -1;
- g_set_error_literal (&op->ret_error,
- G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return STATE_OP_DONE;
- }
-
- /* We weren't cancelled before first byte sent, so now we will send
- * the seek request. Increase the seek generation now. */
- if (!op->sent_seek)
- file->seek_generation++;
- op->sent_seek = TRUE;
-
- if (io_op->io_res < file->output_buffer->len)
- {
- memcpy (file->output_buffer->str,
- file->output_buffer->str + io_op->io_res,
- file->output_buffer->len - io_op->io_res);
- g_string_truncate (file->output_buffer,
- file->output_buffer->len - io_op->io_res);
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
- g_string_truncate (file->output_buffer, 0);
-
- op->state = SEEK_STATE_HANDLE_INPUT;
- break;
-
- /* No op */
- case SEEK_STATE_HANDLE_INPUT:
- if (io_op->cancelled && !op->sent_cancel)
- {
- op->sent_cancel = TRUE;
- append_request (file, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CANCEL,
- op->seq_nr, 0, NULL);
- op->state = SEEK_STATE_WROTE_REQUEST;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
-
- if (file->input_state == INPUT_STATE_IN_BLOCK)
- {
- op->state = SEEK_STATE_HANDLE_INPUT_BLOCK;
- break;
- }
- else if (file->input_state == INPUT_STATE_IN_REPLY_HEADER)
- {
- op->state = SEEK_STATE_HANDLE_HEADER;
- break;
- }
- g_assert_not_reached ();
- break;
-
- /* No op */
- case SEEK_STATE_HANDLE_INPUT_BLOCK:
- g_assert (file->input_state == INPUT_STATE_IN_BLOCK);
-
- op->state = SEEK_STATE_SKIP_BLOCK;
- /* Reuse client buffer for skipping */
- io_op->io_buffer = NULL;
- io_op->io_size = file->input_block_size;
- io_op->io_allow_cancel = !op->sent_cancel;
- return STATE_OP_SKIP;
-
- /* Read block data */
- case SEEK_STATE_SKIP_BLOCK:
- if (io_op->io_cancelled)
- {
- op->state = SEEK_STATE_HANDLE_INPUT;
- break;
- }
-
- g_assert (io_op->io_res <= file->input_block_size);
- file->input_block_size -= io_op->io_res;
-
- if (file->input_block_size == 0)
- file->input_state = INPUT_STATE_IN_REPLY_HEADER;
-
- op->state = SEEK_STATE_HANDLE_INPUT;
- break;
-
- /* read header data, (or manual io_len/res = 0) */
- case SEEK_STATE_HANDLE_HEADER:
- if (io_op->io_cancelled)
- {
- op->state = SEEK_STATE_HANDLE_INPUT;
- break;
- }
-
- if (io_op->io_res > 0)
- {
- gsize unread_size = io_op->io_size - io_op->io_res;
- g_string_set_size (file->input_buffer,
- file->input_buffer->len - unread_size);
- }
-
- len = get_reply_header_missing_bytes (file->input_buffer);
- if (len > 0)
- {
- gsize current_len = file->input_buffer->len;
- g_string_set_size (file->input_buffer,
- current_len + len);
- io_op->io_buffer = file->input_buffer->str + current_len;
- io_op->io_size = len;
- io_op->io_allow_cancel = !op->sent_cancel;
- return STATE_OP_READ;
- }
-
- /* Got full header */
-
- {
- GVfsDaemonSocketProtocolReply reply;
- char *data;
- data = decode_reply (file->input_buffer, &reply);
-
- if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_ERROR &&
- reply.seq_nr == op->seq_nr)
- {
- op->ret_val = FALSE;
- decode_error (&reply, data, &op->ret_error);
- g_string_truncate (file->input_buffer, 0);
- return STATE_OP_DONE;
- }
- else if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_DATA)
- {
- g_string_truncate (file->input_buffer, 0);
- file->input_state = INPUT_STATE_IN_BLOCK;
- file->input_block_size = reply.arg1;
- file->input_block_seek_generation = reply.arg2;
- op->state = SEEK_STATE_HANDLE_INPUT_BLOCK;
- break;
- }
- else if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SEEK_POS)
- {
- op->ret_val = TRUE;
- op->ret_offset = ((goffset)reply.arg2) << 32 | (goffset)reply.arg1;
- g_string_truncate (file->input_buffer, 0);
- return STATE_OP_DONE;
- }
- /* Ignore other reply types */
- }
-
- g_string_truncate (file->input_buffer, 0);
-
- /* This wasn't interesting, read next reply */
- op->state = SEEK_STATE_HANDLE_HEADER;
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- /* Clear io_op between non-op state switches */
- io_op->io_size = 0;
- io_op->io_res = 0;
- io_op->io_cancelled = FALSE;
- }
-}
-
-static gboolean
-g_daemon_file_input_stream_seek (GFileInputStream *stream,
- goffset offset,
- GSeekType type,
- GCancellable *cancellable,
- GError **error)
-{
- GDaemonFileInputStream *file;
- SeekOperation op;
-
- file = G_DAEMON_FILE_INPUT_STREAM (stream);
-
- if (!file->can_seek)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Seek not supported on stream"));
- return FALSE;
- }
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return FALSE;
-
- memset (&op, 0, sizeof (op));
- op.state = SEEK_STATE_INIT;
- op.offset = offset;
- op.seek_type = type;
-
- if (!run_sync_state_machine (file, (state_machine_iterator)iterate_seek_state_machine,
- &op, cancellable, error))
- return FALSE; /* IO Error */
-
- if (!op.ret_val)
- g_propagate_error (error, op.ret_error);
- else
- file->current_offset = op.ret_offset;
-
- return op.ret_val;
-}
-
-static GFileInfo *
-g_daemon_file_input_stream_query_info (GFileInputStream *stream,
- char *attributes,
- GCancellable *cancellable,
- GError **error)
-{
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("The query info operation is not supported"));
-
- return NULL;
-}
-
-/************************************************************************
- * Async I/O Code *
- ************************************************************************/
-
-typedef struct AsyncIterator AsyncIterator;
-
-typedef void (*AsyncIteratorDone) (GInputStream *stream,
- gpointer op_data,
- GAsyncReadyCallback callback,
- gpointer callback_data,
- GError *io_error);
-
-struct AsyncIterator {
- AsyncIteratorDone done_cb;
- GDaemonFileInputStream *file;
- GCancellable *cancellable;
- IOOperationData io_data;
- state_machine_iterator iterator;
- gpointer iterator_data;
- int io_priority;
- GAsyncReadyCallback callback;
- gpointer callback_data;
-};
-
-static void async_iterate (AsyncIterator *iterator);
-
-static void
-async_iterator_done (AsyncIterator *iterator, GError *io_error)
-{
- iterator->done_cb (G_INPUT_STREAM (iterator->file),
- iterator->iterator_data,
- iterator->callback,
- iterator->callback_data,
- io_error);
-
- g_free (iterator);
-
-}
-
-static void
-async_op_handle (AsyncIterator *iterator,
- gssize res,
- GError *io_error)
-{
- IOOperationData *io_data = &iterator->io_data;
- GError *error;
-
- if (io_error != NULL)
- {
- if (error_is_cancel (io_error))
- {
- io_data->io_res = 0;
- io_data->io_cancelled = TRUE;
- }
- else
- {
- error = NULL;
- g_set_error (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Error in stream protocol: %s"), io_error->message);
- async_iterator_done (iterator, error);
- g_error_free (error);
- return;
- }
- }
- else if (res == 0 && io_data->io_size != 0)
- {
- error = NULL;
- g_set_error (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Error in stream protocol: %s"), _("End of stream"));
- async_iterator_done (iterator, error);
- g_error_free (error);
- return;
- }
- else
- {
- io_data->io_res = res;
- io_data->io_cancelled = FALSE;
- }
-
- async_iterate (iterator);
-}
-
-static void
-async_read_op_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GInputStream *stream = G_INPUT_STREAM (source_object);
- gssize count_read;
- GError *error = NULL;
-
- count_read = g_input_stream_read_finish (stream, res, &error);
-
- async_op_handle ((AsyncIterator *)user_data, count_read, error);
- if (error)
- g_error_free (error);
-}
-
-static void
-async_skip_op_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GInputStream *stream = G_INPUT_STREAM (source_object);
- gssize count_skipped;
- GError *error = NULL;
-
- count_skipped = g_input_stream_skip_finish (stream, res, &error);
-
- async_op_handle ((AsyncIterator *)user_data, count_skipped, error);
- if (error)
- g_error_free (error);
-}
-
-static void
-async_write_op_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GOutputStream *stream = G_OUTPUT_STREAM (source_object);
- gssize bytes_written;
- GError *error = NULL;
-
- bytes_written = g_output_stream_write_finish (stream, res, &error);
-
- async_op_handle ((AsyncIterator *)user_data, bytes_written, error);
- if (error)
- g_error_free (error);
-}
-
-static void
-async_iterate (AsyncIterator *iterator)
-{
- IOOperationData *io_data = &iterator->io_data;
- GDaemonFileInputStream *file = iterator->file;
- StateOp io_op;
-
- io_data->cancelled =
- g_cancellable_is_cancelled (iterator->cancellable);
-
- io_op = iterator->iterator (file, io_data, iterator->iterator_data);
-
- if (io_op == STATE_OP_DONE)
- {
- async_iterator_done (iterator, NULL);
- return;
- }
-
- /* TODO: Handle allow_cancel... */
-
- if (io_op == STATE_OP_READ)
- {
- g_input_stream_read_async (file->data_stream,
- io_data->io_buffer, io_data->io_size,
- iterator->io_priority,
- io_data->io_allow_cancel ? iterator->cancellable : NULL,
- async_read_op_callback, iterator);
- }
- else if (io_op == STATE_OP_SKIP)
- {
- g_input_stream_skip_async (file->data_stream,
- io_data->io_size,
- iterator->io_priority,
- io_data->io_allow_cancel ? iterator->cancellable : NULL,
- async_skip_op_callback, iterator);
- }
- else if (io_op == STATE_OP_WRITE)
- {
- g_output_stream_write_async (file->command_stream,
- io_data->io_buffer, io_data->io_size,
- iterator->io_priority,
- io_data->io_allow_cancel ? iterator->cancellable : NULL,
- async_write_op_callback, iterator);
- }
- else
- g_assert_not_reached ();
-}
-
-static void
-run_async_state_machine (GDaemonFileInputStream *file,
- state_machine_iterator iterator_cb,
- gpointer iterator_data,
- int io_priority,
- GAsyncReadyCallback callback,
- gpointer data,
- GCancellable *cancellable,
- AsyncIteratorDone done_cb)
-{
- AsyncIterator *iterator;
-
- iterator = g_new0 (AsyncIterator, 1);
- iterator->file = file;
- iterator->iterator = iterator_cb;
- iterator->iterator_data = iterator_data;
- iterator->io_priority = io_priority;
- iterator->cancellable = cancellable;
- iterator->callback = callback;
- iterator->callback_data = data;
- iterator->done_cb = done_cb;
-
- async_iterate (iterator);
-}
-
-static void
-async_read_done (GInputStream *stream,
- gpointer op_data,
- GAsyncReadyCallback callback,
- gpointer user_data,
- GError *io_error)
-{
- ReadOperation *op;
- gssize count_read;
- GError *error;
- GSimpleAsyncResult *simple;
-
- op = op_data;
-
- if (io_error)
- {
- count_read = -1;
- error = io_error;
- }
- else
- {
- count_read = op->ret_val;
- error = op->ret_error;
- }
-
- simple = g_simple_async_result_new (G_OBJECT (stream),
- callback, user_data,
- g_daemon_file_input_stream_read_async);
-
- g_simple_async_result_set_op_res_gssize (simple, count_read);
-
- if (count_read == -1)
- g_simple_async_result_set_from_error (simple, error);
-
- /* Complete immediately, not in idle, since we're already in a mainloop callout */
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- if (op->ret_error)
- g_error_free (op->ret_error);
- g_free (op);
-}
-
-static void
-g_daemon_file_input_stream_read_async (GInputStream *stream,
- void *buffer,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GDaemonFileInputStream *file;
- ReadOperation *op;
-
- file = G_DAEMON_FILE_INPUT_STREAM (stream);
-
- /* Limit for sanity and to avoid 32bit overflow */
- if (count > MAX_READ_SIZE)
- count = MAX_READ_SIZE;
-
- op = g_new0 (ReadOperation, 1);
- op->state = READ_STATE_INIT;
- op->buffer = buffer;
- op->buffer_size = count;
-
- run_async_state_machine (file,
- (state_machine_iterator)iterate_read_state_machine,
- op,
- io_priority,
- callback, user_data,
- cancellable,
- async_read_done);
-}
-
-static gssize
-g_daemon_file_input_stream_read_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple;
- gssize nread;
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
- g_assert (g_simple_async_result_get_source_tag (simple) == g_daemon_file_input_stream_read_async);
-
- nread = g_simple_async_result_get_op_res_gssize (simple);
- return nread;
-}
-
-
-static void
-g_daemon_file_input_stream_skip_async (GInputStream *stream,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data)
-{
- g_assert_not_reached ();
- /* TODO: Not implemented */
-}
-
-static gssize
-g_daemon_file_input_stream_skip_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- g_assert_not_reached ();
- /* TODO: Not implemented */
-}
-
-static void
-async_close_done (GInputStream *stream,
- gpointer op_data,
- GAsyncReadyCallback callback,
- gpointer user_data,
- GError *io_error)
-{
- GDaemonFileInputStream *file;
- GSimpleAsyncResult *simple;
- CloseOperation *op;
- gboolean result;
- GError *error;
- GCancellable *cancellable = NULL; /* TODO: get cancellable */
-
- file = G_DAEMON_FILE_INPUT_STREAM (stream);
-
- op = op_data;
-
- if (io_error)
- {
- result = FALSE;
- error = io_error;
- }
- else
- {
- result = op->ret_val;
- error = op->ret_error;
- }
-
- if (result)
- result = g_output_stream_close (file->command_stream, cancellable, &error);
- else
- g_output_stream_close (file->command_stream, cancellable, NULL);
-
- if (result)
- result = g_input_stream_close (file->data_stream, cancellable, &error);
- else
- g_input_stream_close (file->data_stream, cancellable, NULL);
-
-
- simple = g_simple_async_result_new (G_OBJECT (stream),
- callback, user_data,
- g_daemon_file_input_stream_read_async);
-
- if (!result)
- g_simple_async_result_set_from_error (simple, error);
-
- /* Complete immediately, not in idle, since we're already in a mainloop callout */
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- if (op->ret_error)
- g_error_free (op->ret_error);
- g_free (op);
-}
-
-static void
-g_daemon_file_input_stream_close_async (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data)
-{
- GDaemonFileInputStream *file;
- CloseOperation *op;
-
- file = G_DAEMON_FILE_INPUT_STREAM (stream);
-
- op = g_new0 (CloseOperation, 1);
- op->state = CLOSE_STATE_INIT;
-
- run_async_state_machine (file,
- (state_machine_iterator)iterate_close_state_machine,
- op, io_priority,
- callback, data,
- cancellable,
- async_close_done);
-}
-
-static gboolean
-g_daemon_file_input_stream_close_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- /* Failures handled in generic close_finish code */
- return TRUE;
-}
diff --git a/client/gdaemonfileinputstream.h b/client/gdaemonfileinputstream.h
deleted file mode 100644
index 2d4cc4ce..00000000
--- a/client/gdaemonfileinputstream.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_DAEMON_FILE_INPUT_STREAM_H__
-#define __G_DAEMON_FILE_INPUT_STREAM_H__
-
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_DAEMON_FILE_INPUT_STREAM (g_daemon_file_input_stream_get_type ())
-#define G_DAEMON_FILE_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DAEMON_FILE_INPUT_STREAM, GDaemonFileInputStream))
-#define G_DAEMON_FILE_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DAEMON_FILE_INPUT_STREAM, GDaemonFileInputStreamClass))
-#define G_IS_DAEMON_FILE_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DAEMON_FILE_INPUT_STREAM))
-#define G_IS_DAEMON_FILE_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DAEMON_FILE_INPUT_STREAM))
-#define G_DAEMON_FILE_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DAEMON_FILE_INPUT_STREAM, GDaemonFileInputStreamClass))
-
-typedef struct _GDaemonFileInputStream GDaemonFileInputStream;
-typedef struct _GDaemonFileInputStreamClass GDaemonFileInputStreamClass;
-
-struct _GDaemonFileInputStreamClass
-{
- GFileInputStreamClass parent_class;
-};
-
-GType g_daemon_file_input_stream_get_type (void) G_GNUC_CONST;
-
-GFileInputStream *g_daemon_file_input_stream_new (int fd,
- gboolean can_seek);
-
-G_END_DECLS
-
-#endif /* __G_DAEMON_FILE_INPUT_STREAM_H__ */
diff --git a/client/gdaemonfilemonitor.c b/client/gdaemonfilemonitor.c
deleted file mode 100644
index 61b35e54..00000000
--- a/client/gdaemonfilemonitor.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-#include <string.h>
-
-#include "gdaemonfilemonitor.h"
-#include <gio/gio.h>
-#include <gvfsdaemondbus.h>
-#include <gvfsdaemonprotocol.h>
-#include "gdbusutils.h"
-#include "gmountspec.h"
-#include "gdaemonfile.h"
-
-#define OBJ_PATH_PREFIX "/org/gtk/vfs/client/filemonitor/"
-
-/* atomic */
-static volatile gint path_counter = 1;
-
-static gboolean g_daemon_file_monitor_cancel (GFileMonitor* monitor);
-static DBusHandlerResult g_daemon_file_monitor_dbus_filter (DBusConnection *connection,
- DBusMessage *message,
- void *user_data);
-
-
-struct _GDaemonFileMonitor
-{
- GFileMonitor parent_instance;
-
- char *object_path;
- char *remote_obj_path;
- char *remote_id;
-};
-
-G_DEFINE_TYPE (GDaemonFileMonitor, g_daemon_file_monitor, G_TYPE_FILE_MONITOR)
-
-static void
-g_daemon_file_monitor_finalize (GObject* object)
-{
- GDaemonFileMonitor *daemon_monitor;
-
- daemon_monitor = G_DAEMON_FILE_MONITOR (object);
-
- _g_dbus_unregister_vfs_filter (daemon_monitor->object_path);
-
- g_free (daemon_monitor->object_path);
- g_free (daemon_monitor->remote_id);
- g_free (daemon_monitor->remote_obj_path);
-
- if (G_OBJECT_CLASS (g_daemon_file_monitor_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_daemon_file_monitor_parent_class)->finalize) (object);
-}
-
-static void
-g_daemon_file_monitor_class_init (GDaemonFileMonitorClass* klass)
-{
- GObjectClass* gobject_class = G_OBJECT_CLASS (klass);
- GFileMonitorClass *file_monitor_class = G_FILE_MONITOR_CLASS (klass);
-
- gobject_class->finalize = g_daemon_file_monitor_finalize;
-
- file_monitor_class->cancel = g_daemon_file_monitor_cancel;
-}
-
-static void
-g_daemon_file_monitor_init (GDaemonFileMonitor* daemon_monitor)
-{
- gint id;
-
- id = g_atomic_int_exchange_and_add (&path_counter, 1);
-
- daemon_monitor->object_path = g_strdup_printf (OBJ_PATH_PREFIX"%d", id);
-
- _g_dbus_register_vfs_filter (daemon_monitor->object_path,
- g_daemon_file_monitor_dbus_filter,
- G_OBJECT (daemon_monitor));
-}
-
-GFileMonitor*
-g_daemon_file_monitor_new (const char *remote_id,
- const char *remote_obj_path)
-{
- GDaemonFileMonitor* daemon_monitor;
- DBusMessage *message;
-
- daemon_monitor = g_object_new (G_TYPE_DAEMON_FILE_MONITOR, NULL);
-
- daemon_monitor->remote_id = g_strdup (remote_id);
- daemon_monitor->remote_obj_path = g_strdup (remote_obj_path);
-
- message =
- dbus_message_new_method_call (daemon_monitor->remote_id,
- daemon_monitor->remote_obj_path,
- G_VFS_DBUS_MONITOR_INTERFACE,
- G_VFS_DBUS_MONITOR_OP_SUBSCRIBE);
-
- _g_dbus_message_append_args (message, DBUS_TYPE_OBJECT_PATH,
- &daemon_monitor->object_path, 0);
-
- _g_vfs_daemon_call_async (message,
- NULL, NULL,
- NULL);
-
- dbus_message_unref (message);
-
- return G_FILE_MONITOR (daemon_monitor);
-}
-
-static DBusHandlerResult
-g_daemon_file_monitor_dbus_filter (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
-{
- GDaemonFileMonitor *monitor = G_DAEMON_FILE_MONITOR (user_data);
- const char *member;
- guint32 event_type;
- DBusMessageIter iter;
- GMountSpec *spec1, *spec2;
- char *path1, *path2;
- GFile *file1, *file2;
-
- member = dbus_message_get_member (message);
-
- if (strcmp (member, G_VFS_DBUS_MONITOR_CLIENT_OP_CHANGED) == 0)
- {
- dbus_message_iter_init (message, &iter);
-
- if (!_g_dbus_message_iter_get_args (&iter, NULL,
- DBUS_TYPE_UINT32, &event_type,
- 0))
- return DBUS_HANDLER_RESULT_HANDLED;
-
- spec1 = g_mount_spec_from_dbus (&iter);
- if (!_g_dbus_message_iter_get_args (&iter, NULL,
- G_DBUS_TYPE_CSTRING, &path1,
- 0))
- {
- g_mount_spec_unref (spec1);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- file1 = g_daemon_file_new (spec1, path1);
-
- g_mount_spec_unref (spec1);
- g_free (path1);
-
- file2 = NULL;
-
- spec2 = g_mount_spec_from_dbus (&iter);
- if (spec2) {
- if (_g_dbus_message_iter_get_args (&iter, NULL,
- G_DBUS_TYPE_CSTRING, &path2,
- 0))
- {
- file2 = g_daemon_file_new (spec2, path2);
-
- g_free (path2);
- }
-
- g_mount_spec_unref (spec2);
- }
-
- g_file_monitor_emit_event (G_FILE_MONITOR (monitor),
- file1, file2,
- event_type);
-
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-
-static gboolean
-g_daemon_file_monitor_cancel (GFileMonitor* monitor)
-{
- GDaemonFileMonitor *daemon_monitor = G_DAEMON_FILE_MONITOR (monitor);
- DBusMessage *message;
-
- message =
- dbus_message_new_method_call (daemon_monitor->remote_id,
- daemon_monitor->remote_obj_path,
- G_VFS_DBUS_MONITOR_INTERFACE,
- G_VFS_DBUS_MONITOR_OP_UNSUBSCRIBE);
-
- _g_vfs_daemon_call_async (message,
- NULL, NULL,
- NULL);
-
- dbus_message_unref (message);
-
- return TRUE;
-}
-
diff --git a/client/gdaemonfilemonitor.h b/client/gdaemonfilemonitor.h
deleted file mode 100644
index 9cd02175..00000000
--- a/client/gdaemonfilemonitor.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_DAEMON_FILE_MONITOR_H__
-#define __G_DAEMON_FILE_MONITOR_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_DAEMON_FILE_MONITOR (g_daemon_file_monitor_get_type ())
-#define G_DAEMON_FILE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DAEMON_FILE_MONITOR, GDaemonFileMonitor))
-#define G_DAEMON_FILE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), G_TYPE_DAEMON_FILE_MONITOR, GDaemonFileMonitorClass))
-#define G_IS_DAEMON_FILE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DAEMON_FILE_MONITOR))
-#define G_IS_DAEMON_FILE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DAEMON_FILE_MONITOR))
-
-typedef struct _GDaemonFileMonitor GDaemonFileMonitor;
-typedef struct _GDaemonFileMonitorClass GDaemonFileMonitorClass;
-
-struct _GDaemonFileMonitorClass {
- GFileMonitorClass parent_class;
-};
-
-GType g_daemon_file_monitor_get_type (void) G_GNUC_CONST;
-
-GFileMonitor* g_daemon_file_monitor_new (const char *remote_id,
- const char *remote_obj_path);
-
-
-G_END_DECLS
-
-#endif /* __G_DAEMON_FILE_MONITOR_H__ */
diff --git a/client/gdaemonfileoutputstream.c b/client/gdaemonfileoutputstream.c
deleted file mode 100644
index 525475c8..00000000
--- a/client/gdaemonfileoutputstream.c
+++ /dev/null
@@ -1,1374 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <glib/gstdio.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-#include <gio/gunixinputstream.h>
-#include <gio/gunixoutputstream.h>
-#include "gdaemonfileoutputstream.h"
-#include "gvfsdaemondbus.h"
-#include <gvfsdaemonprotocol.h>
-
-#define MAX_WRITE_SIZE (4*1024*1024)
-
-typedef enum {
- STATE_OP_DONE,
- STATE_OP_READ,
- STATE_OP_WRITE,
- STATE_OP_SKIP
-} StateOp;
-
-typedef enum {
- WRITE_STATE_INIT = 0,
- WRITE_STATE_WROTE_COMMAND,
- WRITE_STATE_SEND_DATA,
- WRITE_STATE_HANDLE_INPUT
-} WriteState;
-
-typedef struct {
- WriteState state;
-
- /* Output */
- const char *buffer;
- gsize buffer_size;
- gsize buffer_pos;
-
- /* Input */
- gssize ret_val;
- GError *ret_error;
-
- gboolean sent_cancel;
-
- guint32 seq_nr;
-} WriteOperation;
-
-typedef enum {
- SEEK_STATE_INIT = 0,
- SEEK_STATE_WROTE_REQUEST,
- SEEK_STATE_HANDLE_INPUT
-} SeekState;
-
-typedef struct {
- SeekState state;
-
- /* Output */
- goffset offset;
- GSeekType seek_type;
- /* Output */
- gboolean ret_val;
- GError *ret_error;
- goffset ret_offset;
-
- gboolean sent_cancel;
-
- guint32 seq_nr;
-} SeekOperation;
-
-typedef enum {
- CLOSE_STATE_INIT = 0,
- CLOSE_STATE_WROTE_REQUEST,
- CLOSE_STATE_HANDLE_INPUT
-} CloseState;
-
-typedef struct {
- CloseState state;
-
- /* Output */
-
- /* Output */
- gboolean ret_val;
- GError *ret_error;
-
- gboolean sent_cancel;
-
- guint32 seq_nr;
-} CloseOperation;
-
-
-typedef struct {
- gboolean cancelled;
-
- char *io_buffer;
- gsize io_size;
- gsize io_res;
- /* The operation always succeeds, or gets cancelled.
- If we get an error doing the i/o that is considered fatal */
- gboolean io_allow_cancel;
- gboolean io_cancelled;
-} IOOperationData;
-
-typedef StateOp (*state_machine_iterator) (GDaemonFileOutputStream *file, IOOperationData *io_op, gpointer data);
-
-struct _GDaemonFileOutputStream {
- GFileOutputStream parent;
-
- GOutputStream *command_stream;
- GInputStream *data_stream;
- guint can_seek : 1;
-
- guint32 seq_nr;
- goffset current_offset;
-
- gsize input_block_size;
- GString *input_buffer;
-
- GString *output_buffer;
-
- char *etag;
-
-};
-
-static gssize g_daemon_file_output_stream_write (GOutputStream *stream,
- const void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error);
-static gboolean g_daemon_file_output_stream_close (GOutputStream *stream,
- GCancellable *cancellable,
- GError **error);
-static GFileInfo *g_daemon_file_output_stream_query_info (GFileOutputStream *stream,
- char *attributes,
- GCancellable *cancellable,
- GError **error);
-static char *g_daemon_file_output_stream_get_etag (GFileOutputStream *stream);
-static goffset g_daemon_file_output_stream_tell (GFileOutputStream *stream);
-static gboolean g_daemon_file_output_stream_can_seek (GFileOutputStream *stream);
-static gboolean g_daemon_file_output_stream_seek (GFileOutputStream *stream,
- goffset offset,
- GSeekType type,
- GCancellable *cancellable,
- GError **error);
-static void g_daemon_file_output_stream_write_async (GOutputStream *stream,
- const void *buffer,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data);
-static gssize g_daemon_file_output_stream_write_finish (GOutputStream *stream,
- GAsyncResult *result,
- GError **error);
-static void g_daemon_file_output_stream_close_async (GOutputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data);
-static gboolean g_daemon_file_output_stream_close_finish (GOutputStream *stream,
- GAsyncResult *result,
- GError **error);
-
-G_DEFINE_TYPE (GDaemonFileOutputStream, g_daemon_file_output_stream,
- G_TYPE_FILE_OUTPUT_STREAM)
-
-static void
-g_daemon_file_output_stream_finalize (GObject *object)
-{
- GDaemonFileOutputStream *file;
-
- file = G_DAEMON_FILE_OUTPUT_STREAM (object);
-
- if (file->command_stream)
- g_object_unref (file->command_stream);
- if (file->data_stream)
- g_object_unref (file->data_stream);
-
- g_string_free (file->input_buffer, TRUE);
- g_string_free (file->output_buffer, TRUE);
-
- g_free (file->etag);
-
- if (G_OBJECT_CLASS (g_daemon_file_output_stream_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_daemon_file_output_stream_parent_class)->finalize) (object);
-}
-
-static void
-g_daemon_file_output_stream_class_init (GDaemonFileOutputStreamClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GOutputStreamClass *stream_class = G_OUTPUT_STREAM_CLASS (klass);
- GFileOutputStreamClass *file_stream_class = G_FILE_OUTPUT_STREAM_CLASS (klass);
-
- gobject_class->finalize = g_daemon_file_output_stream_finalize;
-
- stream_class->write_fn = g_daemon_file_output_stream_write;
- stream_class->close_fn = g_daemon_file_output_stream_close;
-
- stream_class->write_async = g_daemon_file_output_stream_write_async;
- stream_class->write_finish = g_daemon_file_output_stream_write_finish;
- stream_class->close_async = g_daemon_file_output_stream_close_async;
- stream_class->close_finish = g_daemon_file_output_stream_close_finish;
-
- file_stream_class->tell = g_daemon_file_output_stream_tell;
- file_stream_class->can_seek = g_daemon_file_output_stream_can_seek;
- file_stream_class->seek = g_daemon_file_output_stream_seek;
- file_stream_class->query_info = g_daemon_file_output_stream_query_info;
- file_stream_class->get_etag = g_daemon_file_output_stream_get_etag;
-}
-
-static void
-g_daemon_file_output_stream_init (GDaemonFileOutputStream *info)
-{
- info->output_buffer = g_string_new ("");
- info->input_buffer = g_string_new ("");
- info->seq_nr = 1;
-}
-
-GFileOutputStream *
-g_daemon_file_output_stream_new (int fd,
- gboolean can_seek,
- goffset initial_offset)
-{
- GDaemonFileOutputStream *stream;
-
- stream = g_object_new (G_TYPE_DAEMON_FILE_OUTPUT_STREAM, NULL);
-
- stream->command_stream = g_unix_output_stream_new (fd, FALSE);
- stream->data_stream = g_unix_input_stream_new (fd, TRUE);
- stream->can_seek = can_seek;
- stream->current_offset = initial_offset;
-
- return G_FILE_OUTPUT_STREAM (stream);
-}
-
-static gboolean
-error_is_cancel (GError *error)
-{
- return error != NULL &&
- error->domain == G_IO_ERROR &&
- error->code == G_IO_ERROR_CANCELLED;
-}
-
-static void
-append_request (GDaemonFileOutputStream *stream, guint32 command,
- guint32 arg1, guint32 arg2, guint32 data_len, guint32 *seq_nr)
-{
- GVfsDaemonSocketProtocolRequest cmd;
-
- g_assert (sizeof (cmd) == G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SIZE);
-
- if (seq_nr)
- *seq_nr = stream->seq_nr;
-
- cmd.command = g_htonl (command);
- cmd.seq_nr = g_htonl (stream->seq_nr++);
- cmd.arg1 = g_htonl (arg1);
- cmd.arg2 = g_htonl (arg2);
- cmd.data_len = g_htonl (data_len);
-
- g_string_append_len (stream->output_buffer,
- (char *)&cmd, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SIZE);
-}
-
-static gsize
-get_reply_header_missing_bytes (GString *buffer)
-{
- GVfsDaemonSocketProtocolReply *reply;
- guint32 type;
- guint32 arg2;
-
- if (buffer->len < G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE)
- return G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE - buffer->len;
-
- reply = (GVfsDaemonSocketProtocolReply *)buffer->str;
-
- type = g_ntohl (reply->type);
- arg2 = g_ntohl (reply->arg2);
-
- /* ERROR and CLOSED has extra data w/ len in arg2 */
- if (type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_ERROR ||
- type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_CLOSED)
- return G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE + arg2 - buffer->len;
- return 0;
-}
-
-static char *
-decode_reply (GString *buffer, GVfsDaemonSocketProtocolReply *reply_out)
-{
- GVfsDaemonSocketProtocolReply *reply;
- reply = (GVfsDaemonSocketProtocolReply *)buffer->str;
- reply_out->type = g_ntohl (reply->type);
- reply_out->seq_nr = g_ntohl (reply->seq_nr);
- reply_out->arg1 = g_ntohl (reply->arg1);
- reply_out->arg2 = g_ntohl (reply->arg2);
-
- return buffer->str + G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE;
-}
-
-static void
-decode_error (GVfsDaemonSocketProtocolReply *reply, char *data, GError **error)
-{
- g_set_error_literal (error,
- g_quark_from_string (data),
- reply->arg1,
- data + strlen (data) + 1);
-}
-
-
-static gboolean
-run_sync_state_machine (GDaemonFileOutputStream *file,
- state_machine_iterator iterator,
- gpointer data,
- GCancellable *cancellable,
- GError **error)
-{
- gssize res;
- StateOp io_op;
- IOOperationData io_data;
- GError *io_error;
-
- memset (&io_data, 0, sizeof (io_data));
-
- while (TRUE)
- {
- if (cancellable)
- io_data.cancelled = g_cancellable_is_cancelled (cancellable);
-
- io_op = iterator (file, &io_data, data);
-
- if (io_op == STATE_OP_DONE)
- return TRUE;
-
- io_error = NULL;
- if (io_op == STATE_OP_READ)
- {
- res = g_input_stream_read (file->data_stream,
- io_data.io_buffer, io_data.io_size,
- io_data.io_allow_cancel ? cancellable : NULL,
- &io_error);
- }
- else if (io_op == STATE_OP_SKIP)
- {
- res = g_input_stream_skip (file->data_stream,
- io_data.io_size,
- io_data.io_allow_cancel ? cancellable : NULL,
- &io_error);
- }
- else if (io_op == STATE_OP_WRITE)
- {
- res = g_output_stream_write (file->command_stream,
- io_data.io_buffer, io_data.io_size,
- io_data.io_allow_cancel ? cancellable : NULL,
- &io_error);
- }
- else
- {
- res = 0;
- g_assert_not_reached ();
- }
-
- if (res == -1)
- {
- if (error_is_cancel (io_error))
- {
- io_data.io_res = 0;
- io_data.io_cancelled = TRUE;
- g_error_free (io_error);
- }
- else
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Error in stream protocol: %s"), io_error->message);
- g_error_free (io_error);
- return FALSE;
- }
- }
- else if (res == 0 && io_data.io_size != 0)
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Error in stream protocol: %s"), _("End of stream"));
- return FALSE;
- }
- else
- {
- io_data.io_res = res;
- io_data.io_cancelled = FALSE;
- }
- }
-}
-
-/* read cycle:
-
- if we know of a (partially read) matching outstanding block, read from it
- create packet, append to outgoing
- flush outgoing
- start processing output, looking for a data block with same seek gen,
- or an error with same seq nr
- on cancel, send cancel command and go back to loop
- */
-
-static StateOp
-iterate_write_state_machine (GDaemonFileOutputStream *file, IOOperationData *io_op, WriteOperation *op)
-{
- gsize len;
-
- while (TRUE)
- {
- switch (op->state)
- {
- /* Initial state for read op */
- case WRITE_STATE_INIT:
- append_request (file, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_WRITE,
- op->buffer_size, 0, op->buffer_size, &op->seq_nr);
- op->state = WRITE_STATE_WROTE_COMMAND;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = TRUE; /* Allow cancel before first byte of request sent */
- return STATE_OP_WRITE;
-
- /* wrote parts of output_buffer */
- case WRITE_STATE_WROTE_COMMAND:
- if (io_op->io_cancelled)
- {
- op->ret_val = -1;
- g_set_error_literal (&op->ret_error,
- G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return STATE_OP_DONE;
- }
-
- if (io_op->io_res < file->output_buffer->len)
- {
- memcpy (file->output_buffer->str,
- file->output_buffer->str + io_op->io_res,
- file->output_buffer->len - io_op->io_res);
- g_string_truncate (file->output_buffer,
- file->output_buffer->len - io_op->io_res);
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
- g_string_truncate (file->output_buffer, 0);
-
- op->buffer_pos = 0;
- if (op->sent_cancel)
- op->state = WRITE_STATE_HANDLE_INPUT;
- else
- op->state = WRITE_STATE_SEND_DATA;
- break;
-
- /* No op */
- case WRITE_STATE_SEND_DATA:
- op->buffer_pos += io_op->io_res;
-
- if (op->buffer_pos < op->buffer_size)
- {
- io_op->io_buffer = (char *)(op->buffer + op->buffer_pos);
- io_op->io_size = op->buffer_size - op->buffer_pos;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
-
- op->state = WRITE_STATE_HANDLE_INPUT;
- break;
-
- /* No op */
- case WRITE_STATE_HANDLE_INPUT:
- if (io_op->cancelled && !op->sent_cancel)
- {
- op->sent_cancel = TRUE;
- append_request (file, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CANCEL,
- op->seq_nr, 0, 0, NULL);
- op->state = WRITE_STATE_WROTE_COMMAND;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
-
- if (io_op->io_res > 0)
- {
- gsize unread_size = io_op->io_size - io_op->io_res;
- g_string_set_size (file->input_buffer,
- file->input_buffer->len - unread_size);
- }
-
- len = get_reply_header_missing_bytes (file->input_buffer);
- if (len > 0)
- {
- gsize current_len = file->input_buffer->len;
- g_string_set_size (file->input_buffer,
- current_len + len);
- io_op->io_buffer = file->input_buffer->str + current_len;
- io_op->io_size = len;
- io_op->io_allow_cancel = !op->sent_cancel;
- return STATE_OP_READ;
- }
-
- /* Got full header */
-
- {
- GVfsDaemonSocketProtocolReply reply;
- char *data;
- data = decode_reply (file->input_buffer, &reply);
-
- if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_ERROR &&
- reply.seq_nr == op->seq_nr)
- {
- op->ret_val = -1;
- decode_error (&reply, data, &op->ret_error);
- g_string_truncate (file->input_buffer, 0);
- return STATE_OP_DONE;
- }
- else if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_WRITTEN)
- {
- op->ret_val = reply.arg1;
- g_string_truncate (file->input_buffer, 0);
- return STATE_OP_DONE;
- }
- /* Ignore other reply types */
- }
-
- g_string_truncate (file->input_buffer, 0);
-
- /* This wasn't interesting, read next reply */
- op->state = WRITE_STATE_HANDLE_INPUT;
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- /* Clear io_op between non-op state switches */
- io_op->io_size = 0;
- io_op->io_res = 0;
- io_op->io_cancelled = FALSE;
-
- }
-}
-
-static gssize
-g_daemon_file_output_stream_write (GOutputStream *stream,
- const void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error)
-{
- GDaemonFileOutputStream *file;
- WriteOperation op;
-
- file = G_DAEMON_FILE_OUTPUT_STREAM (stream);
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return -1;
-
- /* Limit for sanity and to avoid 32bit overflow */
- if (count > MAX_WRITE_SIZE)
- count = MAX_WRITE_SIZE;
-
- memset (&op, 0, sizeof (op));
- op.state = WRITE_STATE_INIT;
- op.buffer = buffer;
- op.buffer_size = count;
-
- if (!run_sync_state_machine (file, (state_machine_iterator)iterate_write_state_machine,
- &op, cancellable, error))
- return -1; /* IO Error */
-
- if (op.ret_val == -1)
- g_propagate_error (error, op.ret_error);
- else
- file->current_offset += op.ret_val;
-
- return op.ret_val;
-}
-
-static StateOp
-iterate_close_state_machine (GDaemonFileOutputStream *file, IOOperationData *io_op, CloseOperation *op)
-{
- gsize len;
-
- while (TRUE)
- {
- switch (op->state)
- {
- /* Initial state for read op */
- case CLOSE_STATE_INIT:
- append_request (file, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CLOSE,
- 0, 0, 0, &op->seq_nr);
- op->state = CLOSE_STATE_WROTE_REQUEST;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = TRUE; /* Allow cancel before first byte of request sent */
- return STATE_OP_WRITE;
-
- /* wrote parts of output_buffer */
- case CLOSE_STATE_WROTE_REQUEST:
- if (io_op->io_cancelled)
- {
- op->ret_val = FALSE;
- g_set_error_literal (&op->ret_error,
- G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return STATE_OP_DONE;
- }
-
- if (io_op->io_res < file->output_buffer->len)
- {
- memcpy (file->output_buffer->str,
- file->output_buffer->str + io_op->io_res,
- file->output_buffer->len - io_op->io_res);
- g_string_truncate (file->output_buffer,
- file->output_buffer->len - io_op->io_res);
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
- g_string_truncate (file->output_buffer, 0);
-
- op->state = CLOSE_STATE_HANDLE_INPUT;
- break;
-
- /* No op */
- case CLOSE_STATE_HANDLE_INPUT:
- if (io_op->cancelled && !op->sent_cancel)
- {
- op->sent_cancel = TRUE;
- append_request (file, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CANCEL,
- op->seq_nr, 0, 0, NULL);
- op->state = CLOSE_STATE_WROTE_REQUEST;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
-
- if (io_op->io_res > 0)
- {
- gsize unread_size = io_op->io_size - io_op->io_res;
- g_string_set_size (file->input_buffer,
- file->input_buffer->len - unread_size);
- }
-
- len = get_reply_header_missing_bytes (file->input_buffer);
- if (len > 0)
- {
- gsize current_len = file->input_buffer->len;
- g_string_set_size (file->input_buffer,
- current_len + len);
- io_op->io_buffer = file->input_buffer->str + current_len;
- io_op->io_size = len;
- io_op->io_allow_cancel = !op->sent_cancel;
- return STATE_OP_READ;
- }
-
- /* Got full header */
-
- {
- GVfsDaemonSocketProtocolReply reply;
- char *data;
- data = decode_reply (file->input_buffer, &reply);
-
- if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_ERROR &&
- reply.seq_nr == op->seq_nr)
- {
- op->ret_val = FALSE;
- decode_error (&reply, data, &op->ret_error);
- g_string_truncate (file->input_buffer, 0);
- return STATE_OP_DONE;
- }
- else if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_CLOSED)
- {
- op->ret_val = TRUE;
- if (reply.arg2 > 0)
- file->etag = g_strndup (data, reply.arg2);
- g_string_truncate (file->input_buffer, 0);
- return STATE_OP_DONE;
- }
- /* Ignore other reply types */
- }
-
- g_string_truncate (file->input_buffer, 0);
-
- /* This wasn't interesting, read next reply */
- op->state = CLOSE_STATE_HANDLE_INPUT;
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- /* Clear io_op between non-op state switches */
- io_op->io_size = 0;
- io_op->io_res = 0;
- io_op->io_cancelled = FALSE;
- }
-}
-
-
-static gboolean
-g_daemon_file_output_stream_close (GOutputStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- GDaemonFileOutputStream *file;
- CloseOperation op;
- gboolean res;
-
- file = G_DAEMON_FILE_OUTPUT_STREAM (stream);
-
- /* We need to do a full roundtrip to guarantee that the writes have
- reached the disk. */
-
- memset (&op, 0, sizeof (op));
- op.state = CLOSE_STATE_INIT;
-
- if (!run_sync_state_machine (file, (state_machine_iterator)iterate_close_state_machine,
- &op, cancellable, error))
- res = FALSE;
- else
- {
- if (!op.ret_val)
- g_propagate_error (error, op.ret_error);
- res = op.ret_val;
- }
-
- /* Return the first error, but close all streams */
- if (res)
- res = g_output_stream_close (file->command_stream, cancellable, error);
- else
- g_output_stream_close (file->command_stream, cancellable, NULL);
-
- if (res)
- res = g_input_stream_close (file->data_stream, cancellable, error);
- else
- g_input_stream_close (file->data_stream, cancellable, NULL);
-
- return res;
-}
-
-static goffset
-g_daemon_file_output_stream_tell (GFileOutputStream *stream)
-{
- GDaemonFileOutputStream *file;
-
- file = G_DAEMON_FILE_OUTPUT_STREAM (stream);
-
- return file->current_offset;
-}
-
-static gboolean
-g_daemon_file_output_stream_can_seek (GFileOutputStream *stream)
-{
- GDaemonFileOutputStream *file;
-
- file = G_DAEMON_FILE_OUTPUT_STREAM (stream);
-
- return file->can_seek;
-}
-
-static StateOp
-iterate_seek_state_machine (GDaemonFileOutputStream *file, IOOperationData *io_op, SeekOperation *op)
-{
- gsize len;
- guint32 request;
-
- while (TRUE)
- {
- switch (op->state)
- {
- /* Initial state for read op */
- case SEEK_STATE_INIT:
- request = G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_SET;
- if (op->seek_type == G_SEEK_CUR)
- op->offset = file->current_offset + op->offset;
- else if (op->seek_type == G_SEEK_END)
- request = G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_END;
- append_request (file, request,
- op->offset & 0xffffffff,
- op->offset >> 32,
- 0,
- &op->seq_nr);
- op->state = SEEK_STATE_WROTE_REQUEST;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = TRUE; /* Allow cancel before first byte of request sent */
- return STATE_OP_WRITE;
-
- /* wrote parts of output_buffer */
- case SEEK_STATE_WROTE_REQUEST:
- if (io_op->io_cancelled)
- {
- op->ret_val = -1;
- g_set_error_literal (&op->ret_error,
- G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return STATE_OP_DONE;
- }
-
- if (io_op->io_res < file->output_buffer->len)
- {
- memcpy (file->output_buffer->str,
- file->output_buffer->str + io_op->io_res,
- file->output_buffer->len - io_op->io_res);
- g_string_truncate (file->output_buffer,
- file->output_buffer->len - io_op->io_res);
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
- g_string_truncate (file->output_buffer, 0);
-
- op->state = SEEK_STATE_HANDLE_INPUT;
- break;
-
- /* No op */
- case SEEK_STATE_HANDLE_INPUT:
- if (io_op->cancelled && !op->sent_cancel)
- {
- op->sent_cancel = TRUE;
- append_request (file, G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CANCEL,
- op->seq_nr, 0, 0, NULL);
- op->state = SEEK_STATE_WROTE_REQUEST;
- io_op->io_buffer = file->output_buffer->str;
- io_op->io_size = file->output_buffer->len;
- io_op->io_allow_cancel = FALSE;
- return STATE_OP_WRITE;
- }
-
- if (io_op->io_res > 0)
- {
- gsize unread_size = io_op->io_size - io_op->io_res;
- g_string_set_size (file->input_buffer,
- file->input_buffer->len - unread_size);
- }
-
- len = get_reply_header_missing_bytes (file->input_buffer);
- if (len > 0)
- {
- gsize current_len = file->input_buffer->len;
- g_string_set_size (file->input_buffer,
- current_len + len);
- io_op->io_buffer = file->input_buffer->str + current_len;
- io_op->io_size = len;
- io_op->io_allow_cancel = !op->sent_cancel;
- return STATE_OP_READ;
- }
-
- /* Got full header */
-
- {
- GVfsDaemonSocketProtocolReply reply;
- char *data;
- data = decode_reply (file->input_buffer, &reply);
-
- if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_ERROR &&
- reply.seq_nr == op->seq_nr)
- {
- op->ret_val = FALSE;
- decode_error (&reply, data, &op->ret_error);
- g_string_truncate (file->input_buffer, 0);
- return STATE_OP_DONE;
- }
- else if (reply.type == G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SEEK_POS)
- {
- op->ret_val = TRUE;
- op->ret_offset = ((goffset)reply.arg2) << 32 | (goffset)reply.arg1;
- g_string_truncate (file->input_buffer, 0);
- return STATE_OP_DONE;
- }
- /* Ignore other reply types */
- }
-
- g_string_truncate (file->input_buffer, 0);
-
- /* This wasn't interesting, read next reply */
- op->state = SEEK_STATE_HANDLE_INPUT;
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- /* Clear io_op between non-op state switches */
- io_op->io_size = 0;
- io_op->io_res = 0;
- io_op->io_cancelled = FALSE;
- }
-}
-
-static gboolean
-g_daemon_file_output_stream_seek (GFileOutputStream *stream,
- goffset offset,
- GSeekType type,
- GCancellable *cancellable,
- GError **error)
-{
- GDaemonFileOutputStream *file;
- SeekOperation op;
-
- file = G_DAEMON_FILE_OUTPUT_STREAM (stream);
-
- if (!file->can_seek)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Seek not supported on stream"));
- return FALSE;
- }
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return FALSE;
-
- memset (&op, 0, sizeof (op));
- op.state = SEEK_STATE_INIT;
- op.offset = offset;
- op.seek_type = type;
-
- if (!run_sync_state_machine (file, (state_machine_iterator)iterate_seek_state_machine,
- &op, cancellable, error))
- return FALSE; /* IO Error */
-
- if (!op.ret_val)
- g_propagate_error (error, op.ret_error);
- else
- file->current_offset = op.ret_offset;
-
- return op.ret_val;
-}
-
-static char *
-g_daemon_file_output_stream_get_etag (GFileOutputStream *stream)
-{
- GDaemonFileOutputStream *file;
-
- file = G_DAEMON_FILE_OUTPUT_STREAM (stream);
-
- return g_strdup (file->etag);
-}
-
-static GFileInfo *
-g_daemon_file_output_stream_query_info (GFileOutputStream *stream,
- char *attributes,
- GCancellable *cancellable,
- GError **error)
-{
-#if 0
- GDaemonFileOutputStream *file;
-
- file = G_DAEMON_FILE_OUTPUT_STREAM (stream);
-#endif
-
- g_set_error (error,
- G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Query info not supported on stream"));
-
- return NULL;
-}
-
-/************************************************************************
- * Async I/O Code *
- ************************************************************************/
-
-typedef struct AsyncIterator AsyncIterator;
-
-typedef void (*AsyncIteratorDone) (GOutputStream *stream,
- gpointer op_data,
- GAsyncReadyCallback callback,
- gpointer callback_data,
- GError *io_error);
-
-struct AsyncIterator {
- AsyncIteratorDone done_cb;
- GDaemonFileOutputStream *file;
- GCancellable *cancellable;
- IOOperationData io_data;
- state_machine_iterator iterator;
- gpointer iterator_data;
- int io_priority;
- GAsyncReadyCallback callback;
- gpointer callback_data;
-};
-
-static void async_iterate (AsyncIterator *iterator);
-
-static void
-async_iterator_done (AsyncIterator *iterator, GError *io_error)
-{
- iterator->done_cb (G_OUTPUT_STREAM (iterator->file),
- iterator->iterator_data,
- iterator->callback,
- iterator->callback_data,
- io_error);
-
- g_free (iterator);
-
-}
-
-static void
-async_op_handle (AsyncIterator *iterator,
- gssize res,
- GError *io_error)
-{
- IOOperationData *io_data = &iterator->io_data;
- GError *error;
-
- if (io_error != NULL)
- {
- if (error_is_cancel (io_error))
- {
- io_data->io_res = 0;
- io_data->io_cancelled = TRUE;
- }
- else
- {
- error = NULL;
- g_set_error (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Error in stream protocol: %s"), io_error->message);
- async_iterator_done (iterator, error);
- g_error_free (error);
- return;
- }
- }
- else if (res == 0 && io_data->io_size != 0)
- {
- error = NULL;
- g_set_error (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Error in stream protocol: %s"), _("End of stream"));
- async_iterator_done (iterator, error);
- g_error_free (error);
- return;
- }
- else
- {
- io_data->io_res = res;
- io_data->io_cancelled = FALSE;
- }
-
- async_iterate (iterator);
-}
-
-static void
-async_read_op_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GInputStream *stream = G_INPUT_STREAM (source_object);
- gssize count_read;
- GError *error = NULL;
-
- count_read = g_input_stream_read_finish (stream, res, &error);
-
- async_op_handle ((AsyncIterator *)user_data, count_read, error);
- if (error)
- g_error_free (error);
-}
-
-static void
-async_skip_op_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GInputStream *stream = G_INPUT_STREAM (source_object);
- gssize count_skipped;
- GError *error = NULL;
-
- count_skipped = g_input_stream_skip_finish (stream, res, &error);
-
- async_op_handle ((AsyncIterator *)user_data, count_skipped, error);
- if (error)
- g_error_free (error);
-}
-
-static void
-async_write_op_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GOutputStream *stream = G_OUTPUT_STREAM (source_object);
- gssize bytes_written;
- GError *error = NULL;
-
- bytes_written = g_output_stream_write_finish (stream, res, &error);
-
- async_op_handle ((AsyncIterator *)user_data, bytes_written, error);
- if (error)
- g_error_free (error);
-}
-
-static void
-async_iterate (AsyncIterator *iterator)
-{
- IOOperationData *io_data = &iterator->io_data;
- GDaemonFileOutputStream *file = iterator->file;
- StateOp io_op;
-
- io_data->cancelled =
- g_cancellable_is_cancelled (iterator->cancellable);
-
- io_op = iterator->iterator (file, io_data, iterator->iterator_data);
-
- if (io_op == STATE_OP_DONE)
- {
- async_iterator_done (iterator, NULL);
- return;
- }
-
- /* TODO: Handle allow_cancel... */
-
- if (io_op == STATE_OP_READ)
- {
- g_input_stream_read_async (file->data_stream,
- io_data->io_buffer, io_data->io_size,
- iterator->io_priority,
- io_data->io_allow_cancel ? iterator->cancellable : NULL,
- async_read_op_callback, iterator);
- }
- else if (io_op == STATE_OP_SKIP)
- {
- g_input_stream_skip_async (file->data_stream,
- io_data->io_size,
- iterator->io_priority,
- io_data->io_allow_cancel ? iterator->cancellable : NULL,
- async_skip_op_callback, iterator);
- }
- else if (io_op == STATE_OP_WRITE)
- {
- g_output_stream_write_async (file->command_stream,
- io_data->io_buffer, io_data->io_size,
- iterator->io_priority,
- io_data->io_allow_cancel ? iterator->cancellable : NULL,
- async_write_op_callback, iterator);
- }
- else
- g_assert_not_reached ();
-}
-
-static void
-run_async_state_machine (GDaemonFileOutputStream *file,
- state_machine_iterator iterator_cb,
- gpointer iterator_data,
- int io_priority,
- GAsyncReadyCallback callback,
- gpointer data,
- GCancellable *cancellable,
- AsyncIteratorDone done_cb)
-{
- AsyncIterator *iterator;
-
- iterator = g_new0 (AsyncIterator, 1);
- iterator->file = file;
- iterator->iterator = iterator_cb;
- iterator->iterator_data = iterator_data;
- iterator->io_priority = io_priority;
- iterator->cancellable = cancellable;
- iterator->callback = callback;
- iterator->callback_data = data;
- iterator->done_cb = done_cb;
-
- async_iterate (iterator);
-}
-
-static void
-async_write_done (GOutputStream *stream,
- gpointer op_data,
- GAsyncReadyCallback callback,
- gpointer user_data,
- GError *io_error)
-{
- GSimpleAsyncResult *simple;
- WriteOperation *op;
- gssize count_written;
- GError *error;
-
- op = op_data;
-
- if (io_error)
- {
- count_written = -1;
- error = io_error;
- }
- else
- {
- count_written = op->ret_val;
- error = op->ret_error;
- }
-
- simple = g_simple_async_result_new (G_OBJECT (stream),
- callback, user_data,
- g_daemon_file_output_stream_write_async);
-
- g_simple_async_result_set_op_res_gssize (simple, count_written);
-
- if (count_written == -1)
- g_simple_async_result_set_from_error (simple, error);
-
- /* Complete immediately, not in idle, since we're already in a mainloop callout */
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- if (op->ret_error)
- g_error_free (op->ret_error);
- g_free (op);
-}
-
-static void
-g_daemon_file_output_stream_write_async (GOutputStream *stream,
- const void *buffer,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data)
-{
- GDaemonFileOutputStream *file;
- WriteOperation *op;
-
- file = G_DAEMON_FILE_OUTPUT_STREAM (stream);
-
- /* Limit for sanity and to avoid 32bit overflow */
- if (count > MAX_WRITE_SIZE)
- count = MAX_WRITE_SIZE;
-
- op = g_new0 (WriteOperation, 1);
- op->state = WRITE_STATE_INIT;
- op->buffer = buffer;
- op->buffer_size = count;
-
- run_async_state_machine (file,
- (state_machine_iterator)iterate_write_state_machine,
- op,
- io_priority,
- callback, data,
- cancellable,
- async_write_done);
-}
-
-static gssize
-g_daemon_file_output_stream_write_finish (GOutputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple;
- gssize nwritten;
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
- g_assert (g_simple_async_result_get_source_tag (simple) == g_daemon_file_output_stream_write_async);
-
- nwritten = g_simple_async_result_get_op_res_gssize (simple);
- return nwritten;
-}
-
-static void
-async_close_done (GOutputStream *stream,
- gpointer op_data,
- GAsyncReadyCallback callback,
- gpointer user_data,
- GError *io_error)
-{
- GDaemonFileOutputStream *file;
- GSimpleAsyncResult *simple;
- CloseOperation *op;
- gboolean result;
- GError *error;
- GCancellable *cancellable = NULL; /* TODO: get cancellable */
-
- file = G_DAEMON_FILE_OUTPUT_STREAM (stream);
-
- op = op_data;
-
- if (io_error)
- {
- result = FALSE;
- error = io_error;
- }
- else
- {
- result = op->ret_val;
- error = op->ret_error;
- }
-
- if (result)
- result = g_output_stream_close (file->command_stream, cancellable, &error);
- else
- g_output_stream_close (file->command_stream, cancellable, NULL);
-
- if (result)
- result = g_input_stream_close (file->data_stream, cancellable, &error);
- else
- g_input_stream_close (file->data_stream, cancellable, NULL);
-
- simple = g_simple_async_result_new (G_OBJECT (stream),
- callback, user_data,
- g_daemon_file_output_stream_close_async);
-
- if (!result)
- g_simple_async_result_set_from_error (simple, error);
-
- /* Complete immediately, not in idle, since we're already in a mainloop callout */
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- if (op->ret_error)
- g_error_free (op->ret_error);
- g_free (op);
-}
-
-static void
-g_daemon_file_output_stream_close_async (GOutputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data)
-{
- GDaemonFileOutputStream *file;
- CloseOperation *op;
-
- file = G_DAEMON_FILE_OUTPUT_STREAM (stream);
-
- op = g_new0 (CloseOperation, 1);
- op->state = CLOSE_STATE_INIT;
-
- run_async_state_machine (file,
- (state_machine_iterator)iterate_close_state_machine,
- op, io_priority,
- (GAsyncReadyCallback)callback, data,
- cancellable,
- (AsyncIteratorDone)async_close_done);
-}
-
-static gboolean
-g_daemon_file_output_stream_close_finish (GOutputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- /* Failures handled in generic close_finish code */
- return TRUE;
-}
diff --git a/client/gdaemonfileoutputstream.h b/client/gdaemonfileoutputstream.h
deleted file mode 100644
index e609a48b..00000000
--- a/client/gdaemonfileoutputstream.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_DAEMON_FILE_OUTPUT_STREAM_H__
-#define __G_DAEMON_FILE_OUTPUT_STREAM_H__
-
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_DAEMON_FILE_OUTPUT_STREAM (g_daemon_file_output_stream_get_type ())
-#define G_DAEMON_FILE_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DAEMON_FILE_OUTPUT_STREAM, GDaemonFileOutputStream))
-#define G_DAEMON_FILE_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DAEMON_FILE_OUTPUT_STREAM, GDaemonFileOutputStreamClass))
-#define G_IS_DAEMON_FILE_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DAEMON_FILE_OUTPUT_STREAM))
-#define G_IS_DAEMON_FILE_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DAEMON_FILE_OUTPUT_STREAM))
-#define G_DAEMON_FILE_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DAEMON_FILE_OUTPUT_STREAM, GDaemonFileOutputStreamClass))
-
-typedef struct _GDaemonFileOutputStream GDaemonFileOutputStream;
-typedef struct _GDaemonFileOutputStreamClass GDaemonFileOutputStreamClass;
-
-struct _GDaemonFileOutputStreamClass
-{
- GFileOutputStreamClass parent_class;
-};
-
-GType g_daemon_file_output_stream_get_type (void) G_GNUC_CONST;
-
-GFileOutputStream *g_daemon_file_output_stream_new (int fd,
- gboolean can_seek,
- goffset initial_offset);
-
-G_END_DECLS
-
-#endif /* __G_DAEMON_FILE_OUTPUT_STREAM_H__ */
diff --git a/client/gdaemonmount.c b/client/gdaemonmount.c
deleted file mode 100644
index 43d8e181..00000000
--- a/client/gdaemonmount.c
+++ /dev/null
@@ -1,421 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-#include "gdaemonvolumemonitor.h"
-#include "gdaemonmount.h"
-#include "gvfsdaemondbus.h"
-#include "gdaemonfile.h"
-#include "gvfsdaemonprotocol.h"
-#include "gdbusutils.h"
-
-/* Protects all fields of GDaemonMount that can change
- which at this point is just foreign_volume */
-G_LOCK_DEFINE_STATIC(daemon_mount);
-
-struct _GDaemonMount {
- GObject parent;
-
- GMountInfo *mount_info;
-
- GVolume *foreign_volume;
- GVolumeMonitor *volume_monitor;
-};
-
-static void g_daemon_mount_mount_iface_init (GMountIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (GDaemonMount, g_daemon_mount, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (G_TYPE_MOUNT,
- g_daemon_mount_mount_iface_init))
-
-static void
-g_daemon_mount_finalize (GObject *object)
-{
- GDaemonMount *mount;
-
- mount = G_DAEMON_MOUNT (object);
-
- if (mount->foreign_volume != NULL)
- g_object_unref (mount->foreign_volume);
-
- if (mount->volume_monitor != NULL)
- g_object_remove_weak_pointer (G_OBJECT (mount->volume_monitor), (gpointer) &(mount->volume_monitor));
-
- g_mount_info_unref (mount->mount_info);
-
- if (G_OBJECT_CLASS (g_daemon_mount_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_daemon_mount_parent_class)->finalize) (object);
-}
-
-static void
-g_daemon_mount_class_init (GDaemonMountClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_daemon_mount_finalize;
-}
-
-static void
-g_daemon_mount_init (GDaemonMount *daemon_mount)
-{
-}
-
-GDaemonMount *
-g_daemon_mount_new (GMountInfo *mount_info,
- GVolumeMonitor *volume_monitor)
-{
- GDaemonMount *mount;
-
- mount = g_object_new (G_TYPE_DAEMON_MOUNT, NULL);
- mount->mount_info = g_mount_info_ref (mount_info);
- mount->volume_monitor = volume_monitor;
- g_object_set_data (G_OBJECT (mount), "g-stable-name", (gpointer) mount_info->stable_name);
- if (mount->volume_monitor != NULL)
- g_object_add_weak_pointer (G_OBJECT (volume_monitor), (gpointer) &(mount->volume_monitor));
-
- return mount;
-}
-
-GMountInfo *
-g_daemon_mount_get_mount_info (GDaemonMount *mount)
-{
- return mount->mount_info;
-}
-
-static GFile *
-g_daemon_mount_get_root (GMount *mount)
-{
- GDaemonMount *daemon_mount = G_DAEMON_MOUNT (mount);
-
- return g_daemon_file_new (daemon_mount->mount_info->mount_spec, "/");
-}
-
-static GIcon *
-g_daemon_mount_get_icon (GMount *mount)
-{
- GDaemonMount *daemon_mount = G_DAEMON_MOUNT (mount);
-
- return g_themed_icon_new_with_default_fallbacks (daemon_mount->mount_info->icon);
-}
-
-static char *
-g_daemon_mount_get_name (GMount *mount)
-{
- GDaemonMount *daemon_mount = G_DAEMON_MOUNT (mount);
-
- return g_strdup (daemon_mount->mount_info->display_name);
-}
-
-static char *
-g_daemon_mount_get_uuid (GMount *mount)
-{
- return NULL;
-}
-
-static GVolume *
-g_daemon_mount_get_volume (GMount *mount)
-{
- GDaemonMount *daemon_mount = G_DAEMON_MOUNT (mount);
- if (daemon_mount->foreign_volume != NULL)
- return g_object_ref (daemon_mount->foreign_volume);
- return NULL;
-}
-
-static GDrive *
-g_daemon_mount_get_drive (GMount *mount)
-{
- GDaemonMount *daemon_mount = G_DAEMON_MOUNT (mount);
- GDrive *drive;
-
- G_LOCK (daemon_mount);
- drive = NULL;
- if (daemon_mount->foreign_volume != NULL)
- drive = g_volume_get_drive (daemon_mount->foreign_volume);
- G_UNLOCK (daemon_mount);
- return drive;
-}
-
-static gboolean
-g_daemon_mount_can_unmount (GMount *mount)
-{
- return TRUE;
-}
-
-static gboolean
-g_daemon_mount_can_eject (GMount *mount)
-{
- GDaemonMount *daemon_mount = G_DAEMON_MOUNT (mount);
- gboolean res;
-
- G_LOCK (daemon_mount);
- res = FALSE;
- if (daemon_mount->foreign_volume != NULL)
- res = g_volume_can_eject (daemon_mount->foreign_volume);
- G_UNLOCK (daemon_mount);
-
- return res;
-}
-
-static void
-foreign_volume_removed (GVolume *volume, gpointer user_data)
-{
- GDaemonMount *daemon_mount = G_DAEMON_MOUNT (user_data);
-
- G_LOCK (daemon_mount);
-
- g_object_ref (daemon_mount);
-
- if (daemon_mount->foreign_volume == volume)
- {
- g_object_unref (daemon_mount->foreign_volume);
- daemon_mount->foreign_volume = NULL;
- }
-
- G_UNLOCK (daemon_mount);
-
- g_signal_emit_by_name (daemon_mount, "changed");
- if (daemon_mount->volume_monitor != NULL)
- g_signal_emit_by_name (daemon_mount->volume_monitor, "mount_changed", daemon_mount);
-
- g_object_unref (daemon_mount);
-}
-
-void
-g_daemon_mount_set_foreign_volume (GDaemonMount *mount,
- GVolume *foreign_volume)
-{
- G_LOCK (daemon_mount);
-
- if (mount->foreign_volume != NULL)
- g_object_unref (mount->foreign_volume);
-
- if (foreign_volume != NULL)
- {
- mount->foreign_volume = foreign_volume;
- g_signal_connect_object (foreign_volume, "removed", (GCallback) foreign_volume_removed, mount, 0);
- }
- else
- mount->foreign_volume = NULL;
-
- G_UNLOCK (daemon_mount);
-}
-
-static void
-unmount_reply (DBusMessage *reply,
- DBusConnection *connection,
- GError *io_error,
- gpointer _data)
-{
- GSimpleAsyncResult *result = _data;
-
- if (io_error != NULL)
- g_simple_async_result_set_from_error (result, io_error);
-
- g_simple_async_result_complete (result);
- g_object_unref (result);
-}
-
-static void
-g_daemon_mount_unmount (GMount *mount,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GDaemonMount *daemon_mount = G_DAEMON_MOUNT (mount);
- DBusMessage *message;
- GMountInfo *mount_info;
- GSimpleAsyncResult *res;
- guint32 dbus_flags;
-
- mount_info = daemon_mount->mount_info;
-
- message =
- dbus_message_new_method_call (mount_info->dbus_id,
- mount_info->object_path,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_UNMOUNT);
-
- dbus_flags = flags;
- _g_dbus_message_append_args (message, DBUS_TYPE_UINT32, &dbus_flags, 0);
-
- res = g_simple_async_result_new (G_OBJECT (mount),
- callback, user_data,
- g_daemon_mount_unmount);
-
- _g_vfs_daemon_call_async (message,
- unmount_reply, res,
- cancellable);
-
- dbus_message_unref (message);
-}
-
-static gboolean
-g_daemon_mount_unmount_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- return TRUE;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} EjectWrapperOp;
-
-static void
-eject_wrapper_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- EjectWrapperOp *data = user_data;
- data->callback (data->object, res, data->user_data);
- g_free (data);
-}
-
-static void
-g_daemon_mount_eject (GMount *mount,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GDaemonMount *daemon_mount = G_DAEMON_MOUNT (mount);
- GDrive *drive;
-
- G_LOCK (daemon_mount);
-
- drive = NULL;
- if (daemon_mount->foreign_volume != NULL)
- drive = g_volume_get_drive (G_VOLUME (daemon_mount->foreign_volume));
-
- G_UNLOCK (daemon_mount);
-
- if (drive != NULL)
- {
- EjectWrapperOp *data;
- data = g_new0 (EjectWrapperOp, 1);
- data->object = G_OBJECT (mount);
- data->callback = callback;
- data->user_data = user_data;
- g_drive_eject (drive, flags, cancellable, eject_wrapper_callback, data);
- g_object_unref (drive);
- }
-}
-
-static gboolean
-g_daemon_mount_eject_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- GDaemonMount *daemon_mount = G_DAEMON_MOUNT (mount);
- GDrive *drive;
- gboolean res;
-
- res = TRUE;
-
- G_LOCK (daemon_mount);
-
- drive = NULL;
- if (daemon_mount->foreign_volume != NULL)
- drive = g_volume_get_drive (G_VOLUME (daemon_mount->foreign_volume));
-
- G_UNLOCK (daemon_mount);
-
- if (drive != NULL)
- {
- res = g_drive_eject_finish (drive, result, error);
- g_object_unref (drive);
- }
-
- return res;
-}
-
-static char **
-g_daemon_mount_guess_content_type_sync (GMount *mount,
- gboolean force_rescan,
- GCancellable *cancellable,
- GError **error)
-{
- GDaemonMount *daemon_mount = G_DAEMON_MOUNT (mount);
- char **result;
-
- result = NULL;
- G_LOCK (daemon_mount);
- if (daemon_mount->mount_info->x_content_types != NULL &&
- strlen (daemon_mount->mount_info->x_content_types) > 0)
- result = g_strsplit (daemon_mount->mount_info->x_content_types, " ", 0);
- G_UNLOCK (daemon_mount);
-
- return result;
-}
-
-static void
-g_daemon_mount_guess_content_type (GMount *mount,
- gboolean force_rescan,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *simple;
- simple = g_simple_async_result_new (G_OBJECT (mount),
- callback,
- user_data,
- NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-}
-
-static char **
-g_daemon_mount_guess_content_type_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- return g_daemon_mount_guess_content_type_sync (mount, FALSE, NULL, error);
-}
-
-static void
-g_daemon_mount_mount_iface_init (GMountIface *iface)
-{
- iface->get_root = g_daemon_mount_get_root;
- iface->get_name = g_daemon_mount_get_name;
- iface->get_icon = g_daemon_mount_get_icon;
- iface->get_uuid = g_daemon_mount_get_uuid;
- iface->get_volume = g_daemon_mount_get_volume;
- iface->get_drive = g_daemon_mount_get_drive;
- iface->can_unmount = g_daemon_mount_can_unmount;
- iface->can_eject = g_daemon_mount_can_eject;
- iface->unmount = g_daemon_mount_unmount;
- iface->unmount_finish = g_daemon_mount_unmount_finish;
- iface->eject = g_daemon_mount_eject;
- iface->eject_finish = g_daemon_mount_eject_finish;
- iface->guess_content_type = g_daemon_mount_guess_content_type;
- iface->guess_content_type_finish = g_daemon_mount_guess_content_type_finish;
- iface->guess_content_type_sync = g_daemon_mount_guess_content_type_sync;
-}
diff --git a/client/gdaemonmount.h b/client/gdaemonmount.h
deleted file mode 100644
index bf4ba099..00000000
--- a/client/gdaemonmount.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_DAEMON_MOUNT_H__
-#define __G_DAEMON_MOUNT_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include "gdaemonvfs.h"
-#include "gdaemonvolumemonitor.h"
-#include "gmounttracker.h"
-
-G_BEGIN_DECLS
-
-#define G_TYPE_DAEMON_MOUNT (g_daemon_mount_get_type ())
-#define G_DAEMON_MOUNT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DAEMON_MOUNT, GDaemonMount))
-#define G_DAEMON_MOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DAEMON_MOUNT, GDaemonMountClass))
-#define G_IS_DAEMON_MOUNT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DAEMON_MOUNT))
-#define G_IS_DAEMON_MOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DAEMON_MOUNT))
-
-typedef struct _GDaemonMountClass GDaemonMountClass;
-
-struct _GDaemonMountClass {
- GObjectClass parent_class;
-};
-
-GType g_daemon_mount_get_type (void) G_GNUC_CONST;
-
-GDaemonMount *g_daemon_mount_new (GMountInfo *mount_info,
- GVolumeMonitor *volume_monitor);
-
-GMountInfo *g_daemon_mount_get_mount_info (GDaemonMount *mount);
-
-void g_daemon_mount_set_foreign_volume (GDaemonMount *mount, GVolume *foreign_volume);
-
-G_END_DECLS
-
-#endif /* __G_DAEMON_MOUNT_H__ */
diff --git a/client/gdaemonvfs.c b/client/gdaemonvfs.c
deleted file mode 100644
index e4f9164a..00000000
--- a/client/gdaemonvfs.c
+++ /dev/null
@@ -1,1002 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-#include <string.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <dbus/dbus.h>
-#include "gdaemonvfs.h"
-#include "gvfsuriutils.h"
-#include "gdaemonfile.h"
-#include <gio/gio.h>
-#include <gvfsdaemonprotocol.h>
-#include <gmodule.h>
-#include "gvfsdaemondbus.h"
-#include "gdbusutils.h"
-#include "gmountspec.h"
-#include "gvfsurimapper.h"
-#include "gdaemonvolumemonitor.h"
-#include <glib/gi18n-lib.h>
-
-typedef struct {
- char *type;
- char *scheme;
- char **scheme_aliases;
- int default_port;
- gboolean host_is_inet;
-} MountableInfo;
-
-struct _GDaemonVfs
-{
- GVfs parent;
-
- DBusConnection *async_bus;
-
- GVfs *wrapped_vfs;
- GList *mount_cache;
-
- GHashTable *from_uri_hash;
- GHashTable *to_uri_hash;
-
- MountableInfo **mountable_info;
- char **supported_uri_schemes;
-};
-
-struct _GDaemonVfsClass
-{
- GVfsClass parent_class;
-};
-
-G_DEFINE_DYNAMIC_TYPE (GDaemonVfs, g_daemon_vfs, G_TYPE_VFS)
-
-static GDaemonVfs *the_vfs = NULL;
-
-G_LOCK_DEFINE_STATIC(mount_cache);
-
-
-static void fill_mountable_info (GDaemonVfs *vfs);
-
-static void
-g_daemon_vfs_finalize (GObject *object)
-{
- GDaemonVfs *vfs;
-
- vfs = G_DAEMON_VFS (object);
-
- if (vfs->from_uri_hash)
- g_hash_table_destroy (vfs->from_uri_hash);
-
- if (vfs->to_uri_hash)
- g_hash_table_destroy (vfs->to_uri_hash);
-
- g_strfreev (vfs->supported_uri_schemes);
-
- if (vfs->async_bus)
- {
- dbus_connection_close (vfs->async_bus);
- dbus_connection_unref (vfs->async_bus);
- }
-
- if (vfs->wrapped_vfs)
- g_object_unref (vfs->wrapped_vfs);
-
- /* must chain up */
- G_OBJECT_CLASS (g_daemon_vfs_parent_class)->finalize (object);
-}
-
-static MountableInfo *
-get_mountable_info_for_scheme (GDaemonVfs *vfs,
- const char *scheme)
-{
- MountableInfo *info;
- int i, j;
-
- if (vfs->mountable_info == NULL)
- return NULL;
-
- for (i = 0; vfs->mountable_info[i] != NULL; i++)
- {
- info = vfs->mountable_info[i];
-
- if (info->scheme != NULL && strcmp (info->scheme, scheme) == 0)
- return info;
-
- if (info->scheme_aliases != NULL)
- {
- for (j = 0; info->scheme_aliases[j] != NULL; j++)
- {
- if (strcmp (info->scheme_aliases[j], scheme) == 0)
- return info;
- }
- }
-
- }
-
- return NULL;
-}
-
-static MountableInfo *
-get_mountable_info_for_type (GDaemonVfs *vfs,
- const char *type)
-{
- MountableInfo *info;
- int i;
-
- if (vfs->mountable_info == NULL)
- return NULL;
-
- for (i = 0; vfs->mountable_info[i] != NULL; i++)
- {
- info = vfs->mountable_info[i];
-
- if (strcmp (info->type, type) == 0)
- return info;
- }
-
- return NULL;
-}
-
-static void
-str_tolower_inplace (char *str)
-{
- char *p = str;
-
- while (*p != 0)
- {
- *p = g_ascii_tolower (*p);
- p++;
- }
-
-}
-
-static gboolean
-get_mountspec_from_uri (GDaemonVfs *vfs,
- const char *uri,
- GMountSpec **spec_out,
- char **path_out)
-{
- GMountSpec *spec;
- char *path;
- GVfsUriMapper *mapper;
- char *scheme;
- GVfsUriMountInfo *info;
-
- scheme = g_uri_parse_scheme (uri);
- if (scheme == NULL)
- return FALSE;
-
- /* convert the scheme to lower case since g_uri_parse_scheme
- * doesn't do that and we compare with g_str_equal */
- str_tolower_inplace (scheme);
-
- spec = NULL;
- path = NULL;
-
- mapper = g_hash_table_lookup (vfs->from_uri_hash, scheme);
-
- if (mapper)
- {
- info = g_vfs_uri_mapper_from_uri (mapper, uri);
- if (info != NULL)
- {
- spec = g_mount_spec_new_from_data (info->keys, NULL);
- path = info->path;
- /* We took over ownership of info parts, custom free: */
- g_free (info);
- }
- }
-
- if (spec == NULL)
- {
- GDecodedUri *decoded;
- MountableInfo *mountable;
- char *type;
- int l;
-
- decoded = g_vfs_decode_uri (uri);
- if (decoded)
- {
- mountable = get_mountable_info_for_scheme (vfs, decoded->scheme);
-
- if (mountable)
- type = mountable->type;
- else
- type = decoded->scheme;
-
- spec = g_mount_spec_new (type);
-
- if (decoded->host && *decoded->host)
- {
- if (mountable && mountable->host_is_inet)
- {
- /* Convert hostname to lower case */
- str_tolower_inplace (decoded->host);
-
- /* Remove brackets aroung ipv6 addresses */
- l = strlen (decoded->host);
- if (decoded->host[0] == '[' &&
- decoded->host[l - 1] == ']')
- g_mount_spec_set_with_len (spec, "host", decoded->host+1, l - 2);
- else
- g_mount_spec_set (spec, "host", decoded->host);
- }
- else
- g_mount_spec_set (spec, "host", decoded->host);
- }
-
- if (decoded->userinfo && *decoded->userinfo)
- g_mount_spec_set (spec, "user", decoded->userinfo);
-
- if (decoded->port != -1 &&
- (mountable == NULL ||
- mountable->default_port == 0 ||
- mountable->default_port != decoded->port))
- {
- char *port = g_strdup_printf ("%d", decoded->port);
- g_mount_spec_set (spec, "port", port);
- g_free (port);
- }
-
- if (decoded->query && *decoded->query)
- g_mount_spec_set (spec, "query", decoded->query);
- if (decoded->fragment && *decoded->fragment)
- g_mount_spec_set (spec, "fragment", decoded->fragment);
-
- path = g_strdup (decoded->path);
-
- g_vfs_decoded_uri_free (decoded);
- }
- }
-
- g_free (scheme);
-
- if (spec == NULL)
- return FALSE;
-
- *spec_out = spec;
- *path_out = path;
-
- return TRUE;
-}
-
-static void
-g_daemon_vfs_init (GDaemonVfs *vfs)
-{
- GType *mappers;
- guint n_mappers;
- const char * const *schemes, * const *mount_types;
- GVfsUriMapper *mapper;
- GList *modules;
- int i;
-
- bindtextdomain (GETTEXT_PACKAGE, GVFS_LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-
- vfs->async_bus = dbus_bus_get_private (DBUS_BUS_SESSION, NULL);
-
- if (vfs->async_bus == NULL)
- return; /* Not supported, return here and return false in vfs_is_active() */
-
- g_assert (the_vfs == NULL);
- the_vfs = vfs;
-
- if (g_thread_supported ())
- dbus_threads_init_default ();
-
- /* We disable SIGPIPE globally. This is sort of bad
- for s library to do since its a global resource.
- However, without this there is no way to be able
- to handle mount daemons dying without client apps
- crashing, which is much worse.
-
- I blame Unix, there really should be a portable
- way to do this on all unixes, but there isn't,
- even for somewhat modern ones like solaris.
- */
- signal (SIGPIPE, SIG_IGN);
-
- fill_mountable_info (vfs);
-
- vfs->wrapped_vfs = g_vfs_get_local ();
-
- dbus_connection_set_exit_on_disconnect (vfs->async_bus, FALSE);
-
- _g_dbus_connection_integrate_with_main (vfs->async_bus);
-
- modules = g_io_modules_load_all_in_directory (GVFS_MODULE_DIR);
-
- vfs->from_uri_hash = g_hash_table_new (g_str_hash, g_str_equal);
- vfs->to_uri_hash = g_hash_table_new (g_str_hash, g_str_equal);
-
- mappers = g_type_children (G_VFS_TYPE_URI_MAPPER, &n_mappers);
-
- for (i = 0; i < n_mappers; i++)
- {
- int j;
- mapper = g_object_new (mappers[i], NULL);
-
- schemes = g_vfs_uri_mapper_get_handled_schemes (mapper);
-
- for (j = 0; schemes != NULL && schemes[j] != NULL; j++)
- g_hash_table_insert (vfs->from_uri_hash, (char *)schemes[j], mapper);
-
- mount_types = g_vfs_uri_mapper_get_handled_mount_types (mapper);
- for (j = 0; mount_types != NULL && mount_types[j] != NULL; j++)
- g_hash_table_insert (vfs->to_uri_hash, (char *)mount_types[j], mapper);
- }
-
- /* The above should have ref:ed the modules anyway */
- g_list_foreach (modules, (GFunc)g_type_module_unuse, NULL);
- g_list_free (modules);
- g_free (mappers);
-}
-
-GDaemonVfs *
-g_daemon_vfs_new (void)
-{
- return g_object_new (G_TYPE_DAEMON_VFS, NULL);
-}
-
-static GFile *
-g_daemon_vfs_get_file_for_path (GVfs *vfs,
- const char *path)
-{
- /* TODO: detect fuse paths and convert to daemon vfs GFiles */
-
- return g_vfs_get_file_for_path (G_DAEMON_VFS (vfs)->wrapped_vfs, path);
-}
-
-static GFile *
-g_daemon_vfs_get_file_for_uri (GVfs *vfs,
- const char *uri)
-{
- GDaemonVfs *daemon_vfs;
- GFile *file;
- GMountSpec *spec;
- char *path;
-
- daemon_vfs = G_DAEMON_VFS (vfs);
-
- if (g_ascii_strncasecmp (uri, "file:", 5) == 0)
- {
- path = g_filename_from_uri (uri, NULL, NULL);
-
- if (path == NULL)
- /* Dummy file */
- return g_vfs_get_file_for_uri (G_DAEMON_VFS (vfs)->wrapped_vfs, uri);
-
- file = g_daemon_vfs_get_file_for_path (vfs, path);
- g_free (path);
- return file;
- }
-
- if (get_mountspec_from_uri (daemon_vfs, uri, &spec, &path))
- {
- file = g_daemon_file_new (spec, path);
- g_mount_spec_unref (spec);
- g_free (path);
- return file;
- }
-
- /* Dummy file */
- return g_vfs_get_file_for_uri (G_DAEMON_VFS (vfs)->wrapped_vfs, uri);
-}
-
-GMountSpec *
-_g_daemon_vfs_get_mount_spec_for_path (GMountSpec *spec,
- const char *path,
- const char *new_path)
-{
- const char *type;
- GVfsUriMapper *mapper;
- GMountSpec *new_spec;
-
- type = g_mount_spec_get_type (spec);
-
- if (type == NULL)
- return g_mount_spec_ref (spec);
-
- new_spec = NULL;
- mapper = g_hash_table_lookup (the_vfs->to_uri_hash, type);
- if (mapper)
- {
- GVfsUriMountInfo info, *new_info;
- info.keys = spec->items;
- info.path = (char *)path;
- new_info = g_vfs_uri_mapper_get_mount_info_for_path (mapper, &info, new_path);
- if (new_info != NULL)
- {
- new_spec = g_mount_spec_new_from_data (new_info->keys, NULL);
- /* We took over ownership of parts of new_info, custom free: */
- g_free (new_info->path);
- g_free (new_info);
- }
- }
-
- if (new_spec == NULL)
- new_spec = g_mount_spec_ref (spec);
-
- return new_spec;
-}
-
-char *
-_g_daemon_vfs_get_uri_for_mountspec (GMountSpec *spec,
- char *path,
- gboolean allow_utf8)
-{
- char *uri;
- const char *type;
- GVfsUriMapper *mapper;
-
- type = g_mount_spec_get_type (spec);
- if (type == NULL)
- {
- GString *string = g_string_new ("unknown://");
- if (path)
- g_string_append_uri_escaped (string,
- path,
- "!$&'()*+,;=:@/",
- allow_utf8);
-
- return g_string_free (string, FALSE);
- }
-
- uri = NULL;
- mapper = g_hash_table_lookup (the_vfs->to_uri_hash, type);
- if (mapper)
- {
- GVfsUriMountInfo info;
- info.keys = spec->items;
- info.path = path;
- uri = g_vfs_uri_mapper_to_uri (mapper, &info, allow_utf8);
- }
-
- if (uri == NULL)
- {
- GDecodedUri decoded;
- MountableInfo *mountable;
- const char *port;
- gboolean free_host;
-
- memset (&decoded, 0, sizeof (decoded));
- decoded.port = -1;
-
- mountable = get_mountable_info_for_type (the_vfs, type);
-
- if (mountable)
- decoded.scheme = mountable->scheme;
- else
- decoded.scheme = (char *)type;
- decoded.host = (char *)g_mount_spec_get (spec, "host");
- free_host = FALSE;
- if (mountable && mountable->host_is_inet && decoded.host != NULL && strchr (decoded.host, ':') != NULL)
- {
- free_host = TRUE;
- decoded.host = g_strconcat ("[", decoded.host, "]", NULL);
- }
-
- decoded.userinfo = (char *)g_mount_spec_get (spec, "user");
- port = g_mount_spec_get (spec, "port");
- if (port != NULL)
- decoded.port = atoi (port);
-
- if (path == NULL)
- decoded.path = "/";
- else
- decoded.path = path;
-
- decoded.query = (char *)g_mount_spec_get (spec, "query");
- decoded.fragment = (char *)g_mount_spec_get (spec, "fragment");
-
- uri = g_vfs_encode_uri (&decoded, FALSE);
-
- if (free_host)
- g_free (decoded.host);
- }
-
- return uri;
-}
-
-const char *
-_g_daemon_vfs_mountspec_get_uri_scheme (GMountSpec *spec)
-{
- const char *type, *scheme;
- GVfsUriMapper *mapper;
- MountableInfo *mountable;
-
- type = g_mount_spec_get_type (spec);
- mapper = g_hash_table_lookup (the_vfs->to_uri_hash, type);
-
- scheme = NULL;
- if (mapper)
- {
- GVfsUriMountInfo info;
-
- info.keys = spec->items;
- info.path = "/";
-
- scheme = g_vfs_uri_mapper_to_uri_scheme (mapper, &info);
- }
-
- if (scheme == NULL)
- {
- mountable = get_mountable_info_for_type (the_vfs, type);
- if (mountable)
- scheme = mountable->scheme;
- else
- scheme = type;
- }
-
- return scheme;
-}
-
-static int
-find_string (GPtrArray *array, const char *find_me)
-{
- int i;
-
- g_return_val_if_fail (find_me != NULL, -1);
-
- for (i = 0; i < array->len; ++i)
- {
- if (strcmp (g_ptr_array_index (array, i), find_me) == 0)
- return i;
- }
-
- return -1;
-}
-
-
-static void
-fill_mountable_info (GDaemonVfs *vfs)
-{
- DBusMessage *message, *reply;
- DBusError error;
- DBusMessageIter iter, array_iter, struct_iter;
- MountableInfo *info;
- GPtrArray *infos, *uri_schemes;
- gint i, count;
-
- message = dbus_message_new_method_call (G_VFS_DBUS_DAEMON_NAME,
- G_VFS_DBUS_MOUNTTRACKER_PATH,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_LIST_MOUNTABLE_INFO);
-
- if (message == NULL)
- _g_dbus_oom ();
-
- dbus_message_set_auto_start (message, TRUE);
-
- dbus_error_init (&error);
- reply = dbus_connection_send_with_reply_and_block (vfs->async_bus,
- message,
- G_VFS_DBUS_TIMEOUT_MSECS,
- &error);
- dbus_message_unref (message);
-
- if (dbus_error_is_set (&error))
- {
- dbus_error_free (&error);
- return;
- }
-
- if (reply == NULL)
- _g_dbus_oom ();
-
- dbus_message_iter_init (reply, &iter);
-
- dbus_message_iter_recurse (&iter, &array_iter);
-
- infos = g_ptr_array_new ();
- uri_schemes = g_ptr_array_new ();
- count = 0;
- do
- {
- char *type, *scheme, **scheme_aliases;
- int scheme_aliases_len;
- gint32 default_port;
- dbus_bool_t host_is_inet;
-
- if (dbus_message_iter_get_arg_type (&array_iter) != DBUS_TYPE_STRUCT)
- break;
-
- dbus_message_iter_recurse (&array_iter, &struct_iter);
-
- if (!_g_dbus_message_iter_get_args (&struct_iter, NULL,
- DBUS_TYPE_STRING, &type,
- DBUS_TYPE_STRING, &scheme,
- DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &scheme_aliases, &scheme_aliases_len,
- DBUS_TYPE_INT32, &default_port,
- DBUS_TYPE_BOOLEAN, &host_is_inet,
- 0))
- break;
-
- info = g_new0 (MountableInfo, 1);
- info->type = g_strdup (type);
- if (*scheme != 0)
- {
- info->scheme = g_strdup (scheme);
- if (find_string (uri_schemes, scheme) == -1)
- g_ptr_array_add (uri_schemes, g_strdup (scheme));
- }
-
- if (scheme_aliases_len > 0)
- {
- info->scheme_aliases = g_new (char *, scheme_aliases_len + 1);
- for (i = 0; i < scheme_aliases_len; i++)
- {
- info->scheme_aliases[i] = g_strdup (scheme_aliases[i]);
- if (find_string (uri_schemes, scheme_aliases[i]) == -1)
- g_ptr_array_add (uri_schemes, g_strdup (scheme_aliases[i]));
- }
- info->scheme_aliases[scheme_aliases_len] = NULL;
- }
-
- info->default_port = default_port;
- info->host_is_inet = host_is_inet;
-
- g_ptr_array_add (infos, info);
-
- g_strfreev (scheme_aliases);
- }
- while (dbus_message_iter_next (&array_iter));
-
- dbus_message_unref (reply);
-
- g_ptr_array_add (uri_schemes, NULL);
- g_ptr_array_add (infos, NULL);
- vfs->mountable_info = (MountableInfo **)g_ptr_array_free (infos, FALSE);
- vfs->supported_uri_schemes = (char **)g_ptr_array_free (uri_schemes, FALSE);
-}
-
-
-static const gchar * const *
-g_daemon_vfs_get_supported_uri_schemes (GVfs *vfs)
-{
- return (const gchar * const *) G_DAEMON_VFS (vfs)->supported_uri_schemes;
-}
-
-static GMountInfo *
-lookup_mount_info_in_cache_locked (GMountSpec *spec,
- const char *path)
-{
- GMountInfo *info;
- GList *l;
-
- info = NULL;
- for (l = the_vfs->mount_cache; l != NULL; l = l->next)
- {
- GMountInfo *mount_info = l->data;
-
- if (g_mount_spec_match_with_path (mount_info->mount_spec, spec, path))
- {
- info = g_mount_info_ref (mount_info);
- break;
- }
- }
-
- return info;
-}
-
-static GMountInfo *
-lookup_mount_info_in_cache (GMountSpec *spec,
- const char *path)
-{
- GMountInfo *info;
-
- G_LOCK (mount_cache);
- info = lookup_mount_info_in_cache_locked (spec, path);
- G_UNLOCK (mount_cache);
-
- return info;
-}
-
-void
-_g_daemon_vfs_invalidate_dbus_id (const char *dbus_id)
-{
- GList *l, *next;
-
- G_LOCK (mount_cache);
- for (l = the_vfs->mount_cache; l != NULL; l = next)
- {
- GMountInfo *mount_info = l->data;
- next = l->next;
-
- if (strcmp (mount_info->dbus_id, dbus_id) == 0)
- {
- the_vfs->mount_cache = g_list_delete_link (the_vfs->mount_cache, l);
- g_mount_info_unref (mount_info);
- }
- }
-
- G_UNLOCK (mount_cache);
-}
-
-
-static GMountInfo *
-handler_lookup_mount_reply (DBusMessage *reply,
- GError **error)
-{
- DBusError derror;
- GMountInfo *info;
- DBusMessageIter iter;
- GList *l;
- gboolean in_cache;
-
-
- if (_g_error_from_message (reply, error))
- return NULL;
-
- dbus_error_init (&derror);
- dbus_message_iter_init (reply, &iter);
-
- info = g_mount_info_from_dbus (&iter);
- if (info == NULL)
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Error while getting mount info: %s"),
- "Invalid reply");
- return NULL;
- }
-
- G_LOCK (mount_cache);
-
- in_cache = FALSE;
- /* Already in cache from other thread? */
- for (l = the_vfs->mount_cache; l != NULL; l = l->next)
- {
- GMountInfo *cached_info = l->data;
-
- if (g_mount_info_equal (info, cached_info))
- {
- in_cache = TRUE;
- g_mount_info_unref (info);
- info = g_mount_info_ref (cached_info);
- break;
- }
- }
-
- /* No, lets add it to the cache */
- if (!in_cache)
- the_vfs->mount_cache = g_list_prepend (the_vfs->mount_cache, g_mount_info_ref (info));
-
- G_UNLOCK (mount_cache);
-
- return info;
-}
-
-typedef struct {
- GMountInfoLookupCallback callback;
- gpointer user_data;
-} GetMountInfoData;
-
-static void
-async_get_mount_info_response (DBusMessage *reply,
- GError *io_error,
- void *_data)
-{
- GetMountInfoData *data = _data;
- GMountInfo *info;
- GError *error;
-
- if (reply == NULL)
- data->callback (NULL, data->user_data, io_error);
- else
- {
- error = NULL;
- info = handler_lookup_mount_reply (reply, &error);
-
- data->callback (info, data->user_data, error);
-
- if (info)
- g_mount_info_unref (info);
-
- if (error)
- g_error_free (error);
- }
-
- g_free (data);
-}
-
-void
-_g_daemon_vfs_get_mount_info_async (GMountSpec *spec,
- const char *path,
- GMountInfoLookupCallback callback,
- gpointer user_data)
-{
- GMountInfo *info;
- GetMountInfoData *data;
- DBusMessage *message;
- DBusMessageIter iter;
-
- info = lookup_mount_info_in_cache (spec, path);
-
- if (info != NULL)
- {
- callback (info, user_data, NULL);
- g_mount_info_unref (info);
- return;
- }
-
- message =
- dbus_message_new_method_call (G_VFS_DBUS_DAEMON_NAME,
- G_VFS_DBUS_MOUNTTRACKER_PATH,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_LOOKUP_MOUNT);
- dbus_message_set_auto_start (message, TRUE);
-
- dbus_message_iter_init_append (message, &iter);
- g_mount_spec_to_dbus_with_path (&iter, spec, path);
-
- data = g_new0 (GetMountInfoData, 1);
- data->callback = callback;
- data->user_data = user_data;
-
- _g_dbus_connection_call_async (the_vfs->async_bus, message, G_VFS_DBUS_TIMEOUT_MSECS,
- async_get_mount_info_response,
- data);
-
- dbus_message_unref (message);
-}
-
-
-GMountInfo *
-_g_daemon_vfs_get_mount_info_sync (GMountSpec *spec,
- const char *path,
- GError **error)
-{
- GMountInfo *info;
- DBusConnection *conn;
- DBusMessage *message, *reply;
- DBusMessageIter iter;
- DBusError derror;
-
- info = lookup_mount_info_in_cache (spec, path);
-
- if (info != NULL)
- return info;
-
- conn = _g_dbus_connection_get_sync (NULL, error);
- if (conn == NULL)
- return NULL;
-
- message =
- dbus_message_new_method_call (G_VFS_DBUS_DAEMON_NAME,
- G_VFS_DBUS_MOUNTTRACKER_PATH,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_LOOKUP_MOUNT);
- dbus_message_set_auto_start (message, TRUE);
-
- dbus_message_iter_init_append (message, &iter);
- g_mount_spec_to_dbus_with_path (&iter, spec, path);
-
- dbus_error_init (&derror);
- reply = dbus_connection_send_with_reply_and_block (conn, message, -1, &derror);
- dbus_message_unref (message);
-
- if (!reply)
- {
- _g_error_from_dbus (&derror, error);
- dbus_error_free (&derror);
- return NULL;
- }
-
- info = handler_lookup_mount_reply (reply, error);
-
- dbus_message_unref (reply);
-
- return info;
-}
-
-static GFile *
-g_daemon_vfs_parse_name (GVfs *vfs,
- const char *parse_name)
-{
- GFile *file;
-
- if (g_path_is_absolute (parse_name) ||
- *parse_name == '~')
- {
- /* TODO: detect fuse paths and convert to daemon vfs GFiles ? */
- file = g_vfs_parse_name (G_DAEMON_VFS (vfs)->wrapped_vfs, parse_name);
- }
- else
- {
- file = g_daemon_vfs_get_file_for_uri (vfs, parse_name);
- }
-
- return file;
-}
-
-DBusConnection *
-_g_daemon_vfs_get_async_bus (void)
-{
- return the_vfs->async_bus;
-}
-
-static gboolean
-g_daemon_vfs_is_active (GVfs *vfs)
-{
- GDaemonVfs *daemon_vfs = G_DAEMON_VFS (vfs);
- return daemon_vfs->async_bus != NULL;
-}
-
-static void
-g_daemon_vfs_class_finalize (GDaemonVfsClass *klass)
-{
-}
-
-static void
-g_daemon_vfs_class_init (GDaemonVfsClass *class)
-{
- GObjectClass *object_class;
- GVfsClass *vfs_class;
-
- object_class = (GObjectClass *) class;
-
- g_daemon_vfs_parent_class = g_type_class_peek_parent (class);
-
- object_class->finalize = g_daemon_vfs_finalize;
-
- vfs_class = G_VFS_CLASS (class);
-
- vfs_class->is_active = g_daemon_vfs_is_active;
- vfs_class->get_file_for_path = g_daemon_vfs_get_file_for_path;
- vfs_class->get_file_for_uri = g_daemon_vfs_get_file_for_uri;
- vfs_class->get_supported_uri_schemes = g_daemon_vfs_get_supported_uri_schemes;
- vfs_class->parse_name = g_daemon_vfs_parse_name;
-}
-
-/* Module API */
-
-void g_vfs_uri_mapper_smb_register (GIOModule *module);
-void g_vfs_uri_mapper_http_register (GIOModule *module);
-void g_vfs_uri_mapper_sftp_register (GIOModule *module);
-
-void
-g_io_module_load (GIOModule *module)
-{
- /* This is so that system daemons can use gio
- * without spawning private dbus instances.
- * See bug 526454.
- */
- if (g_getenv ("DBUS_SESSION_BUS_ADDRESS") == NULL)
- return;
-
- g_daemon_vfs_register_type (G_TYPE_MODULE (module));
- g_daemon_volume_monitor_register_types (G_TYPE_MODULE (module));
-
- g_io_extension_point_implement (G_VFS_EXTENSION_POINT_NAME,
- G_TYPE_DAEMON_VFS,
- "gvfs",
- 10);
-
- g_vfs_uri_mapper_register (module);
- g_vfs_uri_mapper_smb_register (module);
- g_vfs_uri_mapper_http_register (module);
-}
-
-void
-g_io_module_unload (GIOModule *module)
-{
-}
diff --git a/client/gdaemonvfs.h b/client/gdaemonvfs.h
deleted file mode 100644
index 3b17b880..00000000
--- a/client/gdaemonvfs.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_DAEMON_VFS_H__
-#define __G_DAEMON_VFS_H__
-
-#include <gio/gio.h>
-#include <dbus/dbus.h>
-#include "gmountspec.h"
-#include "gmounttracker.h"
-#include "gvfsuriutils.h"
-
-G_BEGIN_DECLS
-
-#define G_TYPE_DAEMON_VFS (g_daemon_vfs_get_type ())
-#define G_DAEMON_VFS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_DAEMON_VFS, GDaemonVfs))
-#define G_DAEMON_VFS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_DAEMON_VFS, GDaemonVfsClass))
-#define G_IS_DAEMON_VFS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_DAEMON_VFS))
-#define G_IS_DAEMON_VFS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_TYPE_DAEMON_VFS))
-#define G_DAEMON_VFS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), G_TYPE_DAEMON_VFS, GDaemonVfsClass))
-
-typedef struct _GDaemonVfs GDaemonVfs;
-typedef struct _GDaemonVfsClass GDaemonVfsClass;
-
-typedef void (*GMountInfoLookupCallback) (GMountInfo *mount_info,
- gpointer data,
- GError *error);
-
-GType g_daemon_vfs_get_type (void);
-
-GDaemonVfs *g_daemon_vfs_new (void);
-
-char * _g_daemon_vfs_get_uri_for_mountspec (GMountSpec *spec,
- char *path,
- gboolean allow_utf8);
-const char * _g_daemon_vfs_mountspec_get_uri_scheme (GMountSpec *spec);
-void _g_daemon_vfs_get_mount_info_async (GMountSpec *spec,
- const char *path,
- GMountInfoLookupCallback callback,
- gpointer user_data);
-GMountInfo * _g_daemon_vfs_get_mount_info_sync (GMountSpec *spec,
- const char *path,
- GError **error);
-GMountSpec * _g_daemon_vfs_get_mount_spec_for_path (GMountSpec *spec,
- const char *path,
- const char *new_path);
-void _g_daemon_vfs_invalidate_dbus_id (const char *dbus_id);
-DBusConnection *_g_daemon_vfs_get_async_bus (void);
-
-
-
-G_END_DECLS
-
-#endif /* __G_DAEMON_VFS_H__ */
diff --git a/client/gdaemonvolumemonitor.c b/client/gdaemonvolumemonitor.c
deleted file mode 100644
index e26bde09..00000000
--- a/client/gdaemonvolumemonitor.c
+++ /dev/null
@@ -1,329 +0,0 @@
-
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include "gdaemonvolumemonitor.h"
-#include "gdaemonmount.h"
-#include "gdaemonvfs.h"
-#include "gmounttracker.h"
-
-G_LOCK_DEFINE_STATIC(daemon_vm);
-
-static GDaemonVolumeMonitor *_the_daemon_volume_monitor;
-
-struct _GDaemonVolumeMonitor {
- GVolumeMonitor parent;
-
- GMountTracker *mount_tracker;
- GList *mounts;
-};
-
-G_DEFINE_DYNAMIC_TYPE (GDaemonVolumeMonitor, g_daemon_volume_monitor, G_TYPE_VOLUME_MONITOR)
-
-static GList *
-get_mounts (GVolumeMonitor *volume_monitor)
-{
- GDaemonVolumeMonitor *monitor;
- GList *l;
-
- G_LOCK (daemon_vm);
-
- monitor = G_DAEMON_VOLUME_MONITOR (volume_monitor);
-
- l = g_list_copy (monitor->mounts);
- g_list_foreach (l, (GFunc)g_object_ref, NULL);
-
- G_UNLOCK (daemon_vm);
-
- return l;
-}
-
-static GList *
-get_volumes (GVolumeMonitor *volume_monitor)
-{
- /* TODO: Can daemon mounts have volumes? */
- return NULL;
-}
-
-static GList *
-get_connected_drives (GVolumeMonitor *volume_monitor)
-{
- /* TODO: Can daemon mounts have drives? */
- return NULL;
-}
-
-static GVolume *
-get_volume_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
-{
- return NULL;
-}
-
-static GMount *
-get_mount_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
-{
- return NULL;
-}
-
-static GDaemonMount *
-find_mount_by_mount_info (GDaemonVolumeMonitor *daemon_monitor, GMountInfo *mount_info)
-{
- GDaemonMount *found_mount = NULL;
- GList *l;
-
- for (l = daemon_monitor->mounts; l; l = g_list_next (l))
- {
- GDaemonMount *existing_mount = l->data;
- GMountInfo *existing_mount_info;
-
- existing_mount_info = g_daemon_mount_get_mount_info (existing_mount);
- if (g_mount_info_equal (mount_info, existing_mount_info))
- {
- found_mount = existing_mount;
- break;
- }
- }
-
- return found_mount;
-}
-
-GDaemonMount *
-g_daemon_volume_monitor_find_mount_by_mount_info (GMountInfo *mount_info)
-{
- GDaemonMount *daemon_mount;
-
- G_LOCK (daemon_vm);
-
- daemon_mount = NULL;
- if (_the_daemon_volume_monitor != NULL)
- {
- daemon_mount = find_mount_by_mount_info (_the_daemon_volume_monitor, mount_info);
-
- if (daemon_mount != NULL)
- g_object_ref (daemon_mount);
- }
-
- G_UNLOCK (daemon_vm);
-
- return daemon_mount;
-}
-
-static void
-mount_added (GDaemonVolumeMonitor *daemon_monitor, GMountInfo *mount_info)
-{
- GDaemonMount *mount;
- GVolume *volume;
-
- G_LOCK (daemon_vm);
-
- mount = find_mount_by_mount_info (daemon_monitor, mount_info);
- if (mount)
- {
- g_warning (G_STRLOC ": Mount was added twice!");
-
- G_UNLOCK (daemon_vm);
- return;
- }
-
- if (mount_info->user_visible)
- {
- mount = g_daemon_mount_new (mount_info, G_VOLUME_MONITOR (daemon_monitor));
- volume = g_volume_monitor_adopt_orphan_mount (G_MOUNT (mount));
- if (volume != NULL)
- g_daemon_mount_set_foreign_volume (mount, volume);
- daemon_monitor->mounts = g_list_prepend (daemon_monitor->mounts, mount);
-
- /* Ref for the signal emission, other ref is owned by volume monitor */
- g_object_ref (mount);
- }
-
- G_UNLOCK (daemon_vm);
-
- if (mount)
- {
- /* Emit signal outside lock */
- g_signal_emit_by_name (daemon_monitor, "mount_added", mount);
- g_object_unref (mount);
- }
-}
-
-static void
-mount_removed (GDaemonVolumeMonitor *daemon_monitor, GMountInfo *mount_info)
-{
- GDaemonMount *mount;
-
- G_LOCK (daemon_vm);
-
- mount = find_mount_by_mount_info (daemon_monitor, mount_info);
- if (!mount)
- {
- if (mount_info->user_visible)
- g_warning (G_STRLOC ": An unknown mount was removed!");
-
- G_UNLOCK (daemon_vm);
- return;
- }
-
- daemon_monitor->mounts = g_list_remove (daemon_monitor->mounts, mount);
-
- G_UNLOCK (daemon_vm);
-
- g_signal_emit_by_name (daemon_monitor, "mount_removed", mount);
- g_signal_emit_by_name (mount, "unmounted");
-
- g_object_unref (mount);
-}
-
-static void
-g_daemon_volume_monitor_init (GDaemonVolumeMonitor *daemon_monitor)
-{
- GList *mounts, *l;
- GDaemonMount *mount;
- GMountInfo *info;
- GVolume *volume;
-
- _the_daemon_volume_monitor = daemon_monitor;
-
- daemon_monitor->mount_tracker = g_mount_tracker_new (_g_daemon_vfs_get_async_bus ());
-
- g_signal_connect_swapped (daemon_monitor->mount_tracker, "mounted",
- (GCallback) mount_added, daemon_monitor);
- g_signal_connect_swapped (daemon_monitor->mount_tracker, "unmounted",
- (GCallback) mount_removed, daemon_monitor);
-
- /* Initialize with current list */
- mounts = g_mount_tracker_list_mounts (daemon_monitor->mount_tracker);
-
- for (l = mounts; l != NULL; l = l->next) {
- info = l->data;
- if (info->user_visible)
- {
- mount = g_daemon_mount_new (info, G_VOLUME_MONITOR (daemon_monitor));
- volume = g_volume_monitor_adopt_orphan_mount (G_MOUNT (mount));
- if (volume != NULL)
- g_daemon_mount_set_foreign_volume (mount, volume);
- daemon_monitor->mounts = g_list_prepend (daemon_monitor->mounts, mount);
- }
-
- g_mount_info_unref (info);
- }
-
- g_list_free (mounts);
-}
-
-static void
-g_daemon_volume_monitor_finalize (GObject *object)
-{
- GDaemonVolumeMonitor *monitor;
-
- monitor = G_DAEMON_VOLUME_MONITOR (object);
-
- g_signal_handlers_disconnect_by_func (monitor->mount_tracker, mount_added, monitor);
- g_signal_handlers_disconnect_by_func (monitor->mount_tracker, mount_removed, monitor);
-
- g_object_unref (monitor->mount_tracker);
-
- g_list_foreach (monitor->mounts, (GFunc)g_object_unref, NULL);
- g_list_free (monitor->mounts);
-
- if (G_OBJECT_CLASS (g_daemon_volume_monitor_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_daemon_volume_monitor_parent_class)->finalize) (object);
-}
-
-static void
-g_daemon_volume_monitor_dispose (GObject *object)
-{
- GDaemonVolumeMonitor *monitor;
-
- monitor = G_DAEMON_VOLUME_MONITOR (object);
-
- G_LOCK (daemon_vm);
- _the_daemon_volume_monitor = NULL;
- G_UNLOCK (daemon_vm);
-
- if (G_OBJECT_CLASS (g_daemon_volume_monitor_parent_class)->dispose)
- (*G_OBJECT_CLASS (g_daemon_volume_monitor_parent_class)->dispose) (object);
-}
-
-static void
-g_daemon_volume_monitor_class_finalize (GDaemonVolumeMonitorClass *klass)
-{
-}
-
-static gboolean
-is_supported (void)
-{
- GVfs *vfs;
- gboolean res;
-
- res = FALSE;
-
- /* Don't do anything if the default vfs is not DAEMON_VFS */
- vfs = g_vfs_get_default ();
-
- if (vfs != NULL && G_IS_DAEMON_VFS (vfs))
- res = TRUE;
-
- return res;
-}
-
-static void
-g_daemon_volume_monitor_class_init (GDaemonVolumeMonitorClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVolumeMonitorClass *monitor_class = G_VOLUME_MONITOR_CLASS (klass);
-
- gobject_class->finalize = g_daemon_volume_monitor_finalize;
- gobject_class->dispose = g_daemon_volume_monitor_dispose;
-
- monitor_class->is_supported = is_supported;
- monitor_class->get_mounts = get_mounts;
- monitor_class->get_volumes = get_volumes;
- monitor_class->get_connected_drives = get_connected_drives;
- monitor_class->get_volume_for_uuid = get_volume_for_uuid;
- monitor_class->get_mount_for_uuid = get_mount_for_uuid;
-}
-
-GVolumeMonitor *
-g_daemon_volume_monitor_new (void)
-{
- GDaemonVolumeMonitor *monitor;
-
- monitor = g_object_new (G_TYPE_DAEMON_VOLUME_MONITOR, NULL);
-
- return G_VOLUME_MONITOR (monitor);
-}
-
-void
-g_daemon_volume_monitor_register_types (GTypeModule *module)
-{
- g_daemon_volume_monitor_register_type (G_TYPE_MODULE (module));
- g_io_extension_point_implement (G_VOLUME_MONITOR_EXTENSION_POINT_NAME,
- G_TYPE_DAEMON_VOLUME_MONITOR,
- "gvfs",
- 0);
-}
diff --git a/client/gdaemonvolumemonitor.h b/client/gdaemonvolumemonitor.h
deleted file mode 100644
index 4019ca35..00000000
--- a/client/gdaemonvolumemonitor.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_DAEMON_VOLUME_MONITOR_H__
-#define __G_DAEMON_VOLUME_MONITOR_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include "gmounttracker.h"
-
-G_BEGIN_DECLS
-
-#define G_TYPE_DAEMON_VOLUME_MONITOR (g_daemon_volume_monitor_get_type ())
-#define G_DAEMON_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DAEMON_VOLUME_MONITOR, GDaemonVolumeMonitor))
-#define G_DAEMON_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DAEMON_VOLUME_MONITOR, GDaemonVolumeMonitorClass))
-#define G_IS_DAEMON_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DAEMON_VOLUME_MONITOR))
-#define G_IS_DAEMON_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DAEMON_VOLUME_MONITOR))
-
-typedef struct _GDaemonVolumeMonitor GDaemonVolumeMonitor;
-typedef struct _GDaemonVolumeMonitorClass GDaemonVolumeMonitorClass;
-
-/* Forward definitions */
-typedef struct _GDaemonMount GDaemonMount;
-typedef struct _GDaemonVolume GDaemonVolume;
-typedef struct _GDaemonDrive GDaemonDrive;
-
-struct _GDaemonVolumeMonitorClass {
- GVolumeMonitorClass parent_class;
-
-};
-
-GType g_daemon_volume_monitor_get_type (void) G_GNUC_CONST;
-void g_daemon_volume_monitor_register_types (GTypeModule *type_module);
-
-GVolumeMonitor *g_daemon_volume_monitor_new (void);
-
-GDaemonMount *g_daemon_volume_monitor_find_mount_by_mount_info (GMountInfo *mount_info);
-
-G_END_DECLS
-
-#endif /* __G_DAEMON_VOLUME_MONITOR_H__ */
diff --git a/client/gvfsdaemondbus.c b/client/gvfsdaemondbus.c
deleted file mode 100644
index aabb8dea..00000000
--- a/client/gvfsdaemondbus.c
+++ /dev/null
@@ -1,1024 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <errno.h>
-#include <poll.h>
-
-#include <glib/gi18n-lib.h>
-
-#include <gio/gio.h>
-#include "gvfsdaemondbus.h"
-#include <gvfsdaemonprotocol.h>
-#include <gdaemonvfs.h>
-#include "gdbusutils.h"
-#include "gsysutils.h"
-
-/* Extra vfs-specific data for DBusConnections */
-typedef struct {
- int extra_fd;
- int extra_fd_count;
- char *async_dbus_id;
-
- /* Only used for async connections */
- GHashTable *outstanding_fds;
- GSource *extra_fd_source;
-} VfsConnectionData;
-
-static gint32 vfs_data_slot = -1;
-static GOnce once_init_dbus = G_ONCE_INIT;
-
-static GStaticPrivate local_connections = G_STATIC_PRIVATE_INIT;
-
-/* dbus id -> async connection */
-static GHashTable *async_map = NULL;
-G_LOCK_DEFINE_STATIC(async_map);
-
-/* dbus object path -> dbus message filter */
-static GHashTable *obj_path_map = NULL;
-G_LOCK_DEFINE_STATIC(obj_path_map);
-
-static void setup_async_fd_receive (VfsConnectionData *connection_data);
-static void invalidate_local_connection (const char *dbus_id,
- GError **error);
-
-
-GQuark
-_g_vfs_error_quark (void)
-{
- return g_quark_from_static_string ("g-vfs-error-quark");
-}
-
-static gpointer
-vfs_dbus_init (gpointer arg)
-{
- if (!dbus_connection_allocate_data_slot (&vfs_data_slot))
- g_error ("Unable to allocate data slot");
-
- return NULL;
-}
-
-/**************************************************************************
- * message filters for vfs dbus connections *
- *************************************************************************/
-
-typedef struct {
- DBusHandleMessageFunction callback;
- GObject *data;
-} PathMapEntry;
-
-void
-_g_dbus_register_vfs_filter (const char *obj_path,
- DBusHandleMessageFunction callback,
- GObject *data)
-{
- PathMapEntry * entry;
-
- G_LOCK (obj_path_map);
-
- if (obj_path_map == NULL)
- obj_path_map = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_free);
-
- entry = g_new (PathMapEntry,1 );
- entry->callback = callback;
- entry->data = data;
-
- g_hash_table_insert (obj_path_map, g_strdup (obj_path), entry);
-
- G_UNLOCK (obj_path_map);
-}
-
-void
-_g_dbus_unregister_vfs_filter (const char *obj_path)
-{
- G_LOCK (obj_path_map);
-
- if (obj_path_map)
- g_hash_table_remove (obj_path_map, obj_path);
-
- G_UNLOCK (obj_path_map);
-}
-
-static DBusHandlerResult
-vfs_connection_filter (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
-{
- PathMapEntry *entry;
- DBusHandlerResult res;
- DBusHandleMessageFunction callback;
- GObject *data;
- VfsConnectionData *connection_data;
- const char *path;
-
- callback = NULL;
- data = NULL;
-
- if (dbus_message_is_signal (message,
- DBUS_INTERFACE_LOCAL,
- "Disconnected"))
- {
- connection_data = dbus_connection_get_data (connection, vfs_data_slot);
- if (connection_data->async_dbus_id)
- {
- _g_daemon_vfs_invalidate_dbus_id (connection_data->async_dbus_id);
- G_LOCK (async_map);
- g_hash_table_remove (async_map, connection_data->async_dbus_id);
- G_UNLOCK (async_map);
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- }
-
- path = dbus_message_get_path (message);
- G_LOCK (obj_path_map);
- if (obj_path_map && path)
- {
- entry = g_hash_table_lookup (obj_path_map,
- path);
-
- if (entry)
- {
- callback = entry->callback;
- data = g_object_ref (entry->data);
- }
- }
- G_UNLOCK (obj_path_map);
-
- res = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- if (callback)
- {
- res = callback (connection, message, data);
- g_object_unref (data);
- }
-
- return res;
-}
-
-static void
-connection_data_free (gpointer p)
-{
- VfsConnectionData *data = p;
-
- if (data->extra_fd != -1)
- close (data->extra_fd);
-
- if (data->extra_fd_source)
- {
- g_source_destroy (data->extra_fd_source);
- g_source_unref (data->extra_fd_source);
- }
-
- if (data->outstanding_fds)
- g_hash_table_destroy (data->outstanding_fds);
-
- g_free (data->async_dbus_id);
-
- g_free (data);
-}
-
-static void
-vfs_connection_setup (DBusConnection *connection,
- int extra_fd,
- gboolean async)
-{
- VfsConnectionData *connection_data;
-
- connection_data = g_new0 (VfsConnectionData, 1);
- connection_data->extra_fd = extra_fd;
- connection_data->extra_fd_count = 0;
-
- if (async)
- setup_async_fd_receive (connection_data);
-
- if (!dbus_connection_set_data (connection, vfs_data_slot, connection_data, connection_data_free))
- _g_dbus_oom ();
-
- if (!dbus_connection_add_filter (connection, vfs_connection_filter, NULL, NULL))
- _g_dbus_oom ();
-}
-
-/**************************************************************************
- * Functions to get fds from vfs dbus connections *
- *************************************************************************/
-
-typedef struct {
- int fd;
- GetFdAsyncCallback callback;
- gpointer callback_data;
-} OutstandingFD;
-
-static void
-outstanding_fd_free (OutstandingFD *outstanding)
-{
- if (outstanding->fd != -1)
- close (outstanding->fd);
-
- g_free (outstanding);
-}
-
-static void
-async_connection_accept_new_fd (VfsConnectionData *data,
- GIOCondition condition,
- int fd)
-{
- int new_fd;
- int fd_id;
- OutstandingFD *outstanding_fd;
-
- if (condition & G_IO_HUP)
- {
- close (data->extra_fd);
- data->extra_fd = -1;
- g_source_destroy (data->extra_fd_source);
- g_source_unref (data->extra_fd_source);
- data->extra_fd_source = NULL;
- return;
- }
-
- fd_id = data->extra_fd_count;
- new_fd = _g_socket_receive_fd (data->extra_fd);
- if (new_fd != -1)
- {
- data->extra_fd_count++;
-
- outstanding_fd = g_hash_table_lookup (data->outstanding_fds, GINT_TO_POINTER (fd_id));
-
- if (outstanding_fd)
- {
- outstanding_fd->callback (new_fd, outstanding_fd->callback_data);
- g_hash_table_remove (data->outstanding_fds, GINT_TO_POINTER (fd_id));
- }
- else
- {
- outstanding_fd = g_new0 (OutstandingFD, 1);
- outstanding_fd->fd = new_fd;
- outstanding_fd->callback = NULL;
- outstanding_fd->callback_data = NULL;
- g_hash_table_insert (data->outstanding_fds,
- GINT_TO_POINTER (fd_id),
- outstanding_fd);
- }
- }
-}
-
-static void
-setup_async_fd_receive (VfsConnectionData *connection_data)
-{
- connection_data->outstanding_fds =
- g_hash_table_new_full (g_direct_hash,
- g_direct_equal,
- NULL,
- (GDestroyNotify)outstanding_fd_free);
-
-
- connection_data->extra_fd_source =
- __g_fd_source_new (connection_data->extra_fd, POLLIN|POLLERR, NULL);
- g_source_set_callback (connection_data->extra_fd_source,
- (GSourceFunc)async_connection_accept_new_fd,
- connection_data, NULL);
- g_source_attach (connection_data->extra_fd_source, NULL);
-}
-
-int
-_g_dbus_connection_get_fd_sync (DBusConnection *connection,
- int fd_id)
-{
- VfsConnectionData *data;
- int fd;
-
- data = dbus_connection_get_data (connection, vfs_data_slot);
- g_assert (data != NULL);
-
- /* I don't think we can get reorders here, can we?
- * Its a sync per-thread connection after all
- */
- g_assert (fd_id == data->extra_fd_count);
-
- fd = _g_socket_receive_fd (data->extra_fd);
- if (fd != -1)
- data->extra_fd_count++;
-
- return fd;
-}
-
-void
-_g_dbus_connection_get_fd_async (DBusConnection *connection,
- int fd_id,
- GetFdAsyncCallback callback,
- gpointer callback_data)
-{
- VfsConnectionData *data;
- OutstandingFD *outstanding_fd;
- int fd;
-
- data = dbus_connection_get_data (connection, vfs_data_slot);
- g_assert (data != NULL);
-
- outstanding_fd = g_hash_table_lookup (data->outstanding_fds, GINT_TO_POINTER (fd_id));
-
- if (outstanding_fd)
- {
- fd = outstanding_fd->fd;
- outstanding_fd->fd = -1;
- g_hash_table_remove (data->outstanding_fds, GINT_TO_POINTER (fd_id));
- callback (fd, callback_data);
- }
- else
- {
- outstanding_fd = g_new0 (OutstandingFD, 1);
- outstanding_fd->fd = -1;
- outstanding_fd->callback = callback;
- outstanding_fd->callback_data = callback_data;
- g_hash_table_insert (data->outstanding_fds,
- GINT_TO_POINTER (fd_id),
- outstanding_fd);
- }
-}
-
-/*******************************************************************
- * Caching of async connections *
- *******************************************************************/
-
-
-static DBusConnection *
-get_connection_for_async (const char *dbus_id)
-{
- DBusConnection *connection;
-
- connection = NULL;
- G_LOCK (async_map);
- if (async_map != NULL)
- connection = g_hash_table_lookup (async_map, dbus_id);
- if (connection)
- dbus_connection_ref (connection);
- G_UNLOCK (async_map);
-
- return connection;
-}
-
-static void
-close_and_unref_connection (void *data)
-{
- DBusConnection *connection = data;
-
- dbus_connection_close (connection);
- dbus_connection_unref (connection);
-}
-
-static void
-set_connection_for_async (DBusConnection *connection, const char *dbus_id)
-{
- VfsConnectionData *data;
-
- G_LOCK (async_map);
- data = dbus_connection_get_data (connection, vfs_data_slot);
- data->async_dbus_id = g_strdup (dbus_id);
-
- if (async_map == NULL)
- async_map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, close_and_unref_connection);
-
- g_hash_table_insert (async_map, g_strdup (dbus_id), connection);
- dbus_connection_ref (connection);
- G_UNLOCK (async_map);
-}
-
-/**************************************************************************
- * Asynchronous daemon calls *
- *************************************************************************/
-
-typedef struct {
- const char *dbus_id;
-
- DBusMessage *message;
- DBusConnection *connection;
- GCancellable *cancellable;
-
- GVfsAsyncDBusCallback callback;
- gpointer callback_data;
-
- GError *io_error;
- gulong cancelled_tag;
-} AsyncDBusCall;
-
-static void
-async_call_finish (AsyncDBusCall *async_call,
- DBusMessage *reply)
-{
- if (async_call->callback)
- async_call->callback (reply, async_call->connection,
- async_call->io_error,
- async_call->callback_data);
-
- if (async_call->connection)
- dbus_connection_unref (async_call->connection);
- dbus_message_unref (async_call->message);
- if (async_call->cancellable)
- g_object_unref (async_call->cancellable);
- if (async_call->io_error)
- g_error_free (async_call->io_error);
- g_free (async_call);
-}
-
-static void
-async_dbus_response (DBusMessage *reply,
- GError *error,
- gpointer data)
-{
- AsyncDBusCall *async_call = data;
-
- if (async_call->cancelled_tag)
- g_signal_handler_disconnect (async_call->cancellable,
- async_call->cancelled_tag);
-
- if (reply == NULL)
- async_call->io_error = g_error_copy (error);
-
- async_call_finish (async_call, reply);
-}
-
-typedef struct {
- DBusConnection *connection;
- dbus_uint32_t serial;
-} AsyncCallCancelData;
-
-static void
-async_call_cancel_data_free (gpointer _data)
-{
- AsyncCallCancelData *data = _data;
-
- dbus_connection_unref (data->connection);
- g_free (data);
-}
-
-/* Might be called on another thread */
-static void
-async_call_cancelled_cb (GCancellable *cancellable,
- gpointer _data)
-{
- AsyncCallCancelData *data = _data;
- DBusMessage *cancel_message;
-
- /* Send cancellation message, this just queues it, sending
- * will happen in mainloop */
- cancel_message = dbus_message_new_method_call (NULL,
- G_VFS_DBUS_DAEMON_PATH,
- G_VFS_DBUS_DAEMON_INTERFACE,
- G_VFS_DBUS_OP_CANCEL);
- if (cancel_message != NULL)
- {
- if (dbus_message_append_args (cancel_message,
- DBUS_TYPE_UINT32, &data->serial,
- DBUS_TYPE_INVALID))
- dbus_connection_send (data->connection,
- cancel_message, NULL);
- dbus_message_unref (cancel_message);
- }
-}
-
-static void
-async_call_send (AsyncDBusCall *async_call)
-{
- AsyncCallCancelData *cancel_data;
-
- if (async_call->cancellable)
- {
- cancel_data = g_new0 (AsyncCallCancelData, 1);
- cancel_data->connection = dbus_connection_ref (async_call->connection);
- cancel_data->serial = dbus_message_get_serial (async_call->message);
- async_call->cancelled_tag =
- g_signal_connect_data (async_call->cancellable, "cancelled",
- (GCallback)async_call_cancelled_cb,
- cancel_data,
- (GClosureNotify)async_call_cancel_data_free,
- 0);
- }
-
- _g_dbus_connection_call_async (async_call->connection,
- async_call->message,
- G_VFS_DBUS_TIMEOUT_MSECS,
- async_dbus_response,
- async_call);
-}
-
-static void
-async_get_connection_response (DBusMessage *reply,
- GError *error,
- void *data)
-{
- AsyncDBusCall *async_call = data;
- DBusError derror;
- char *address1, *address2;
- int extra_fd;
- DBusConnection *connection, *existing_connection;
-
- if (reply == NULL)
- {
- async_call->io_error = g_error_copy (error);
- async_call_finish (async_call, NULL);
- return;
- }
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (reply, &derror,
- DBUS_TYPE_STRING, &address1,
- DBUS_TYPE_STRING, &address2,
- DBUS_TYPE_INVALID))
- {
- _g_error_from_dbus (&derror, &async_call->io_error);
- dbus_error_free (&derror);
- async_call_finish (async_call, NULL);
- return;
- }
-
- /* I don't know of any way to do an async connect */
- error = NULL;
- extra_fd = _g_socket_connect (address2, &error);
- if (extra_fd == -1)
- {
- g_set_error (&async_call->io_error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Error connecting to daemon: %s"), error->message);
- g_error_free (error);
- async_call_finish (async_call, NULL);
- return;
- }
-
- /* Unfortunately dbus doesn't have an async open */
- dbus_error_init (&derror);
- connection = dbus_connection_open_private (address1, &derror);
- if (!connection)
- {
- close (extra_fd);
- dbus_message_unref (reply);
-
- g_set_error (&async_call->io_error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Error while getting peer-to-peer dbus connection: %s",
- derror.message);
- dbus_error_free (&derror);
- async_call_finish (async_call, NULL);
- return;
- }
-
- vfs_connection_setup (connection, extra_fd, TRUE);
-
- /* Maybe we already had a connection? This happens if we requested
- * the same owner several times in parallel.
- * If so, just drop this connection and use that.
- */
-
- existing_connection = get_connection_for_async (async_call->dbus_id);
- if (existing_connection != NULL)
- {
- async_call->connection = existing_connection;
- dbus_connection_close (connection);
- dbus_connection_unref (connection);
- }
- else
- {
- _g_dbus_connection_integrate_with_main (connection);
- set_connection_for_async (connection, async_call->dbus_id);
- async_call->connection = connection;
- }
-
- /* Maybe we were canceled while setting up connection, then
- * avoid doing the operation */
- if (g_cancellable_set_error_if_cancelled (async_call->cancellable, &async_call->io_error))
- {
- async_call_finish (async_call, NULL);
- return;
- }
-
- async_call_send (async_call);
-}
-
-static void
-open_connection_async (AsyncDBusCall *async_call)
-{
- DBusMessage *get_connection_message;
-
- get_connection_message = dbus_message_new_method_call (async_call->dbus_id,
- G_VFS_DBUS_DAEMON_PATH,
- G_VFS_DBUS_DAEMON_INTERFACE,
- G_VFS_DBUS_OP_GET_CONNECTION);
-
- if (get_connection_message == NULL)
- _g_dbus_oom ();
-
-
- _g_dbus_connection_call_async (_g_daemon_vfs_get_async_bus (),
- get_connection_message,
- G_VFS_DBUS_TIMEOUT_MSECS,
- async_get_connection_response,
- async_call);
-
- dbus_message_unref (get_connection_message);
-}
-
-void
-_g_vfs_daemon_call_async (DBusMessage *message,
- GVfsAsyncDBusCallback callback,
- gpointer callback_data,
- GCancellable *cancellable)
-{
- AsyncDBusCall *async_call;
-
- g_once (&once_init_dbus, vfs_dbus_init, NULL);
-
- async_call = g_new0 (AsyncDBusCall, 1);
- async_call->dbus_id = dbus_message_get_destination (message);
- async_call->message = dbus_message_ref (message);
- if (cancellable)
- async_call->cancellable = g_object_ref (cancellable);
- async_call->callback = callback;
- async_call->callback_data = callback_data;
-
- async_call->connection = get_connection_for_async (async_call->dbus_id);
- if (async_call->connection == NULL)
- open_connection_async (async_call);
- else
- async_call_send (async_call);
-}
-
-/**************************************************************************
- * Synchronous daemon calls *
- *************************************************************************/
-
-DBusMessage *
-_g_vfs_daemon_call_sync (DBusMessage *message,
- DBusConnection **connection_out,
- const char *callback_obj_path,
- DBusObjectPathMessageFunction callback,
- gpointer callback_user_data,
- GCancellable *cancellable,
- GError **error)
-{
- DBusConnection *connection;
- DBusError derror;
- DBusMessage *reply;
- DBusPendingCall *pending;
- int dbus_fd;
- int cancel_fd;
- gboolean sent_cancel;
- DBusMessage *cancel_message;
- dbus_uint32_t serial;
- gboolean handle_callbacks;
- const char *dbus_id = dbus_message_get_destination (message);
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return NULL;
-
- connection = _g_dbus_connection_get_sync (dbus_id, error);
- if (connection == NULL)
- return NULL;
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return NULL;
-
- handle_callbacks = FALSE;
- if (callback_obj_path != NULL && callback != NULL)
- {
- struct DBusObjectPathVTable vtable = { NULL, callback };
- handle_callbacks = dbus_connection_register_object_path (connection,
- callback_obj_path,
- &vtable,
- callback_user_data);
- }
-
- reply = NULL;
- cancel_fd = g_cancellable_get_fd (cancellable);
- if (cancel_fd != -1 || handle_callbacks)
- {
- if (!dbus_connection_send_with_reply (connection, message,
- &pending,
- G_VFS_DBUS_TIMEOUT_MSECS))
- _g_dbus_oom ();
-
- if (pending == NULL ||
- !dbus_connection_get_is_connected (connection))
- {
- if (pending)
- dbus_pending_call_unref (pending);
- invalidate_local_connection (dbus_id, error);
- goto out;
- }
-
- /* Make sure the message is sent */
- dbus_connection_flush (connection);
-
- if (!dbus_connection_get_unix_fd (connection, &dbus_fd))
- {
- dbus_pending_call_unref (pending);
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Error while getting peer-to-peer dbus connection: %s",
- "No fd");
- goto out;
- }
-
- sent_cancel = (cancel_fd == -1);
- while (!dbus_pending_call_get_completed (pending))
- {
- struct pollfd poll_fds[2];
- int poll_ret;
-
- do
- {
- poll_fds[0].events = POLLIN;
- poll_fds[0].fd = dbus_fd;
- poll_fds[1].events = POLLIN;
- poll_fds[1].fd = cancel_fd;
- poll_ret = poll (poll_fds, sent_cancel?1:2, -1);
- }
- while (poll_ret == -1 && errno == EINTR);
-
- if (poll_ret == -1)
- {
- dbus_pending_call_unref (pending);
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Error while getting peer-to-peer dbus connection: %s",
- "poll error");
- goto out;
- }
-
- if (!sent_cancel && g_cancellable_is_cancelled (cancellable))
- {
- sent_cancel = TRUE;
- serial = dbus_message_get_serial (message);
- cancel_message =
- dbus_message_new_method_call (NULL,
- G_VFS_DBUS_DAEMON_PATH,
- G_VFS_DBUS_DAEMON_INTERFACE,
- G_VFS_DBUS_OP_CANCEL);
- if (cancel_message != NULL)
- {
- if (dbus_message_append_args (cancel_message,
- DBUS_TYPE_UINT32, &serial,
- DBUS_TYPE_INVALID))
- {
- dbus_connection_send (connection, cancel_message, NULL);
- dbus_connection_flush (connection);
- }
-
- dbus_message_unref (cancel_message);
- }
- }
-
- if (poll_fds[0].revents != 0)
- {
- dbus_connection_read_write (connection,
- G_VFS_DBUS_TIMEOUT_MSECS);
-
- while (dbus_connection_dispatch (connection) == DBUS_DISPATCH_DATA_REMAINS)
- ;
- }
- }
-
- reply = dbus_pending_call_steal_reply (pending);
- dbus_pending_call_unref (pending);
- }
- else
- {
- dbus_error_init (&derror);
- reply = dbus_connection_send_with_reply_and_block (connection, message,
- G_VFS_DBUS_TIMEOUT_MSECS,
- &derror);
- if (!reply)
- {
- if (dbus_error_has_name (&derror, DBUS_ERROR_NO_REPLY) &&
- !dbus_connection_get_is_connected (connection))
- {
- /* The mount for this connection died, we invalidate
- * the caches, and then caller needs to retry.
- */
-
- invalidate_local_connection (dbus_id, error);
- }
- else
- _g_error_from_dbus (&derror, error);
- dbus_error_free (&derror);
- goto out;
- }
- }
-
- if (connection_out)
- *connection_out = connection;
-
- out:
-
- if (handle_callbacks)
- dbus_connection_unregister_object_path (connection, callback_obj_path);
-
- if (reply != NULL && _g_error_from_message (reply, error))
- {
- dbus_message_unref (reply);
- return NULL;
- }
-
- return reply;
-}
-
-/*************************************************************************
- * get per-thread synchronous dbus connections *
- *************************************************************************/
-
-typedef struct {
- GHashTable *connections;
- DBusConnection *session_bus;
-} ThreadLocalConnections;
-
-static void
-free_mount_connection (DBusConnection *conn)
-{
- dbus_connection_close (conn);
- dbus_connection_unref (conn);
-}
-
-static void
-free_local_connections (ThreadLocalConnections *local)
-{
- g_hash_table_destroy (local->connections);
- if (local->session_bus)
- free_mount_connection (local->session_bus);
- g_free (local);
-}
-
-static void
-invalidate_local_connection (const char *dbus_id,
- GError **error)
-{
- ThreadLocalConnections *local;
-
- _g_daemon_vfs_invalidate_dbus_id (dbus_id);
-
- local = g_static_private_get (&local_connections);
- if (local)
- g_hash_table_remove (local->connections, dbus_id);
-
- g_set_error_literal (error,
- G_VFS_ERROR,
- G_VFS_ERROR_RETRY,
- "Cache invalid, retry (internally handled)");
-}
-
-DBusConnection *
-_g_dbus_connection_get_sync (const char *dbus_id,
- GError **error)
-{
- DBusConnection *bus;
- ThreadLocalConnections *local;
- GError *local_error;
- DBusConnection *connection;
- DBusMessage *message, *reply;
- DBusError derror;
- char *address1, *address2;
- int extra_fd;
-
- g_once (&once_init_dbus, vfs_dbus_init, NULL);
-
- local = g_static_private_get (&local_connections);
- if (local == NULL)
- {
- local = g_new0 (ThreadLocalConnections, 1);
- local->connections = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, (GDestroyNotify)free_mount_connection);
- g_static_private_set (&local_connections, local, (GDestroyNotify)free_local_connections);
- }
-
- if (dbus_id == NULL)
- {
- /* Session bus */
-
- if (local->session_bus)
- {
- if (dbus_connection_get_is_connected (local->session_bus))
- return local->session_bus;
-
- /* Session bus was disconnected, re-connect */
- local->session_bus = NULL;
- dbus_connection_unref (local->session_bus);
- }
- }
- else
- {
- /* Mount daemon connection */
-
- connection = g_hash_table_lookup (local->connections, dbus_id);
- if (connection != NULL)
- {
- if (!dbus_connection_get_is_connected (connection))
- {
- /* The mount for this connection died, we invalidate
- * the caches, and then caller needs to retry.
- */
-
- invalidate_local_connection (dbus_id, error);
- return NULL;
- }
-
- return connection;
- }
- }
-
- dbus_error_init (&derror);
-
- if (local->session_bus == NULL)
- {
- bus = dbus_bus_get_private (DBUS_BUS_SESSION, &derror);
- if (bus == NULL)
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Couldn't get main dbus connection: %s",
- derror.message);
- dbus_error_free (&derror);
- return NULL;
- }
-
- local->session_bus = bus;
-
- if (dbus_id == NULL)
- return bus; /* We actually wanted the session bus, so done */
- }
-
- message = dbus_message_new_method_call (dbus_id,
- G_VFS_DBUS_DAEMON_PATH,
- G_VFS_DBUS_DAEMON_INTERFACE,
- G_VFS_DBUS_OP_GET_CONNECTION);
- reply = dbus_connection_send_with_reply_and_block (local->session_bus, message, -1,
- &derror);
- dbus_message_unref (message);
-
- if (!reply)
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Error while getting peer-to-peer dbus connection: %s",
- derror.message);
- dbus_error_free (&derror);
- return NULL;
- }
-
- if (_g_error_from_message (reply, error))
- return NULL;
-
- dbus_message_get_args (reply, NULL,
- DBUS_TYPE_STRING, &address1,
- DBUS_TYPE_STRING, &address2,
- DBUS_TYPE_INVALID);
-
- local_error = NULL;
- extra_fd = _g_socket_connect (address2, &local_error);
- if (extra_fd == -1)
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Error connecting to daemon: %s"), local_error->message);
- g_error_free (local_error);
- dbus_message_unref (reply);
- return NULL;
- }
-
- dbus_error_init (&derror);
- connection = dbus_connection_open_private (address1, &derror);
- if (!connection)
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Error while getting peer-to-peer dbus connection: %s",
- derror.message);
- close (extra_fd);
- dbus_message_unref (reply);
- dbus_error_free (&derror);
- return NULL;
- }
- dbus_message_unref (reply);
-
- vfs_connection_setup (connection, extra_fd, FALSE);
-
- g_hash_table_insert (local->connections, g_strdup (dbus_id), connection);
-
- return connection;
-}
diff --git a/client/gvfsdaemondbus.h b/client/gvfsdaemondbus.h
deleted file mode 100644
index 7a132cdc..00000000
--- a/client/gvfsdaemondbus.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_DAEMON_DBUS_H__
-#define __G_VFS_DAEMON_DBUS_H__
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-/* Used for internal errors */
-GQuark _g_vfs_error_quark (void);
-#define G_VFS_ERROR _g_vfs_error_quark()
-
-typedef enum
-{
- G_VFS_ERROR_RETRY
-} GVfsError;
-
-
-typedef void (*GVfsAsyncDBusCallback) (DBusMessage *reply,
- DBusConnection *connection,
- GError *io_error,
- gpointer callback_data);
-typedef void (*GetFdAsyncCallback) (int fd,
- gpointer callback_data);
-
-void _g_dbus_register_vfs_filter (const char *obj_path,
- DBusHandleMessageFunction callback,
- GObject *data);
-void _g_dbus_unregister_vfs_filter (const char *obj_path);
-GList * _g_dbus_bus_list_names_with_prefix_sync (DBusConnection *connection,
- const char *prefix,
- DBusError *error);
-DBusConnection *_g_dbus_connection_get_sync (const char *dbus_id,
- GError **error);
-int _g_dbus_connection_get_fd_sync (DBusConnection *conn,
- int fd_id);
-void _g_dbus_connection_get_fd_async (DBusConnection *connection,
- int fd_id,
- GetFdAsyncCallback callback,
- gpointer callback_data);
-void _g_vfs_daemon_call_async (DBusMessage *message,
- GVfsAsyncDBusCallback callback,
- gpointer callback_data,
- GCancellable *cancellable);
-DBusMessage * _g_vfs_daemon_call_sync (DBusMessage *message,
- DBusConnection **connection_out,
- const char *callback_obj_path,
- DBusObjectPathMessageFunction callback,
- gpointer callback_user_data,
- GCancellable *cancellable,
- GError **error);
-GFileInfo * _g_dbus_get_file_info (DBusMessageIter *iter,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __G_VFS_DAEMON_DBUS_H__ */
diff --git a/client/gvfsfusedaemon.c b/client/gvfsfusedaemon.c
deleted file mode 100644
index ef3314c3..00000000
--- a/client/gvfsfusedaemon.c
+++ /dev/null
@@ -1,2207 +0,0 @@
-/* gvfsfusedaemon.c - FUSE file system mapping daemon for GVFS
- *
- * Copyright (C) 2007-2008 Hans Petter Jansson
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Hans Petter Jansson <hpj@novell.com>
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <sys/vfs.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <signal.h>
-
-#include <dbus/dbus.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib/gprintf.h>
-#include <gio/gio.h>
-
-#include <glib/gurifuncs.h>
-
-/* stuff from common/ */
-#include <gdaemonmount.h>
-#include <gvfsdaemonprotocol.h>
-#include <gdbusutils.h>
-
-#define FUSE_USE_VERSION 26
-#include <fuse.h>
-
-#define DEBUG_ENABLED 0
-
-#define GET_FILE_HANDLE(fi) ((gpointer) (fi)->fh)
-#define SET_FILE_HANDLE(fi, fh) ((fi)->fh = (guint64) (fh))
-
-typedef struct {
- time_t creation_time;
- char *name;
- GFile *root;
-} MountRecord;
-
-typedef enum {
- FILE_OP_NONE,
- FILE_OP_READ,
- FILE_OP_WRITE
-} FileOp;
-
-typedef struct {
- gint refcount;
-
- GMutex *mutex;
- gchar *path;
- FileOp op;
- gpointer stream;
- gint length;
- size_t pos;
-} FileHandle;
-
-static GThread *subthread = NULL;
-static GMainLoop *subthread_main_loop = NULL;
-static GVfs *gvfs = NULL;
-
-static GVolumeMonitor *volume_monitor = NULL;
-
-/* Contains pointers to MountRecord */
-static GList *mount_list = NULL;
-static GMutex *mount_list_mutex;
-
-static time_t daemon_creation_time;
-static uid_t daemon_uid;
-static gid_t daemon_gid;
-
-static GStaticMutex global_mutex = G_STATIC_MUTEX_INIT;
-static GHashTable *global_fh_table = NULL;
-
-/* ------- *
- * Helpers *
- * ------- */
-
-static void
-debug_print (const gchar *message, ...)
-{
-#if DEBUG_ENABLED
-
- static FILE *debug_fhd = NULL;
- va_list var_args;
- char *file;
-
- if (!debug_fhd)
- {
- file = g_build_filename (g_get_home_dir (), "vfs.debug", NULL);
- debug_fhd = fopen (file, "at");
- g_free (file);
- }
-
- if (!debug_fhd)
- return;
-
- va_start (var_args, message);
- g_vfprintf (debug_fhd, message, var_args);
- va_end (var_args);
-
- fflush (debug_fhd);
-
-#endif
-}
-
-typedef struct {
- gint gioerror;
- gint errno_value;
-} ErrorMap;
-
-static gint
-errno_from_error (GError *error)
-{
- gint i;
- static const ErrorMap error_map [] =
- {
- { G_IO_ERROR_FAILED, EIO },
- { G_IO_ERROR_NOT_FOUND, ENOENT },
- { G_IO_ERROR_EXISTS, EEXIST },
- { G_IO_ERROR_IS_DIRECTORY, EISDIR },
- { G_IO_ERROR_NOT_DIRECTORY, ENOTDIR },
- { G_IO_ERROR_NOT_EMPTY, ENOTEMPTY },
- { G_IO_ERROR_NOT_REGULAR_FILE, EIO },
- { G_IO_ERROR_NOT_SYMBOLIC_LINK, EIO },
- { G_IO_ERROR_NOT_MOUNTABLE_FILE, EIO },
- { G_IO_ERROR_FILENAME_TOO_LONG, ENAMETOOLONG },
- { G_IO_ERROR_INVALID_FILENAME, EIO },
- { G_IO_ERROR_TOO_MANY_LINKS, ELOOP },
- { G_IO_ERROR_NO_SPACE, ENOSPC },
- { G_IO_ERROR_INVALID_ARGUMENT, EINVAL },
- { G_IO_ERROR_PERMISSION_DENIED, EACCES },
- { G_IO_ERROR_NOT_SUPPORTED, ENOTSUP },
- { G_IO_ERROR_NOT_MOUNTED, EIO },
- { G_IO_ERROR_ALREADY_MOUNTED, EIO },
- { G_IO_ERROR_CLOSED, EIO },
- { G_IO_ERROR_CANCELLED, EIO },
- { G_IO_ERROR_PENDING, EIO },
- { G_IO_ERROR_READ_ONLY, EACCES },
- { G_IO_ERROR_CANT_CREATE_BACKUP, EIO },
- { G_IO_ERROR_WRONG_ETAG, EIO },
- { G_IO_ERROR_TIMED_OUT, EIO },
- { G_IO_ERROR_BUSY, EBUSY },
- { -1, -1 }
- };
-
- if (error->domain != G_IO_ERROR)
- return EIO;
-
- for (i = 0; error_map [i].gioerror >= 0; i++)
- {
- if (error_map [i].gioerror == error->code)
- break;
- }
-
- if (error_map [i].gioerror >= 0)
- return error_map [i].errno_value;
-
- return EIO;
-}
-
-static FileHandle *
-file_handle_new (const gchar *path)
-{
- FileHandle *file_handle;
-
- file_handle = g_new0 (FileHandle, 1);
- file_handle->refcount = 1;
- file_handle->mutex = g_mutex_new ();
- file_handle->op = FILE_OP_NONE;
- file_handle->path = g_strdup (path);
-
- return file_handle;
-}
-
-static FileHandle *
-file_handle_ref (FileHandle *file_handle)
-{
- g_atomic_int_inc (&file_handle->refcount);
- return file_handle;
-}
-
-static void
-file_handle_unref (FileHandle *file_handle)
-{
- if (g_atomic_int_dec_and_test (&file_handle->refcount))
- {
- g_static_mutex_lock (&global_mutex);
-
- /* Test again, since e.g. get_file_handle_for_path() might have
- * snatched the global mutex and revived the file handle between
- * g_atomic_int_dec_and_test() and us obtaining the lock. */
-
- if (g_atomic_int_get (&file_handle->refcount) == 0)
- g_hash_table_remove (global_fh_table, file_handle->path);
-
- g_static_mutex_unlock (&global_mutex);
- }
-}
-
-static void
-file_handle_close_stream (FileHandle *file_handle)
-{
- debug_print ("file_handle_close_stream\n");
- if (file_handle->stream)
- {
- switch (file_handle->op)
- {
- case FILE_OP_READ:
- g_input_stream_close (file_handle->stream, NULL, NULL);
- break;
-
- case FILE_OP_WRITE:
- g_output_stream_close (file_handle->stream, NULL, NULL);
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- g_object_unref (file_handle->stream);
- file_handle->stream = NULL;
- file_handle->op = FILE_OP_NONE;
- }
-}
-
-/* Called on hash table removal */
-static void
-file_handle_free (FileHandle *file_handle)
-{
- file_handle_close_stream (file_handle);
- g_mutex_free (file_handle->mutex);
- g_free (file_handle->path);
- g_free (file_handle);
-}
-
-static FileHandle *
-get_file_handle_for_path (const gchar *path)
-{
- FileHandle *fh;
-
- g_static_mutex_lock (&global_mutex);
-
- fh = g_hash_table_lookup (global_fh_table, path);
- if (fh)
- file_handle_ref (fh);
-
- g_static_mutex_unlock (&global_mutex);
-
- return fh;
-}
-
-static FileHandle *
-get_or_create_file_handle_for_path (const gchar *path)
-{
- FileHandle *fh;
-
- g_static_mutex_lock (&global_mutex);
-
- fh = g_hash_table_lookup (global_fh_table, path);
-
- if (fh)
- {
- file_handle_ref (fh);
- }
- else
- {
- fh = file_handle_new (path);
- g_hash_table_insert (global_fh_table, fh->path, fh);
- }
-
- g_static_mutex_unlock (&global_mutex);
-
- return fh;
-}
-
-static void
-reindex_file_handle_for_path (const gchar *old_path, const gchar *new_path)
-{
- gchar *old_path_internal;
- FileHandle *fh;
-
- g_static_mutex_lock (&global_mutex);
-
- if (!g_hash_table_lookup_extended (global_fh_table, old_path,
- (gpointer *) &old_path_internal,
- (gpointer *) &fh))
- goto out;
-
- g_hash_table_steal (global_fh_table, old_path);
-
- g_free (fh->path);
- fh->path = g_strdup (new_path);
-
- g_hash_table_insert (global_fh_table, fh->path, fh);
-
- out:
- g_static_mutex_unlock (&global_mutex);
-}
-
-static MountRecord *
-mount_record_new (GMount *mount)
-{
- MountRecord *mount_record;
- char *name;
-
- mount_record = g_new (MountRecord, 1);
-
- mount_record->root = g_mount_get_root (mount);
- name = g_object_get_data (G_OBJECT (mount), "g-stable-name");
- if (name != NULL && *name != 0)
- name = g_strdup (name);
- else
- name = g_mount_get_name (mount);
-
- /* Keep in sync with gvfs daemon mount tracker */
- mount_record->name = g_uri_escape_string (name, "+@#$., ", TRUE);
- g_free (name);
- mount_record->creation_time = time (NULL);
-
- return mount_record;
-}
-
-static void
-mount_record_free (MountRecord *mount_record)
-{
- g_object_unref (mount_record->root);
- g_free (mount_record->name);
- g_free (mount_record);
-}
-
-static void
-mount_list_lock (void)
-{
- g_mutex_lock (mount_list_mutex);
-}
-
-static void
-mount_list_unlock (void)
-{
- g_mutex_unlock (mount_list_mutex);
-}
-
-static void
-mount_list_free (void)
-{
- g_list_foreach (mount_list, (GFunc) mount_record_free, NULL);
- g_list_free (mount_list);
- mount_list = NULL;
-}
-
-static gboolean
-mount_record_for_mount_exists (GMount *mount)
-{
- GList *l;
- GFile *root;
- gboolean res;
-
- g_assert (mount != NULL);
-
- root = g_mount_get_root (mount);
-
- res = FALSE;
-
- mount_list_lock ();
-
- for (l = mount_list; l != NULL; l = l->next)
- {
- MountRecord *this_mount_record = l->data;
-
- if (g_file_equal (root, this_mount_record->root))
- {
- res = TRUE;
- break;
- }
- }
-
- mount_list_unlock ();
-
- g_object_unref (root);
-
- return res;
-}
-
-static GFile *
-mount_record_find_root_by_mount_name (const gchar *mount_name)
-{
- GList *l;
- GFile *root;
-
- g_assert (mount_name != NULL);
-
- root = NULL;
-
- mount_list_lock ();
-
- for (l = mount_list; l != NULL; l = l->next)
- {
- MountRecord *mount_record = l->data;
-
- if (strcmp (mount_name, mount_record->name) == 0)
- {
- root = g_object_ref (mount_record->root);
- break;
- }
- }
-
- mount_list_unlock ();
-
- return root;
-}
-
-static void
-mount_list_update (void)
-{
- GList *mounts;
- GList *l;
-
- mounts = g_volume_monitor_get_mounts (volume_monitor);
-
- for (l = mounts; l != NULL; l = l->next)
- {
- GMount *mount = l->data;
-
- if (!mount_record_for_mount_exists (mount))
- {
- mount_list_lock ();
- mount_list = g_list_prepend (mount_list, mount_record_new (mount));
- mount_list_unlock ();
- }
-
- g_object_unref (mount);
- }
-
- g_list_free (mounts);
-}
-
-#if 0
-
-static gint
-file_info_get_attribute_as_int (GFileInfo *file_info, const gchar *attribute)
-{
- GFileAttributeType attribute_type;
- gint int_result;
-
- attribute_type = g_file_info_get_attribute_type (file_info, attribute);
-
- switch (attribute_type)
- {
- case G_FILE_ATTRIBUTE_TYPE_UINT32:
- int_result = g_file_info_get_attribute_uint32 (file_info, attribute);
- break;
-
- case G_FILE_ATTRIBUTE_TYPE_INT32:
- int_result = g_file_info_get_attribute_int32 (file_info, attribute);
- break;
-
- case G_FILE_ATTRIBUTE_TYPE_UINT64:
- int_result = g_file_info_get_attribute_uint64 (file_info, attribute);
- break;
-
- case G_FILE_ATTRIBUTE_TYPE_INT64:
- int_result = g_file_info_get_attribute_int64 (file_info, attribute);
- break;
-
- default:
- int_result = 0;
- g_assert_not_reached ();
- break;
- }
-
- return int_result;
-}
-
-#endif
-
-static guint
-file_info_get_attribute_as_uint (GFileInfo *file_info, const gchar *attribute)
-{
- GFileAttributeType attribute_type;
- guint uint_result;
-
- attribute_type = g_file_info_get_attribute_type (file_info, attribute);
-
- switch (attribute_type)
- {
- case G_FILE_ATTRIBUTE_TYPE_UINT32:
- uint_result = g_file_info_get_attribute_uint32 (file_info, attribute);
- break;
-
- case G_FILE_ATTRIBUTE_TYPE_INT32:
- uint_result = g_file_info_get_attribute_int32 (file_info, attribute);
- break;
-
- case G_FILE_ATTRIBUTE_TYPE_UINT64:
- uint_result = g_file_info_get_attribute_uint64 (file_info, attribute);
- break;
-
- case G_FILE_ATTRIBUTE_TYPE_INT64:
- uint_result = g_file_info_get_attribute_int64 (file_info, attribute);
- break;
-
- default:
- uint_result = 0;
- g_assert_not_reached ();
- break;
- }
-
- return uint_result;
-}
-
-static gboolean
-path_is_mount_list (const gchar *path)
-{
- while (*path == '/')
- path++;
-
- return *path == 0;
-}
-
-
-static GFile *
-file_from_full_path (const gchar *path)
-{
- gchar *mount_name;
- GFile *file = NULL;
- const gchar *s1, *s2;
- GFile *root;
-
- file = NULL;
-
- s1 = path;
- while (*s1 == '/')
- s1++;
-
- if (*s1)
- {
- s2 = strchr (s1, '/');
- if (s2 == NULL)
- s2 = s1 + strlen (s1);
-
- mount_name = g_strndup (s1, s2 - s1);
- root = mount_record_find_root_by_mount_name (mount_name);
- g_free (mount_name);
-
- if (root)
- {
- while (*s2 == '/')
- s2++;
- file = g_file_resolve_relative_path (root, s2);
- g_object_unref (root);
- }
- }
-
- return file;
-}
-
-/* ------------- *
- * VFS functions *
- * ------------- */
-
-#if 0
-
-/* A stat -f <path> on a FUSE mount always results in this function being called with a path
- * of '/'. This means we can't return valid info for the various mounts. Hopefully we can
- * fix this in the future. */
-
-static gint
-vfs_statfs (const gchar *path, struct statvfs *stbuf)
-{
- GFile *file;
- GError *error = NULL;
- gint result = 0;
-
- debug_print ("vfs_statfs: %s\n", path);
-
- if ((file = file_from_full_path (path)))
- {
- GFileInfo *file_info;
-
- file_info = g_file_get_filesystem_info (file, "*", NULL, &error);
-
- if (file_info)
- {
- memset (stbuf, 0, sizeof (*stbuf));
-
- stbuf->f_bsize = 4096;
- stbuf->f_frsize = 4096; /* Ignored by FUSE */
- stbuf->f_blocks = 0;
- stbuf->f_bfree = 0;
- stbuf->f_bavail = 0;
- stbuf->f_files = 0;
- stbuf->f_ffree = 0;
- stbuf->f_favail = 0; /* Ignored by FUSE */
- stbuf->f_fsid = 1; /* Ignored by FUSE */
- stbuf->f_flag = 0; /* Ignored by FUSE */
- stbuf->f_namemax = 1024;
-
- if (g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE))
- stbuf->f_blocks = g_file_info_get_attribute_uint64 (file_info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE) / 4096;
- if (g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE))
- stbuf->f_bfree = stbuf->f_bavail = g_file_info_get_attribute_uint64 (file_info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE) / 4096;
- }
- else if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- else
- {
- result = -EIO;
- }
-
- g_object_unref (file);
- }
-
- debug_print ("vfs_statfs: -> %s\n", strerror (-result));
-
- return result;
-}
-
-#endif
-
-static gint
-vfs_statfs (const gchar *path, struct statvfs *stbuf)
-{
- gint result = 0;
-
- debug_print ("vfs_statfs: %s\n", path);
-
- memset (stbuf, 0, sizeof (*stbuf));
-
- stbuf->f_bsize = 4096;
- stbuf->f_frsize = 4096; /* Ignored by FUSE */
- stbuf->f_blocks = 0;
- stbuf->f_bfree = 0;
- stbuf->f_bavail = 0;
- stbuf->f_files = 0;
- stbuf->f_ffree = 0;
- stbuf->f_favail = 0; /* Ignored by FUSE */
- stbuf->f_fsid = 1; /* Ignored by FUSE */
- stbuf->f_flag = 0; /* Ignored by FUSE */
- stbuf->f_namemax = 1024;
-
- debug_print ("vfs_statfs: -> %s\n", strerror (-result));
-
- return result;
-}
-
-static mode_t
-file_info_get_stat_mode (GFileInfo *file_info)
-{
- GFileType file_type;
- mode_t unix_mode;
-
- file_type = g_file_info_get_file_type (file_info);
-
- switch (file_type)
- {
- case G_FILE_TYPE_REGULAR:
- unix_mode = S_IFREG;
- break;
-
- case G_FILE_TYPE_DIRECTORY:
- case G_FILE_TYPE_MOUNTABLE:
- unix_mode = S_IFDIR;
- break;
-
- case G_FILE_TYPE_SYMBOLIC_LINK:
- case G_FILE_TYPE_SHORTCUT:
- unix_mode = S_IFLNK;
- break;
-
- case G_FILE_TYPE_SPECIAL:
- default:
- unix_mode = 0;
- break;
- }
-
- if (file_type == G_FILE_TYPE_DIRECTORY ||
- !g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ) ||
- g_file_info_get_attribute_boolean (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ))
- unix_mode |= S_IRUSR;
- if (!g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE) ||
- g_file_info_get_attribute_boolean (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE))
- unix_mode |= S_IWUSR;
- if (file_type == G_FILE_TYPE_DIRECTORY ||
- !g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE) ||
- g_file_info_get_attribute_boolean (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE))
- unix_mode |= S_IXUSR;
-
- return unix_mode;
-}
-
-static gint
-getattr_for_file (GFile *file, struct stat *sbuf)
-{
- GFileInfo *file_info;
- GError *error = NULL;
- gint result = 0;
-
- file_info = g_file_query_info (file, "*", 0, NULL, &error);
-
- if (file_info)
- {
- GTimeVal mod_time;
-
- sbuf->st_mode = file_info_get_stat_mode (file_info);
- sbuf->st_size = g_file_info_get_size (file_info);
- sbuf->st_uid = daemon_uid;
- sbuf->st_gid = daemon_gid;
-
- g_file_info_get_modification_time (file_info, &mod_time);
- sbuf->st_mtime = mod_time.tv_sec;
- sbuf->st_ctime = mod_time.tv_sec;
- sbuf->st_atime = mod_time.tv_sec;
-
- if (g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_TIME_CHANGED))
- sbuf->st_ctime = file_info_get_attribute_as_uint (file_info, G_FILE_ATTRIBUTE_TIME_CHANGED);
- if (g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_TIME_ACCESS))
- sbuf->st_atime = file_info_get_attribute_as_uint (file_info, G_FILE_ATTRIBUTE_TIME_ACCESS);
-
- /* Setting st_nlink to 1 for directories makes 'find' work */
- sbuf->st_nlink = 1;
-
- g_object_unref (file_info);
- }
- else
- {
- if (error)
- {
- debug_print ("Error from GVFS: %s\n", error->message);
- result = -errno_from_error (error);
- g_error_free (error);
- }
- else
- {
- debug_print ("No file info, but no error from GVFS.\n");
- result = -EIO;
- }
- }
-
- return result;
-}
-
-static gint
-vfs_getattr (const gchar *path, struct stat *sbuf)
-{
- GFile *file;
- gint result = 0;
- FileHandle *fh;
-
- debug_print ("vfs_getattr: %s\n", path);
-
- fh = get_file_handle_for_path (path);
- if (fh)
- g_mutex_lock (fh->mutex);
-
- memset (sbuf, 0, sizeof (*sbuf));
-
- sbuf->st_dev = 0; /* dev_t ID of device containing file */
- sbuf->st_ino = 0; /* ino_t inode number */
- sbuf->st_uid = 0; /* uid_t user ID of owner */
- sbuf->st_gid = 0; /* gid_t group ID of owner */
- sbuf->st_rdev = 0; /* dev_t device ID (if special file) */
- sbuf->st_size = 0; /* off_t total size, in bytes */
- sbuf->st_blocks = 0; /* blkcnt_t number of blocks allocated */
- sbuf->st_atime = 0; /* time_t time of last access */
- sbuf->st_mtime = 0; /* time_t time of last modification */
- sbuf->st_ctime = 0; /* time_t time of last status change */
- sbuf->st_blksize = 4096; /* blksize_t blocksize for filesystem I/O */
-
- if (path_is_mount_list (path))
- {
- /* Mount list */
-
- sbuf->st_mode = S_IFDIR | 0500; /* mode_t protection */
- sbuf->st_nlink = 2 + g_list_length (mount_list); /* nlink_t number of hard links */
- sbuf->st_atime = daemon_creation_time;
- sbuf->st_mtime = daemon_creation_time;
- sbuf->st_ctime = daemon_creation_time;
- sbuf->st_uid = daemon_uid;
- sbuf->st_gid = daemon_gid;
- }
- else if ((file = file_from_full_path (path)))
- {
- /* Submount */
-
- result = getattr_for_file (file, sbuf);
- g_object_unref (file);
- }
- else
- {
- result = -ENOENT;
- }
-
- if (fh)
- {
- g_mutex_unlock (fh->mutex);
- file_handle_unref (fh);
- }
-
- debug_print ("vfs_getattr: -> %s\n", strerror (-result));
-
- return result;
-}
-
-static gint
-vfs_readlink (const gchar *path, gchar *target, size_t size)
-{
- debug_print ("vfs_readlink: %s\n", path);
-
- return 0;
-}
-
-static gint
-setup_input_stream (GFile *file, FileHandle *fh)
-{
- GError *error = NULL;
- gint result = 0;
-
- if (fh->stream)
- {
- debug_print ("setup_input_stream: have stream\n");
-
- if (fh->op == FILE_OP_READ)
- {
- debug_print ("setup_input_stream: doing read\n");
- }
- else
- {
- debug_print ("setup_input_stream: doing write\n");
-
- g_output_stream_close (fh->stream, NULL, NULL);
- g_object_unref (fh->stream);
- fh->stream = NULL;
- }
- }
-
- if (!fh->stream)
- {
- debug_print ("setup_input_stream: no stream\n");
- fh->stream = g_file_read (file, NULL, &error);
- fh->pos = 0;
- }
-
- if (fh->stream)
- fh->op = FILE_OP_READ;
- else
- fh->op = FILE_OP_NONE;
-
- if (error)
- {
- debug_print ("setup_input_stream: error\n");
- result = -errno_from_error (error);
- g_error_free (error);
- }
-
- return result;
-}
-
-static gint
-setup_output_stream (GFile *file, FileHandle *fh)
-{
- GError *error = NULL;
- gint result = 0;
-
- if (fh->stream)
- {
- if (fh->op == FILE_OP_WRITE)
- {
- }
- else
- {
- g_input_stream_close (fh->stream, NULL, NULL);
- g_object_unref (fh->stream);
- fh->stream = NULL;
- }
- }
-
- if (!fh->stream)
- {
- fh->stream = g_file_append_to (file, 0, NULL, &error);
- if (fh->stream)
- fh->pos = g_seekable_tell (G_SEEKABLE (fh->stream));
- }
-
- if (fh->stream)
- fh->op = FILE_OP_WRITE;
- else
- fh->op = FILE_OP_NONE;
-
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
-
- return result;
-}
-
-static gint
-vfs_open (const gchar *path, struct fuse_file_info *fi)
-{
- GFile *file;
- gint result = 0;
-
- debug_print ("vfs_open: %s\n", path);
-
- if (path_is_mount_list (path))
- result = -EISDIR;
- else if ((file = file_from_full_path (path)))
- {
- GFileInfo *file_info;
- GError *error = NULL;
-
- file_info = g_file_query_info (file, "*", 0, NULL, &error);
-
- if (file_info)
- {
- GFileType file_type = g_file_info_get_file_type (file_info);
-
- if (file_type == G_FILE_TYPE_REGULAR)
- {
- FileHandle *fh = get_or_create_file_handle_for_path (path);
-
- /* File exists */
-
- SET_FILE_HANDLE (fi, fh);
-
- debug_print ("vfs_open: flags=%o\n", fi->flags);
-
- /* Set up a stream here, so we can check for errors */
-
- g_mutex_lock (fh->mutex);
-
- if (fi->flags & O_WRONLY || fi->flags & O_RDWR)
- result = setup_output_stream (file, fh);
- else
- result = setup_input_stream (file, fh);
-
- g_mutex_unlock (fh->mutex);
-
- /* The added reference to the file handle is released in vfs_release() */
- }
- else if (file_type == G_FILE_TYPE_DIRECTORY)
- {
- /* EISDIR is supposedly only for attempts to write to directory handles,
- * but outside readdir(), we don't support reading them either. */
- result = -EISDIR;
- }
- else
- {
- result = -EACCES;
- }
-
- g_object_unref (file_info);
- }
- else
- {
- if (error)
- {
- debug_print ("Error from GVFS: %s\n", error->message);
- result = -errno_from_error (error);
- g_error_free (error);
- }
- else
- {
- debug_print ("No file info, but no error from GVFS.\n");
- result = -EIO;
- }
- }
-
- g_object_unref (file);
- }
- else
- {
- result = -ENOENT;
- }
-
- debug_print ("vfs_open: -> %s\n", strerror (-result));
-
- return result;
-}
-
-static gint
-vfs_create (const gchar *path, mode_t mode, struct fuse_file_info *fi)
-{
- GFile *file;
- gint result = 0;
-
- debug_print ("vfs_create: %s\n", path);
-
- if (path_is_mount_list (path))
- result = -EEXIST;
- if ((file = file_from_full_path (path)))
- {
- GFileInfo *file_info;
- GError *error = NULL;
-
- file_info = g_file_query_info (file, "*", 0, NULL, &error);
-
- if (file_info)
- {
- result = -EEXIST;
- g_object_unref (file_info);
- }
- else
- {
- GFileOutputStream *file_output_stream;
-
- if (error)
- {
- g_error_free (error);
- error = NULL;
- }
-
- file_output_stream = g_file_create (file, 0, NULL, &error);
- if (file_output_stream)
- {
- FileHandle *fh = get_or_create_file_handle_for_path (path);
-
- /* Success */
-
- SET_FILE_HANDLE (fi, fh);
-
- g_mutex_lock (fh->mutex);
-
- file_handle_close_stream (fh);
- fh->stream = file_output_stream;
- fh->op = FILE_OP_WRITE;
-
- g_mutex_unlock (fh->mutex);
-
- /* The added reference to the file handle is released in vfs_release() */
- }
- else
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- }
-
- g_object_unref (file);
- }
- else
- {
- result = -ENOENT;
- }
-
- debug_print ("vfs_create: -> %s\n", strerror (-result));
-
- return result;
-}
-
-static gint
-vfs_release (const gchar *path, struct fuse_file_info *fi)
-{
- FileHandle *fh = GET_FILE_HANDLE (fi);
-
- debug_print ("vfs_release: %s\n", path);
-
- if (fh)
- file_handle_unref (fh);
-
- return 0;
-}
-
-static gint
-read_stream (FileHandle *fh, gchar *output_buf, size_t output_buf_size, off_t offset)
-{
- GInputStream *input_stream;
- gint n_bytes_skipped = 0;
- gint n_bytes_read = 0;
- gint result = 0;
- GError *error = NULL;
-
- input_stream = fh->stream;
-
- if (offset != fh->pos)
- {
- if (g_seekable_can_seek (G_SEEKABLE (input_stream)))
- {
- /* Can seek */
-
- debug_print ("read_stream: seeking to offset %d.\n", offset);
-
- if (g_seekable_seek (G_SEEKABLE (input_stream), offset, G_SEEK_SET, NULL, &error))
- {
- fh->pos = offset;
- }
- else
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- }
- else if (offset > fh->pos)
- {
- /* Can skip ahead */
-
- debug_print ("read_stream: skipping to offset %d.\n", offset);
-
- n_bytes_skipped = g_input_stream_skip (input_stream, offset - fh->pos, NULL, &error);
-
- if (n_bytes_skipped > 0)
- fh->pos += n_bytes_skipped;
-
- if (n_bytes_skipped != offset - fh->pos)
- {
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- else
- {
- result = -EIO;
- }
- }
- }
- else
- {
- /* Can't seek, can't skip backwards */
-
- debug_print ("read_stream: can't seek nor skip to offset %d!\n", offset);
-
- result = -ENOTSUP;
- }
- }
-
- if (result == 0)
- {
- while (n_bytes_read < output_buf_size)
- {
- gboolean part_result;
- gsize part_bytes_read = 0;
-
- part_result = g_input_stream_read_all (input_stream,
- output_buf + n_bytes_read,
- output_buf_size - n_bytes_read,
- &part_bytes_read,
- NULL,
- &error);
-
- n_bytes_read += part_bytes_read;
- fh->pos += part_bytes_read;
-
- if (!part_result || part_bytes_read == 0)
- break;
- }
-
- result = n_bytes_read;
-
- if (n_bytes_read < output_buf_size)
- {
- debug_print ("read_stream: wanted %d bytes, but got %d.\n", output_buf_size, n_bytes_read);
-
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- }
- }
-
- return result;
-}
-
-static gint
-vfs_read (const gchar *path, gchar *buf, size_t size,
- off_t offset, struct fuse_file_info *fi)
-{
- GFile *file;
- gint result = 0;
-
- debug_print ("vfs_read: %s\n", path);
-
- if ((file = file_from_full_path (path)))
- {
- FileHandle *fh = GET_FILE_HANDLE (fi);
-
- g_mutex_lock (fh->mutex);
-
- result = setup_input_stream (file, fh);
-
- if (result == 0)
- {
- result = read_stream (fh, buf, size, offset);
- }
- else
- {
- debug_print ("vfs_read: failed to setup input_stream!\n");
- }
-
- g_object_unref (file);
- g_mutex_unlock (fh->mutex);
- }
- else
- {
- result = -EIO;
- }
-
- if (result < 0)
- debug_print ("vfs_read: -> %s\n", strerror (-result));
- else
- debug_print ("vfs_read: -> %d bytes read.\n", result);
-
- return result;
-}
-
-static gint
-write_stream (FileHandle *fh, const gchar *input_buf, size_t input_buf_size, off_t offset)
-{
- GOutputStream *output_stream;
- gint n_bytes_written = 0;
- gint result = 0;
- GError *error = NULL;
-
- debug_print ("write_stream: %d bytes at offset %d.\n", input_buf_size, offset);
-
- output_stream = fh->stream;
-
- if (offset != fh->pos)
- {
- if (g_seekable_can_seek (G_SEEKABLE (output_stream)))
- {
- /* Can seek */
-
- if (g_seekable_seek (G_SEEKABLE (output_stream), offset, G_SEEK_SET, NULL, &error))
- {
- fh->pos = offset;
- }
- else
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- }
- else
- {
- /* Can't seek, and output streams can't skip */
-
- result = -ENOTSUP;
- }
- }
-
- if (result == 0)
- {
- while (n_bytes_written < input_buf_size)
- {
- gboolean part_result;
- gsize part_bytes_written = 0;
-
- part_result = g_output_stream_write_all (output_stream,
- (void *) (input_buf + n_bytes_written),
- input_buf_size - n_bytes_written,
- &part_bytes_written,
- NULL,
- &error);
-
- n_bytes_written += part_bytes_written;
- fh->pos += part_bytes_written;
-
- if (!part_result)
- break;
- }
-
- result = n_bytes_written;
-
- if (n_bytes_written < input_buf_size)
- {
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- }
- else if (!g_output_stream_flush (output_stream, NULL, &error))
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- }
-
- return result;
-}
-
-static gint
-vfs_write (const gchar *path, const gchar *buf, size_t len, off_t offset,
- struct fuse_file_info *fi)
-{
- GFile *file;
- gint result = 0;
-
- debug_print ("vfs_write: %s\n", path);
-
- if ((file = file_from_full_path (path)))
- {
- FileHandle *fh = GET_FILE_HANDLE (fi);
-
- g_mutex_lock (fh->mutex);
-
- result = setup_output_stream (file, fh);
- if (result == 0)
- {
- result = write_stream (fh, buf, len, offset);
- }
-
- g_object_unref (file);
- g_mutex_unlock (fh->mutex);
- }
- else
- {
- result = -EIO;
- }
-
- if (result < 0)
- debug_print ("vfs_write: -> %s\n", strerror (-result));
- else
- debug_print ("vfs_write: -> %d bytes written.\n", result);
-
- return result;
-}
-
-static gint
-vfs_flush (const gchar *path, struct fuse_file_info *fi)
-{
- debug_print ("vfs_flush: %s\n", path);
-
- return 0;
-}
-
-static gint
-vfs_opendir (const gchar *path, struct fuse_file_info *fi)
-{
- GFile *file;
- gint result = 0;
-
- debug_print ("vfs_opendir: %s\n", path);
-
- if (path_is_mount_list (path))
- {
- /* Mount list */
- }
- else if ((file = file_from_full_path (path)) != NULL)
- {
- /* Submount */
-
- /* TODO: Check that path exists */
-
- g_object_unref (file);
- }
- else
- {
- /* Not found */
-
- result = -ENOENT;
- }
-
- return result;
-}
-
-static gint
-readdir_for_file (GFile *base_file, gpointer buf, fuse_fill_dir_t filler)
-{
- GFileEnumerator *enumerator;
- GFileInfo *file_info;
- GError *error = NULL;
-
- g_assert (base_file != NULL);
-
- enumerator = g_file_enumerate_children (base_file, G_FILE_ATTRIBUTE_STANDARD_NAME, 0, NULL, &error);
- if (!enumerator)
- {
- gint result;
-
- if (error)
- {
- debug_print ("Error from GVFS: %s\n", error->message);
- result = -errno_from_error (error);
- g_error_free (error);
- }
- else
- {
- debug_print ("No file info, but no error from GVFS.\n");
- result = -EIO;
- }
-
- return result;
- }
-
- filler (buf, ".", NULL, 0);
- filler (buf, "..", NULL, 0);
-
- while ((file_info = g_file_enumerator_next_file (enumerator, NULL, &error)) != NULL)
- {
- filler (buf, g_file_info_get_name (file_info), NULL, 0);
- g_object_unref (file_info);
- }
-
- g_object_unref (enumerator);
-
- return 0;
-}
-
-static gint
-vfs_readdir (const gchar *path, gpointer buf, fuse_fill_dir_t filler, off_t offset,
- struct fuse_file_info *fi)
-{
- GFile *base_file;
- gint result = 0;
-
- debug_print ("vfs_readdir: %s\n", path);
-
- if (path_is_mount_list (path))
- {
- GList *l;
-
- /* Mount list */
-
- filler (buf, ".", NULL, 0);
- filler (buf, "..", NULL, 0);
-
- mount_list_lock ();
-
- for (l = mount_list; l; l = g_list_next (l))
- {
- MountRecord *mount_record = l->data;
-
- filler (buf, mount_record->name, NULL, 0);
- }
-
- mount_list_unlock ();
- }
- else if ((base_file = file_from_full_path (path)))
- {
- /* Submount */
-
- result = readdir_for_file (base_file, buf, filler);
-
- g_object_unref (base_file);
- }
- else
- {
- /* Not found */
-
- result = -ENOENT;
- }
-
- return result;
-}
-
-static gint
-vfs_rename (const gchar *old_path, const gchar *new_path)
-{
- GFile *old_file;
- GFile *new_file;
- GError *error = NULL;
- gint result = 0;
-
- debug_print ("vfs_rename: %s -> %s\n", old_path, new_path);
-
- old_file = file_from_full_path (old_path);
- new_file = file_from_full_path (new_path);
-
- if (old_file && new_file)
- {
- FileHandle *fh;
-
- fh = get_file_handle_for_path (old_path);
-
- if (fh)
- {
- g_mutex_lock (fh->mutex);
- file_handle_close_stream (fh);
- }
-
- g_file_move (old_file, new_file, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, &error);
-
- if (error)
- {
- debug_print ("vfs_rename failed: %s\n", error->message);
-
- result = -errno_from_error (error);
- g_error_free (error);
- }
- else
- {
- reindex_file_handle_for_path (old_path, new_path);
- }
-
- if (fh)
- {
- g_mutex_unlock (fh->mutex);
- file_handle_unref (fh);
- }
-
- if (result == -EISDIR)
- {
- /* This makes e.g. 'mv' fall back to a recursive copy + delete operation */
- result = -EXDEV;
- }
- }
- else
- {
- result = -ENOENT;
- }
-
- if (old_file)
- g_object_unref (old_file);
- if (new_file)
- g_object_unref (new_file);
-
- debug_print ("vfs_rename: -> %s\n", strerror (-result));
-
- return result;
-}
-
-static gint
-vfs_unlink (const gchar *path)
-{
- GFile *file;
- GError *error = NULL;
- gint result = 0;
-
- debug_print ("vfs_unlink: %s\n", path);
-
- file = file_from_full_path (path);
-
- if (file)
- {
- FileHandle *fh;
-
- fh = get_file_handle_for_path (path);
-
- if (fh)
- {
- g_mutex_lock (fh->mutex);
- file_handle_close_stream (fh);
- }
-
- g_file_delete (file, NULL, &error);
-
- if (fh)
- {
- g_mutex_unlock (fh->mutex);
- file_handle_unref (fh);
- }
-
- if (error)
- {
- debug_print ("vfs_unlink failed: %s (%s)\n", path, error->message);
-
- result = -errno_from_error (error);
- g_error_free (error);
- }
-
- g_object_unref (file);
- }
- else
- {
- result = -ENOENT;
- }
-
- debug_print ("vfs_unlink: -> %s\n", strerror (-result));
-
- return result;
-}
-
-static gint
-vfs_mkdir (const gchar *path, mode_t mode)
-{
- GFile *file;
- GError *error = NULL;
- gint result = 0;
-
- debug_print ("vfs_mkdir: %s\n", path);
-
- file = file_from_full_path (path);
-
- if (file)
- {
- if (g_file_make_directory (file, NULL, &error))
- {
- /* Ignore errors setting the mode. We already created the directory, and that's
- * good enough. */
- g_file_set_attribute_uint32 (file, G_FILE_ATTRIBUTE_UNIX_MODE, mode, 0, NULL, NULL);
- }
-
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
-
- g_object_unref (file);
- }
- else
- {
- result = -ENOENT;
- }
-
- debug_print ("vfs_mkdir: -> %s\n", strerror (-result));
-
- return result;
-}
-
-static gint
-vfs_rmdir (const gchar *path)
-{
- GFile *file;
- GError *error = NULL;
- gint result = 0;
-
- debug_print ("vfs_rmdir: %s\n", path);
-
- file = file_from_full_path (path);
-
- if (file)
- {
- GFileInfo *file_info;
-
- file_info = g_file_query_info (file, "*", 0, NULL, &error);
- if (file_info)
- {
- if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY)
- {
- g_file_delete (file, NULL, &error);
-
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- }
- else
- {
- result = -ENOTDIR;
- }
- }
- else
- {
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- else
- {
- result = -ENOENT;
- }
- }
- }
- else
- {
- result = -ENOENT;
- }
-
- debug_print ("vfs_rmdir: -> %s\n", strerror (-result));
-
- return result;
-}
-
-static gint
-vfs_ftruncate (const gchar *path, off_t size, struct fuse_file_info *fi)
-{
- GFile *file;
- GError *error = NULL;
- gint result = 0;
-
- debug_print ("vfs_ftruncate: %s\n", path);
-
- file = file_from_full_path (path);
-
- if (file)
- {
- FileHandle *fh = GET_FILE_HANDLE (fi);
-
- g_mutex_lock (fh->mutex);
-
- result = setup_output_stream (file, fh);
-
- if (result == 0)
- {
- if (g_seekable_can_truncate (G_SEEKABLE (fh->stream)))
- {
- g_seekable_truncate (fh->stream, size, NULL, &error);
- }
- else if (size == 0)
- {
- g_output_stream_close (fh->stream, NULL, NULL);
- g_object_unref (fh->stream);
- fh->stream = NULL;
-
- fh->stream = g_file_replace (file, 0, FALSE, 0, NULL, &error);
- }
- else
- {
- result = -ENOTSUP;
- }
-
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- }
-
- g_object_unref (file);
- g_mutex_unlock (fh->mutex);
- }
- else
- {
- result = -ENOENT;
- }
-
- debug_print ("vfs_ftruncate: -> %s\n", strerror (-result));
-
- return result;
-}
-
-static gint
-vfs_truncate (const gchar *path, off_t size)
-{
- GFile *file;
- GError *error = NULL;
- gint result = 0;
-
- debug_print ("vfs_truncate: %s\n", path);
-
- file = file_from_full_path (path);
-
- if (file)
- {
- GFileOutputStream *file_output_stream = NULL;
- FileHandle *fh;
-
- fh = get_file_handle_for_path (path);
- if (fh)
- g_mutex_lock (fh->mutex);
-
- if (size == 0)
- {
- file_output_stream = g_file_replace (file, 0, FALSE, 0, NULL, &error);
- }
- else
- {
- file_output_stream = g_file_append_to (file, 0, NULL, &error);
- if (file_output_stream)
- g_seekable_truncate (G_SEEKABLE (file_output_stream), size, NULL, &error);
- }
-
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
-
- if (file_output_stream)
- {
- g_output_stream_close (G_OUTPUT_STREAM (file_output_stream), NULL, NULL);
- g_object_unref (file_output_stream);
- }
-
- if (fh)
- {
- g_mutex_unlock (fh->mutex);
- file_handle_unref (fh);
- }
-
- g_object_unref (file);
- }
- else
- {
- result = -ENOENT;
- }
-
- debug_print ("vfs_truncate: -> %s\n", strerror (-result));
-
- return result;
-}
-
-static gint
-vfs_symlink (const gchar *path_old, const gchar *path_new)
-{
- GFile *file;
- GError *error = NULL;
- gint result = 0;
-
- debug_print ("vfs_symlink: %s -> %s\n", path_new, path_old);
-
- file = file_from_full_path (path_new);
-
- if (file)
- {
- g_file_make_symbolic_link (file, path_old, NULL, &error);
-
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- }
- else
- {
- result = -ENOENT;
- }
-
- debug_print ("vfs_symlink: -> %s\n", strerror (-result));
-
- return result;
-}
-
-static gint
-vfs_access (const gchar *path, gint mode)
-{
- GFile *file;
- GError *error = NULL;
- gint result = 0;
-
- debug_print ("vfs_access: %s\n", path);
-
- file = file_from_full_path (path);
-
- if (file)
- {
- GFileInfo *file_info;
-
- file_info = g_file_query_info (file, "*", 0, NULL, &error);
- if (file_info)
- {
- if ((mode & R_OK && (g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ) &&
- !g_file_info_get_attribute_boolean (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ))) ||
- (mode & W_OK && (g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE) &&
- !g_file_info_get_attribute_boolean (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE))) ||
- (mode & X_OK && (g_file_info_has_attribute (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE) &&
- !g_file_info_get_attribute_boolean (file_info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE))))
- result = -EACCES;
-
- g_object_unref (file_info);
- }
- else if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
- else
- {
- result = -EIO;
- }
-
- g_object_unref (file);
- }
- else if (path_is_mount_list (path))
- {
- result = 0;
- }
- else
- {
- result = -ENOENT;
- }
-
- debug_print ("vfs_access: -> %s\n", strerror (-result));
- return result;
-}
-
-static gint
-vfs_utimens (const gchar *path, const struct timespec tv [2])
-{
- GFile *file;
- GError *error = NULL;
- gint result = 0;
-
- debug_print ("vfs_utimens: %s\n", path);
-
- file = file_from_full_path (path);
-
- if (file)
- {
- guint64 atime;
- guint64 mtime;
-
- if (tv)
- {
- atime = (guint64) tv [0].tv_sec * 1000000 + (guint64) tv [0].tv_nsec / (guint64) 1000;
- mtime = (guint64) tv [1].tv_sec * 1000000 + (guint64) tv [1].tv_nsec / (guint64) 1000;
- }
- else
- {
- struct timeval tiv;
-
- gettimeofday (&tiv, NULL);
- atime = (guint64) tiv.tv_sec * (guint64) 1000000 + (guint64) tiv.tv_usec;
- mtime = atime;
- }
-
- g_file_set_attribute (file, G_FILE_ATTRIBUTE_TIME_ACCESS_USEC,
- G_FILE_ATTRIBUTE_TYPE_UINT64, &atime,
- 0, NULL, &error);
-
- if (!error)
- {
- g_file_set_attribute (file, G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC,
- G_FILE_ATTRIBUTE_TYPE_UINT64, &mtime,
- 0, NULL, &error);
- }
-
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
-
- g_object_unref (file);
- }
- else if (path_is_mount_list (path))
- {
- /* */
- }
- else
- {
- result = -ENOENT;
- }
-
- debug_print ("vfs_utimens: -> %s\n", strerror (-result));
- return result;
-}
-
-static gint
-vfs_chmod (const gchar *path, mode_t mode)
-{
- GFile *file;
- GError *error = NULL;
- gint result = 0;
-
- file = file_from_full_path (path);
-
- if (file)
- {
- g_file_set_attribute_uint32 (file, G_FILE_ATTRIBUTE_UNIX_MODE, mode, 0, NULL, &error);
-
- if (error)
- {
- result = -errno_from_error (error);
- g_error_free (error);
- }
-
- g_object_unref (file);
- }
-
- return result;
-}
-
-static void
-mount_tracker_mounted_cb (GVolumeMonitor *volume_monitor,
- GMount *mount)
-{
- MountRecord *mount_record;
-
- if (mount_record_for_mount_exists (mount))
- return;
-
- mount_record = mount_record_new (mount);
-
- mount_list_lock ();
- mount_list = g_list_prepend (mount_list, mount_record);
- mount_list_unlock ();
-}
-
-static void
-mount_tracker_unmounted_cb (GVolumeMonitor *volume_monitor,
- GMount *mount)
-{
- GFile *root;
- GList *l;
-
- root = g_mount_get_root (mount);
-
- mount_list_lock ();
-
- root = g_mount_get_root (mount);
-
- for (l = mount_list; l != NULL; l = l->next)
- {
- MountRecord *mount_record = l->data;
-
- if (g_file_equal (root, mount_record->root))
- {
- mount_list = g_list_delete_link (mount_list, l);
- mount_record_free (mount_record);
- break;
- }
- }
-
- mount_list_unlock ();
-
- g_object_unref (root);
-}
-
-static gpointer
-subthread_main (gpointer data)
-{
-
- mount_list_update ();
-
- g_signal_connect (volume_monitor, "mount_added", (GCallback) mount_tracker_mounted_cb, NULL);
- g_signal_connect (volume_monitor, "mount_removed", (GCallback) mount_tracker_unmounted_cb, NULL);
-
- g_main_loop_run (subthread_main_loop);
-
- g_signal_handlers_disconnect_by_func (volume_monitor, mount_tracker_mounted_cb, NULL);
- g_signal_handlers_disconnect_by_func (volume_monitor, mount_tracker_unmounted_cb, NULL);
-
- g_main_loop_unref (subthread_main_loop);
- subthread_main_loop = NULL;
-
- g_object_unref (volume_monitor);
- volume_monitor = NULL;
-
- /* Tell the main thread to unmount. Using kill() is necessary according to FUSE maintainers. */
- kill (getpid (), SIGHUP);
-
- return NULL;
-}
-
-static DBusHandlerResult
-dbus_filter_func (DBusConnection *connection,
- DBusMessage *message,
- void *data)
-{
- if (dbus_message_is_signal (message,
- DBUS_INTERFACE_DBUS,
- "NameOwnerChanged"))
- {
- const char *service, *old_owner, *new_owner;
-
- dbus_message_get_args (message,
- NULL,
- DBUS_TYPE_STRING, &service,
- DBUS_TYPE_STRING, &old_owner,
- DBUS_TYPE_STRING, &new_owner,
- DBUS_TYPE_INVALID);
-
- /* Handle monitor owner going away */
- if (service != NULL &&
- strcmp (G_VFS_DBUS_DAEMON_NAME, service) == 0 &&
- *new_owner == 0)
- {
- /* The daemon died, unmount */
- g_main_loop_quit (subthread_main_loop);
- }
- }
- else if (dbus_message_is_signal (message,
- DBUS_INTERFACE_LOCAL,
- "Disconnected"))
- {
- /* Session bus died, unmount */
- g_main_loop_quit (subthread_main_loop);
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-static gpointer
-vfs_init (struct fuse_conn_info *conn)
-{
- DBusConnection *dbus_conn;
- DBusMessage *message;
- DBusError error;
-
- daemon_creation_time = time (NULL);
- daemon_uid = getuid ();
- daemon_gid = getgid ();
-
- mount_list_mutex = g_mutex_new ();
- global_fh_table = g_hash_table_new_full (g_str_hash, g_str_equal,
- NULL, (GDestroyNotify) file_handle_free);
-
- dbus_error_init (&error);
-
- dbus_conn = dbus_bus_get (DBUS_BUS_SESSION, &error);
- if (dbus_conn == NULL)
- {
- g_printerr ("Failed to connect to the D-BUS daemon: %s\n",
- error.message);
- dbus_error_free (&error);
- return NULL;
- }
-
- dbus_connection_set_exit_on_disconnect (dbus_conn, FALSE);
-
- _g_dbus_connection_integrate_with_main (dbus_conn);
-
- dbus_bus_add_match (dbus_conn,
- "type='signal',sender='" DBUS_SERVICE_DBUS "',"
- "interface='" DBUS_INTERFACE_DBUS "',"
- "member='NameOwnerChanged',"
- "arg0='"G_VFS_DBUS_DAEMON_NAME"'",
- NULL);
- dbus_connection_add_filter (dbus_conn,
- dbus_filter_func,
- NULL,
- NULL);
-
- message = dbus_message_new_method_call (G_VFS_DBUS_DAEMON_NAME,
- G_VFS_DBUS_MOUNTTRACKER_PATH,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_REGISTER_FUSE);
- dbus_message_set_auto_start (message, TRUE);
- dbus_connection_send (dbus_conn, message, NULL);
- dbus_connection_flush (dbus_conn);
-
- gvfs = g_vfs_get_default ();
-
- volume_monitor = g_object_new (g_type_from_name ("GDaemonVolumeMonitor"), NULL);
-
- subthread_main_loop = g_main_loop_new (NULL, FALSE);
- subthread = g_thread_create ((GThreadFunc) subthread_main, NULL, FALSE, NULL);
-
- return NULL;
-}
-
-static void
-vfs_destroy (gpointer param)
-{
- mount_list_free ();
- if (subthread_main_loop != NULL)
- g_main_loop_quit (subthread_main_loop);
- g_mutex_free (mount_list_mutex);
- g_object_unref (gvfs);
-}
-
-static struct fuse_operations vfs_oper =
-{
- .init = vfs_init,
- .destroy = vfs_destroy,
-
- .getattr = vfs_getattr,
- .readdir = vfs_readdir,
-
- .statfs = vfs_statfs,
-
- .opendir = vfs_opendir,
- .readdir = vfs_readdir,
- .readlink = vfs_readlink,
-
- .open = vfs_open,
- .create = vfs_create,
- .release = vfs_release,
- .flush = vfs_flush,
-
- .read = vfs_read,
- .write = vfs_write,
-
- .rename = vfs_rename,
- .unlink = vfs_unlink,
- .mkdir = vfs_mkdir,
- .rmdir = vfs_rmdir,
- .ftruncate = vfs_ftruncate,
- .truncate = vfs_truncate,
- .symlink = vfs_symlink,
- .access = vfs_access,
- .utimens = vfs_utimens,
- .chmod = vfs_chmod,
-
-#if 0
- .chown = vfs_chown,
- .setxattr = vfs_setxattr,
- .getxattr = vfs_getxattr,
- .listxattr = vfs_listxattr,
- .removexattr = vfs_removexattr,
-#endif
-};
-
-gint
-main (gint argc, gchar *argv [])
-{
- g_type_init ();
- g_thread_init (NULL);
-
- return fuse_main (argc, argv, &vfs_oper, NULL /* user data */);
-}
diff --git a/client/gvfsurimapper.c b/client/gvfsurimapper.c
deleted file mode 100644
index 9c98347a..00000000
--- a/client/gvfsurimapper.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-#include <string.h>
-#include <gmodule.h>
-#include "gvfsurimapper.h"
-
-G_DEFINE_DYNAMIC_TYPE (GVfsUriMapper, g_vfs_uri_mapper, G_TYPE_OBJECT)
-
-void
-g_vfs_uri_mapper_register (GIOModule *module)
-{
- g_vfs_uri_mapper_register_type (G_TYPE_MODULE (module));
-}
-
-GVfsUriMountInfo *
-g_vfs_uri_mount_info_new (const char *type)
-{
- GVfsUriMountInfo *info;
-
- info = g_new0 (GVfsUriMountInfo, 1);
- info->keys = g_array_new (TRUE, TRUE, sizeof (GVfsUriMountInfoKey));
-
- if (type != NULL)
- g_vfs_uri_mount_info_set (info, "type", type);
-
- return info;
-}
-
-void
-g_vfs_uri_mount_info_free (GVfsUriMountInfo *info)
-{
- int i;
- GVfsUriMountInfoKey *key;
-
- for (i = 0; i < info->keys->len; i++) {
- key = &g_array_index (info->keys, GVfsUriMountInfoKey, i);
-
- g_free (key->key);
- g_free (key->value);
- }
- g_array_free (info->keys, TRUE);
- g_free (info->path);
- g_free (info);
-}
-
-static GVfsUriMountInfoKey *
-lookup_key (GVfsUriMountInfo *info,
- const char *key)
-{
- int i;
- GVfsUriMountInfoKey *keyp;
-
- for (i = 0; i < info->keys->len; i++) {
- keyp = &g_array_index (info->keys, GVfsUriMountInfoKey, i);
-
- if (strcmp (keyp->key, key) == 0)
- return keyp;
- }
-
- return NULL;
-}
-
-const char *
-g_vfs_uri_mount_info_get (GVfsUriMountInfo *info,
- const char *key)
-{
- GVfsUriMountInfoKey *keyp;
-
- keyp = lookup_key (info, key);
-
- if (keyp)
- return keyp->value;
-
- return NULL;
-}
-
-void
-g_vfs_uri_mount_info_set_with_len (GVfsUriMountInfo *info,
- const char *key,
- const char *value,
- int value_len)
-{
- GVfsUriMountInfoKey *keyp;
- GVfsUriMountInfoKey keyv;
- char *value_copy;
-
- if (value_len == -1)
- value_copy = g_strdup (value);
- else
- value_copy = g_strndup (value, value_len);
-
- keyp = lookup_key (info, key);
- if (keyp)
- {
- g_free (keyp->value);
- keyp->value = value_copy;
- }
- else
- {
- keyv.key = g_strdup (key);
- keyv.value = value_copy;
- g_array_append_val (info->keys, keyv);
- }
-}
-
-void
-g_vfs_uri_mount_info_set (GVfsUriMountInfo *info,
- const char *key,
- const char *value)
-{
- g_vfs_uri_mount_info_set_with_len (info, key, value, -1);
-}
-
-
-static void
-g_vfs_uri_mapper_class_finalize (GVfsUriMapperClass *klass)
-{
-}
-
-static void
-g_vfs_uri_mapper_class_init (GVfsUriMapperClass *klass)
-{
-}
-
-static void
-g_vfs_uri_mapper_init (GVfsUriMapper *vfs)
-{
-}
-
-const char * const *
-g_vfs_uri_mapper_get_handled_schemes (GVfsUriMapper *mapper)
-{
- GVfsUriMapperClass *class;
-
- class = G_VFS_URI_MAPPER_GET_CLASS (mapper);
-
- return (* class->get_handled_schemes) (mapper);
-}
-
-
-GVfsUriMountInfo *
-g_vfs_uri_mapper_from_uri (GVfsUriMapper *mapper,
- const char *uri)
-{
- GVfsUriMapperClass *class;
-
- class = G_VFS_URI_MAPPER_GET_CLASS (mapper);
-
- return (* class->from_uri) (mapper, uri);
-}
-
-GVfsUriMountInfo *
-g_vfs_uri_mapper_get_mount_info_for_path (GVfsUriMapper *mapper,
- GVfsUriMountInfo *info,
- const char *new_path)
-{
- GVfsUriMapperClass *class;
-
- class = G_VFS_URI_MAPPER_GET_CLASS (mapper);
-
- if (class->get_mount_info_for_path != NULL)
- return (* class->get_mount_info_for_path) (mapper, info, new_path);
- else
- return NULL;
-}
-
-const char * const *
-g_vfs_uri_mapper_get_handled_mount_types (GVfsUriMapper *mapper)
-{
- GVfsUriMapperClass *class;
-
- class = G_VFS_URI_MAPPER_GET_CLASS (mapper);
-
- return (* class->get_handled_mount_types) (mapper);
-}
-
-char *
-g_vfs_uri_mapper_to_uri (GVfsUriMapper *mapper,
- GVfsUriMountInfo *mount_info,
- gboolean allow_utf8)
-{
- GVfsUriMapperClass *class;
-
- class = G_VFS_URI_MAPPER_GET_CLASS (mapper);
-
- return (* class->to_uri) (mapper, mount_info, allow_utf8);
-}
-
-const char *
-g_vfs_uri_mapper_to_uri_scheme (GVfsUriMapper *mapper,
- GVfsUriMountInfo *mount_info)
-{
- GVfsUriMapperClass *class;
-
- class = G_VFS_URI_MAPPER_GET_CLASS (mapper);
-
- return (* class->to_uri_scheme) (mapper, mount_info);
-}
-
diff --git a/client/gvfsurimapper.h b/client/gvfsurimapper.h
deleted file mode 100644
index 6a3b5ea5..00000000
--- a/client/gvfsurimapper.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_URI_MAPPER_H__
-#define __G_VFS_URI_MAPPER_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_URI_MAPPER (g_vfs_uri_mapper_get_type ())
-#define G_VFS_URI_MAPPER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_URI_MAPPER, GVfsUriMapper))
-#define G_VFS_URI_MAPPER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_URI_MAPPER, GVfsUriMapperClass))
-#define G_VFS_URI_MAPPER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_URI_MAPPER, GVfsUriMapperClass))
-#define G_IS_VFS_URI_MAPPER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_URI_MAPPER))
-#define G_IS_VFS_URI_MAPPER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_URI_MAPPER))
-
-typedef struct _GVfsUriMapper GVfsUriMapper; /* Dummy typedef */
-typedef struct _GVfsUriMapperClass GVfsUriMapperClass;
-
-struct _GVfsUriMapper {
- GObject parent;
-};
-
-/* Keep in sync with GMountSpecItem */
-typedef struct {
- char *key;
- char *value;
-} GVfsUriMountInfoKey;
-
-typedef struct {
- GArray *keys;
- char *path;
-} GVfsUriMountInfo;
-
-struct _GVfsUriMapperClass
-{
- GObjectClass parent_class;
-
- /* Virtual Table */
-
- const char * const * (*get_handled_schemes) (GVfsUriMapper *mapper);
- GVfsUriMountInfo * (*from_uri) (GVfsUriMapper *mapper,
- const char *uri);
- GVfsUriMountInfo * (*get_mount_info_for_path) (GVfsUriMapper *mapper,
- GVfsUriMountInfo *mount_info,
- const char *new_path);
-
- const char * const * (*get_handled_mount_types) (GVfsUriMapper *mapper);
- char * (*to_uri) (GVfsUriMapper *mapper,
- GVfsUriMountInfo *mount_info,
- gboolean allow_utf8);
- const char * (*to_uri_scheme) (GVfsUriMapper *mapper,
- GVfsUriMountInfo *mount_info);
-};
-
-GType g_vfs_uri_mapper_get_type (void);
-void g_vfs_uri_mapper_register (GIOModule *module);
-
-GVfsUriMountInfo *g_vfs_uri_mount_info_new (const char *type);
-void g_vfs_uri_mount_info_free (GVfsUriMountInfo *info);
-const char * g_vfs_uri_mount_info_get (GVfsUriMountInfo *info,
- const char *key);
-void g_vfs_uri_mount_info_set (GVfsUriMountInfo *info,
- const char *key,
- const char *value);
-void g_vfs_uri_mount_info_set_with_len (GVfsUriMountInfo *info,
- const char *key,
- const char *value,
- int value_len);
-
-const char * const *g_vfs_uri_mapper_get_handled_schemes (GVfsUriMapper *mapper);
-GVfsUriMountInfo * g_vfs_uri_mapper_from_uri (GVfsUriMapper *mapper,
- const char *uri);
-GVfsUriMountInfo * g_vfs_uri_mapper_get_mount_info_for_path (GVfsUriMapper *mapper,
- GVfsUriMountInfo *mount_info,
- const char *new_path);
-
-const char * const *g_vfs_uri_mapper_get_handled_mount_types (GVfsUriMapper *mapper);
-char * g_vfs_uri_mapper_to_uri (GVfsUriMapper *mapper,
- GVfsUriMountInfo *mount_info,
- gboolean allow_utf8);
-const char * g_vfs_uri_mapper_to_uri_scheme (GVfsUriMapper *mapper,
- GVfsUriMountInfo *mount_infoxo);
-
-
-G_END_DECLS
-
-#endif /* __G_VFS_URI_MAPPER_H__ */
diff --git a/client/gvfsuriutils.c b/client/gvfsuriutils.c
deleted file mode 100644
index c9bae69b..00000000
--- a/client/gvfsuriutils.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-#include "gvfsuriutils.h"
-#include <string.h>
-#include <stdlib.h>
-
-void
-g_vfs_decoded_uri_free (GDecodedUri *decoded)
-{
- if (decoded == NULL)
- return;
-
- g_free (decoded->scheme);
- g_free (decoded->query);
- g_free (decoded->fragment);
- g_free (decoded->userinfo);
- g_free (decoded->host);
- g_free (decoded->path);
- g_free (decoded);
-}
-
-GDecodedUri *
-g_vfs_decoded_uri_new (void)
-{
- GDecodedUri *uri;
-
- uri = g_new0 (GDecodedUri, 1);
- uri->port = -1;
-
- return uri;
-}
-
-GDecodedUri *
-g_vfs_decode_uri (const char *uri)
-{
- GDecodedUri *decoded;
- const char *p, *in, *hier_part_start, *hier_part_end, *query_start, *fragment_start;
- char *out;
- char c;
-
- /* From RFC 3986 Decodes:
- * URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
- */
-
- p = uri;
-
- /* Decode scheme:
- scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
- */
-
- if (!g_ascii_isalpha (*p))
- return NULL;
-
- while (1)
- {
- c = *p++;
-
- if (c == ':')
- break;
-
- if (!(g_ascii_isalnum(c) ||
- c == '+' ||
- c == '-' ||
- c == '.'))
- return NULL;
- }
-
- decoded = g_vfs_decoded_uri_new ();
-
- decoded->scheme = g_malloc (p - uri);
- out = decoded->scheme;
- for (in = uri; in < p - 1; in++)
- *out++ = g_ascii_tolower (*in);
- *out = 0;
-
- hier_part_start = p;
-
- query_start = strchr (p, '?');
- if (query_start)
- {
- hier_part_end = query_start++;
- fragment_start = strchr (query_start, '#');
- if (fragment_start)
- {
- decoded->query = g_strndup (query_start, fragment_start - query_start);
- decoded->fragment = g_strdup (fragment_start+1);
- }
- else
- {
- decoded->query = g_strdup (query_start);
- decoded->fragment = NULL;
- }
- }
- else
- {
- /* No query */
- decoded->query = NULL;
- fragment_start = strchr (p, '#');
- if (fragment_start)
- {
- hier_part_end = fragment_start++;
- decoded->fragment = g_strdup (fragment_start);
- }
- else
- {
- hier_part_end = p + strlen (p);
- decoded->fragment = NULL;
- }
- }
-
- /* 3:
- hier-part = "//" authority path-abempty
- / path-absolute
- / path-rootless
- / path-empty
-
- */
-
- if (hier_part_start[0] == '/' &&
- hier_part_start[1] == '/')
- {
- const char *authority_start, *authority_end;
- const char *userinfo_start, *userinfo_end;
- const char *host_start, *host_end;
- const char *port_start;
-
- authority_start = hier_part_start + 2;
- /* authority is always followed by / or nothing */
- authority_end = memchr (authority_start, '/', hier_part_end - authority_start);
- if (authority_end == NULL)
- authority_end = hier_part_end;
-
- /* 3.2:
- authority = [ userinfo "@" ] host [ ":" port ]
- */
-
- userinfo_end = memchr (authority_start, '@', authority_end - authority_start);
- if (userinfo_end)
- {
- userinfo_start = authority_start;
- decoded->userinfo = g_uri_unescape_segment (userinfo_start, userinfo_end, NULL);
- if (decoded->userinfo == NULL)
- {
- g_vfs_decoded_uri_free (decoded);
- return NULL;
- }
- host_start = userinfo_end + 1;
- }
- else
- host_start = authority_start;
-
- /* We should handle hostnames in brackets, as those are used by IPv6 URIs
- * See http://tools.ietf.org/html/rfc2732 */
- if (*host_start == '[')
- {
- char *s;
-
- port_start = NULL;
- host_end = memchr (host_start, ']', authority_end - host_start);
- if (host_end == NULL)
- {
- g_vfs_decoded_uri_free (decoded);
- return NULL;
- }
-
- /* Look for the start of the port,
- * And we sure we don't have it start somewhere
- * in the path section */
- s = (char *) host_end;
- while (1)
- {
- if (*s == '/')
- {
- port_start = NULL;
- break;
- }
- else if (*s == ':')
- {
- port_start = s;
- break;
- }
- else if (*s == '\0')
- {
- break;
- }
-
- s++;
- }
- }
- else
- {
- port_start = memchr (host_start, ':', authority_end - host_start);
- }
-
- if (port_start)
- {
- host_end = port_start++;
-
- decoded->port = atoi(port_start);
- }
- else
- {
- host_end = authority_end;
- decoded->port = -1;
- }
-
- decoded->host = g_strndup (host_start, host_end - host_start);
-
- hier_part_start = authority_end;
- }
-
- decoded->path = g_uri_unescape_segment (hier_part_start, hier_part_end, "/");
-
- if (decoded->path == NULL)
- {
- g_vfs_decoded_uri_free (decoded);
- return NULL;
- }
-
- return decoded;
-}
-
-char *
-g_vfs_encode_uri (GDecodedUri *decoded, gboolean allow_utf8)
-{
- GString *uri;
-
- uri = g_string_new (NULL);
-
- g_string_append (uri, decoded->scheme);
- g_string_append (uri, "://");
-
- if (decoded->host != NULL)
- {
- if (decoded->userinfo)
- {
- /* userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) */
- g_string_append_uri_escaped (uri, decoded->userinfo,
- G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO, allow_utf8);
- g_string_append_c (uri, '@');
- }
-
- g_string_append (uri, decoded->host);
-
- if (decoded->port != -1)
- {
- g_string_append_c (uri, ':');
- g_string_append_printf (uri, "%d", decoded->port);
- }
- }
-
- g_string_append_uri_escaped (uri, decoded->path, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH, allow_utf8);
-
- if (decoded->query)
- {
- g_string_append_c (uri, '?');
- g_string_append (uri, decoded->query);
- }
-
- if (decoded->fragment)
- {
- g_string_append_c (uri, '#');
- g_string_append (uri, decoded->fragment);
- }
-
- return g_string_free (uri, FALSE);
-}
diff --git a/client/gvfsuriutils.h b/client/gvfsuriutils.h
deleted file mode 100644
index 20de00d3..00000000
--- a/client/gvfsuriutils.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_URI_UTILS_H__
-#define __G_VFS_URI_UTILS_H__
-
-#include <glib.h>
-#include <glib/gurifuncs.h>
-
-G_BEGIN_DECLS
-
-typedef struct {
- char *scheme;
- char *userinfo;
- char *host;
- int port; /* -1 => not in uri */
- char *path;
- char *query;
- char *fragment;
-} GDecodedUri;
-
-char * g_vfs_encode_uri (GDecodedUri *decoded,
- gboolean allow_utf8);
-void g_vfs_decoded_uri_free (GDecodedUri *decoded);
-GDecodedUri *g_vfs_decode_uri (const char *uri);
-GDecodedUri *g_vfs_decoded_uri_new (void);
-
-
-G_END_DECLS
-
-#endif /* __G_VFS_URI_UTILS_H__ */
diff --git a/client/httpuri.c b/client/httpuri.c
deleted file mode 100644
index 7eef0cbb..00000000
--- a/client/httpuri.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Christian Kellner <gicmo@gnome.org>
- */
-
-#include <config.h>
-#include <string.h>
-
-#include <stdlib.h> /* atoi */
-
-#include <gio/gio.h>
-#include <gvfsurimapper.h>
-#include <gvfsuriutils.h>
-
-typedef struct _GVfsUriMapperHttp GVfsUriMapperHttp;
-typedef struct _GVfsUriMapperHttpClass GVfsUriMapperHttpClass;
-
-struct _GVfsUriMapperHttp
-{
- GVfsUriMapper parent;
-};
-
-struct _GVfsUriMapperHttpClass
-{
- GVfsUriMapperClass parent_class;
-};
-
-GType g_vfs_uri_mapper_http_get_type (void);
-void g_vfs_uri_mapper_http_register (GIOModule *module);
-
-G_DEFINE_DYNAMIC_TYPE (GVfsUriMapperHttp, g_vfs_uri_mapper_http, G_VFS_TYPE_URI_MAPPER)
-
-static void
-g_vfs_uri_mapper_http_init (GVfsUriMapperHttp *vfs)
-{
-}
-
-static const char * const *
-http_get_handled_schemes (GVfsUriMapper *mapper)
-{
- static const char *schemes[] = {
- "http",
- "https",
- "dav",
- "davs",
- NULL
- };
- return schemes;
-}
-
-static inline gboolean
-port_is_defaul_port (int port, gboolean ssl)
-{
- if (ssl)
- return port == 443;
- else
- return port == 80;
-}
-
-static GVfsUriMountInfo *
-http_from_uri (GVfsUriMapper *mapper,
- const char *uri_str)
-{
- GVfsUriMountInfo *info;
- char *path;
- gboolean ssl;
-
- path = NULL;
- if (!g_ascii_strncasecmp (uri_str, "http", 4))
- {
- GDecodedUri *uri;
-
- uri = g_vfs_decode_uri (uri_str);
-
- info = g_vfs_uri_mount_info_new ("http");
- g_vfs_uri_mount_info_set (info, "uri", uri_str);
-
- if (uri)
- {
- path = uri->path;
- uri->path = NULL;
- g_vfs_decoded_uri_free (uri);
- }
- }
- else
- {
- GDecodedUri *uri;
-
- uri = g_vfs_decode_uri (uri_str);
-
- if (uri == NULL)
- return NULL;
-
- info = g_vfs_uri_mount_info_new ("dav");
- ssl = !g_ascii_strcasecmp (uri->scheme, "davs");
- g_vfs_uri_mount_info_set (info, "ssl", ssl ? "true" : "false");
-
- if (uri->host && *uri->host)
- g_vfs_uri_mount_info_set (info, "host", uri->host);
-
- if (uri->userinfo && *uri->userinfo)
- g_vfs_uri_mount_info_set (info, "user", uri->userinfo);
-
- /* only set the port if it isn't the default port */
- if (uri->port != -1 && ! port_is_defaul_port (uri->port, ssl))
- {
- char *port = g_strdup_printf ("%d", uri->port);
- g_vfs_uri_mount_info_set (info, "port", port);
- g_free (port);
- }
-
- path = uri->path;
- uri->path = NULL;
-
- g_vfs_decoded_uri_free (uri);
- }
-
-
- info->path = path;
- return info;
-}
-
-static GVfsUriMountInfo *
-http_get_mount_info_for_path (GVfsUriMapper *mapper,
- GVfsUriMountInfo *info,
- const char *new_path)
-{
- const char *type;
-
- type = g_vfs_uri_mount_info_get (info, "type");
-
- if (strcmp (type, "http") == 0)
- {
- const char *uri_str;
- char *new_uri;
- GDecodedUri *uri;
- GVfsUriMountInfo *new_info;
-
- uri_str = g_vfs_uri_mount_info_get (info, "uri");
-
- uri = g_vfs_decode_uri (uri_str);
-
- if (uri == NULL)
- return NULL;
-
- if (strcmp (uri->path, new_path) == 0)
- {
- g_vfs_decoded_uri_free (uri);
- return NULL;
- }
-
- g_free (uri->path);
- uri->path = g_strdup (new_path);
-
- g_free (uri->query);
- uri->query = NULL;
-
- g_free (uri->fragment);
- uri->fragment = NULL;
-
- new_info = g_vfs_uri_mount_info_new ("http");
-
- new_uri = g_vfs_encode_uri (uri, TRUE);
- g_vfs_uri_mount_info_set (new_info, "uri", new_uri);
- g_free (new_uri);
-
- uri->path = NULL;
-
- g_vfs_decoded_uri_free (uri);
-
- return new_info;
- }
- else
- return NULL;
-}
-
-static const char * const *
-http_get_handled_mount_types (GVfsUriMapper *mapper)
-{
- static const char *types[] = {
- "http",
- "dav",
- NULL
- };
- return types;
-}
-
-static char *
-http_to_uri (GVfsUriMapper *mapper,
- GVfsUriMountInfo *info,
- gboolean allow_utf8)
-{
- char *res;
- const char *type;
- const char *host;
- const char *user;
- const char *port;
- const char *ssl;
-
- type = g_vfs_uri_mount_info_get (info, "type");
-
- if (strcmp (type, "http") == 0)
- {
- res = g_strdup (g_vfs_uri_mount_info_get (info, "uri"));
- }
- else
- {
- GDecodedUri *decoded_uri;
- int port_num;
-
- decoded_uri = g_new0 (GDecodedUri, 1);
-
- ssl = g_vfs_uri_mount_info_get (info, "ssl");
- host = g_vfs_uri_mount_info_get (info, "host");
- user = g_vfs_uri_mount_info_get (info, "user");
- port = g_vfs_uri_mount_info_get (info, "port");
-
- if (ssl && strcmp (ssl, "true") == 0)
- decoded_uri->scheme = g_strdup ("davs");
- else
- decoded_uri->scheme = g_strdup ("dav");
-
- decoded_uri->host = g_strdup (host);
- decoded_uri->userinfo = g_strdup (user);
-
- if (port && (port_num = atoi (port)))
- decoded_uri->port = port_num;
- else
- decoded_uri->port = -1;
-
- decoded_uri->path = g_strdup (info->path);
-
- res = g_vfs_encode_uri (decoded_uri, allow_utf8);
- g_vfs_decoded_uri_free (decoded_uri);
- }
-
- return res;
-}
-
-static const char *
-http_to_uri_scheme (GVfsUriMapper *mapper,
- GVfsUriMountInfo *info)
-{
- const gchar *ssl;
- const gchar *type;
- gboolean is_dav;
- gboolean is_ssl;
-
- ssl = g_vfs_uri_mount_info_get (info, "ssl");
- type = g_vfs_uri_mount_info_get (info, "type");
-
- if (strcmp (type, "dav") == 0)
- is_dav = TRUE;
- else if (strcmp (type, "http") == 0)
- is_dav = FALSE;
- else
- return NULL;
-
- is_ssl =
- ssl != NULL &&
- strcmp (ssl, "true") == 0;
-
- if (is_dav && is_ssl)
- return "davs";
- else if (is_dav && !is_ssl)
- return "dav";
- else if (!is_dav && is_ssl)
- return "https";
- else
- return "http";
-}
-
-static void
-g_vfs_uri_mapper_http_class_finalize (GVfsUriMapperHttpClass *klass)
-{
-}
-
-static void
-g_vfs_uri_mapper_http_class_init (GVfsUriMapperHttpClass *class)
-{
- GVfsUriMapperClass *mapper_class;
-
- mapper_class = G_VFS_URI_MAPPER_CLASS (class);
- mapper_class->get_handled_schemes = http_get_handled_schemes;
- mapper_class->from_uri = http_from_uri;
- mapper_class->get_mount_info_for_path = http_get_mount_info_for_path;
- mapper_class->get_handled_mount_types = http_get_handled_mount_types;
- mapper_class->to_uri = http_to_uri;
- mapper_class->to_uri_scheme = http_to_uri_scheme;
-}
-
-void
-g_vfs_uri_mapper_http_register (GIOModule *module)
-{
- g_vfs_uri_mapper_http_register_type (G_TYPE_MODULE (module));
-}
diff --git a/client/smburi.c b/client/smburi.c
deleted file mode 100644
index d3804cf4..00000000
--- a/client/smburi.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-#include <string.h>
-
-#include <gio/gio.h>
-#include <gvfsurimapper.h>
-#include <gvfsuriutils.h>
-
-typedef struct _GVfsUriMapperSmb GVfsUriMapperSmb;
-typedef struct _GVfsUriMapperSmbClass GVfsUriMapperSmbClass;
-
-struct _GVfsUriMapperSmb
-{
- GVfsUriMapper parent;
-};
-
-struct _GVfsUriMapperSmbClass
-{
- GVfsUriMapperClass parent_class;
-};
-
-GType g_vfs_uri_mapper_smb_get_type (void);
-void g_vfs_uri_mapper_smb_register (GIOModule *module);
-
-G_DEFINE_DYNAMIC_TYPE (GVfsUriMapperSmb, g_vfs_uri_mapper_smb, G_VFS_TYPE_URI_MAPPER)
-
-static void
-g_vfs_uri_mapper_smb_init (GVfsUriMapperSmb *vfs)
-{
-}
-
-static char *
-normalize_smb_name (const char *name, gssize len)
-{
- gboolean valid_utf8;
-
- valid_utf8 = g_utf8_validate (name, len, NULL);
-
- if (valid_utf8)
- return g_utf8_casefold (name, len);
- else
- return g_ascii_strdown (name, len);
-}
-
-static const char * const *
-smb_get_handled_schemes (GVfsUriMapper *mapper)
-{
- static const char *schemes[] = {
- "smb",
- NULL
- };
- return schemes;
-}
-
-static GVfsUriMountInfo *
-smb_from_uri (GVfsUriMapper *mapper,
- const char *uri_str)
-{
- char *tmp;
- const char *p;
- const char *share, *share_end;
- GDecodedUri *uri;
- GVfsUriMountInfo *info;
-
- uri = g_vfs_decode_uri (uri_str);
- if (uri == NULL)
- return NULL;
-
- if (uri->host == NULL || strlen (uri->host) == 0)
- {
- /* uri form: smb:/// or smb:///$path */
- info = g_vfs_uri_mount_info_new ("smb-network");
- if (uri->path == NULL || *uri->path == 0)
- info->path = g_strdup ("/");
- else
- info->path = g_strdup (uri->path);
- }
- else
- {
- /* host set */
- p = uri->path;
- while (p && *p == '/')
- p++;
-
- if (p == NULL || *p == 0)
- {
- /* uri form: smb://$host/ */
- info = g_vfs_uri_mount_info_new ("smb-server");
- tmp = normalize_smb_name (uri->host, -1);
- g_vfs_uri_mount_info_set (info, "server", tmp);
- g_free (tmp);
- info->path = g_strdup ("/");
- }
- else
- {
- share = p;
- share_end = strchr (share, '/');
- if (share_end == NULL)
- share_end = share + strlen (share);
-
- p = share_end;
-
- while (*p == '/')
- p++;
-
- if (*p == 0)
- {
- /* uri form: smb://$host/$share/
- * Here we special case smb-server files by adding "._" to the names in the uri */
- if (share[0] == '.' && share[1] == '_')
- {
- info = g_vfs_uri_mount_info_new ("smb-server");
- tmp = normalize_smb_name (uri->host, -1);
- g_vfs_uri_mount_info_set (info, "server", tmp);
- g_free (tmp);
- tmp = normalize_smb_name (share + 2, share_end - (share + 2));
- info->path = g_strconcat ("/", tmp, NULL);
- g_free (tmp);
- }
- else
- {
- info = g_vfs_uri_mount_info_new ("smb-share");
- tmp = normalize_smb_name (uri->host, -1);
- g_vfs_uri_mount_info_set (info, "server", tmp);
- g_free (tmp);
- tmp = normalize_smb_name (share, share_end - share);
- g_vfs_uri_mount_info_set (info, "share", tmp);
- g_free (tmp);
- info->path = g_strdup ("/");
- }
- }
- else
- {
- info = g_vfs_uri_mount_info_new ("smb-share");
-
- tmp = normalize_smb_name (uri->host, -1);
- g_vfs_uri_mount_info_set (info, "server", tmp);
- g_free (tmp);
-
- tmp = normalize_smb_name (share, share_end - share);
- g_vfs_uri_mount_info_set (info, "share", tmp);
- g_free (tmp);
-
- info->path = g_strconcat ("/", p, NULL);
- }
- }
- }
-
- if (uri->userinfo)
- {
- const char *user = uri->userinfo;
- p = strchr (uri->userinfo, ';');
- if (p)
- {
- if (p != user)
- g_vfs_uri_mount_info_set_with_len (info, "domain", user, p - user);
- user = p + 1;
- }
- if (*user != 0)
- g_vfs_uri_mount_info_set (info, "user", user);
- }
-
- g_vfs_decoded_uri_free (uri);
-
- return info;
-}
-
-static const char * const *
-smb_get_handled_mount_types (GVfsUriMapper *mapper)
-{
- static const char *types[] = {
- "smb-network",
- "smb-server",
- "smb-share",
- NULL
- };
- return types;
-}
-
-static char *
-smb_to_uri (GVfsUriMapper *mapper,
- GVfsUriMountInfo *info,
- gboolean allow_utf8)
-{
- const char *type;
- const char *server;
- const char *share;
- const char *user;
- const char *domain;
- char *s;
- GDecodedUri *uri;
-
- uri = g_new0 (GDecodedUri, 1);
-
- type = g_vfs_uri_mount_info_get (info, "type");
-
- uri->scheme = g_strdup ("smb");
- uri->port = -1;
-
- if (strcmp (type, "smb-network") == 0)
- {
- uri->path = g_strdup (info->path);
- }
- else if (strcmp (type, "smb-server") == 0)
- {
- server = g_vfs_uri_mount_info_get (info, "server");
- uri->host = g_strdup (server);
-
- /* Map the mountables in server to ._share because the actual share mount maps to smb://server/share */
- if (info->path && info->path[0] == '/' && info->path[1] != 0)
- uri->path = g_strconcat ("/._", info->path + 1, NULL);
- else
- uri->path = g_strdup ("/");
- }
- else if (strcmp (type, "smb-share") == 0)
- {
- server = g_vfs_uri_mount_info_get (info, "server");
- uri->host = g_strdup (server);
- share = g_vfs_uri_mount_info_get (info, "share");
- if (info->path[0] == '/')
- uri->path = g_strconcat ("/", share, info->path, NULL);
- else
- uri->path = g_strconcat ("/", share, "/", info->path, NULL);
-
- user = g_vfs_uri_mount_info_get (info, "user");
- domain = g_vfs_uri_mount_info_get (info, "domain");
- if (user) {
- if (domain)
- uri->userinfo = g_strconcat (domain, ";", user, NULL);
- else
- uri->userinfo = g_strdup (user);
- }
- }
-
- s = g_vfs_encode_uri (uri, allow_utf8);
- g_vfs_decoded_uri_free (uri);
- return s;
-}
-
-static const char *
-smb_to_uri_scheme (GVfsUriMapper *mapper,
- GVfsUriMountInfo *info)
-{
- const gchar *type = g_vfs_uri_mount_info_get (info, "type");
-
- if (strcmp ("smb-network", type) == 0 ||
- strcmp ("smb-server", type) == 0 ||
- strcmp ("smb-share", type) == 0)
- return "smb";
- else
- return NULL;
-}
-
-static void
-g_vfs_uri_mapper_smb_class_finalize (GVfsUriMapperSmbClass *klass)
-{
-}
-
-static void
-g_vfs_uri_mapper_smb_class_init (GVfsUriMapperSmbClass *class)
-{
- GVfsUriMapperClass *mapper_class;
-
- mapper_class = G_VFS_URI_MAPPER_CLASS (class);
- mapper_class->get_handled_schemes = smb_get_handled_schemes;
- mapper_class->from_uri = smb_from_uri;
- mapper_class->get_handled_mount_types = smb_get_handled_mount_types;
- mapper_class->to_uri = smb_to_uri;
- mapper_class->to_uri_scheme = smb_to_uri_scheme;
-}
-
-void
-g_vfs_uri_mapper_smb_register (GIOModule *module)
-{
- g_vfs_uri_mapper_smb_register_type (G_TYPE_MODULE (module));
-}
diff --git a/client/test-uri-utils.c b/client/test-uri-utils.c
deleted file mode 100644
index 41cfb057..00000000
--- a/client/test-uri-utils.c
+++ /dev/null
@@ -1,58 +0,0 @@
-
-#include <string.h>
-
-#include "gvfsuriutils.h"
-
-
-typedef struct {
- const char *uri;
- const char *expected_host;
- guint expected_port;
-} TestURIs;
-
-static TestURIs uris[] = {
- { "https://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:443/", "[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]", 443 },
- { "http://test:443/", "test", 443 },
- { "http://test/", "test", -1 },
- { "obex://[00:FF:FF:FF:FF:FF]/MMC/foo.jpg", "[00:FF:FF:FF:FF:FF]", -1 },
- { "obex://[00:FF:FF:FF:FF:FF]/C:", "[00:FF:FF:FF:FF:FF]", -1 },
- { "http://windows-host:8080/C:/", "windows-host", 8080 },
-};
-
-int main (int argc, char **argv)
-{
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS (uris); i++) {
- GDecodedUri *decoded;
- char *encoded;
-
- decoded = g_vfs_decode_uri (uris[i].uri);
- if (decoded == NULL) {
- g_warning ("Failed to parse \"%s\"", uris[i].uri);
- return 1;
- }
- if (decoded->host == NULL || strcmp (decoded->host, uris[i].expected_host) != 0) {
- g_warning ("Wrong host for \"%s\" (got '%s', expected '%s')", uris[i].uri, decoded->host, uris[i].expected_host);
- g_vfs_decoded_uri_free (decoded);
- return 1;
- }
- if (decoded->port != uris[i].expected_port) {
- g_warning ("Wrong port for \"%s\"", uris[i].uri);
- g_vfs_decoded_uri_free (decoded);
- return 1;
- }
- encoded = g_vfs_encode_uri (decoded, TRUE);
- if (encoded == NULL || strcmp (encoded, uris[i].uri) != 0) {
- g_warning ("Failed to re-encode \"%s\" from '%s'", uris[i].uri, encoded);
- g_vfs_decoded_uri_free (decoded);
- g_free (encoded);
- return 1;
- }
- g_free (encoded);
- g_vfs_decoded_uri_free (decoded);
- }
-
- return 0;
-}
-
diff --git a/common/Makefile.am b/common/Makefile.am
deleted file mode 100644
index 5c59496b..00000000
--- a/common/Makefile.am
+++ /dev/null
@@ -1,27 +0,0 @@
-NULL =
-
-noinst_LTLIBRARIES = libgvfscommon-noin.la
-lib_LTLIBRARIES=libgvfscommon.la
-
-INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/gvfs \
- -I$(top_srcdir)/daemon \
- $(GLIB_CFLAGS) $(DBUS_CFLAGS) \
- -DG_LOG_DOMAIN=\"GVFS\" -DG_DISABLE_DEPRECATED \
- -DDBUS_API_SUBJECT_TO_CHANGE
-
-libgvfscommon_noin_la_SOURCES = \
- gsysutils.c gsysutils.h \
- gdbusutils.c gdbusutils.h \
- gmountspec.c gmountspec.h \
- gmountoperationdbus.c gmountoperationdbus.h \
- gmountsource.c gmountsource.h \
- gmounttracker.c gmounttracker.h \
- gvfsdaemonprotocol.c gvfsdaemonprotocol.h \
- $(NULL)
-
-libgvfscommon_noin_la_LIBADD = \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
-libgvfscommon_la_SOURCES =
-libgvfscommon_la_LIBADD = libgvfscommon-noin.la
diff --git a/common/gdbusutils.c b/common/gdbusutils.c
deleted file mode 100644
index c4282452..00000000
--- a/common/gdbusutils.c
+++ /dev/null
@@ -1,1391 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <glib/gi18n-lib.h>
-#include <gdbusutils.h>
-#include <gio/gio.h>
-
-void
-_g_dbus_oom (void)
-{
- g_error ("DBus failed with out of memory error");
-}
-
-/* We use _ for escaping, so its not valid */
-#define VALID_INITIAL_NAME_CHARACTER(c) \
- ( ((c) >= 'A' && (c) <= 'Z') || \
- ((c) >= 'a' && (c) <= 'z') )
-#define VALID_NAME_CHARACTER(c) \
- ( ((c) >= '0' && (c) <= '9') || \
- ((c) >= 'A' && (c) <= 'Z') || \
- ((c) >= 'a' && (c) <= 'z'))
-
-
-static void
-append_escaped_name (GString *s,
- const char *unescaped)
-{
- char c;
- gboolean first;
- static const gchar hex[16] = "0123456789ABCDEF";
-
- while ((c = *unescaped++) != 0)
- {
- if (first)
- {
- if (VALID_INITIAL_NAME_CHARACTER (c))
- {
- g_string_append_c (s, c);
- continue;
- }
- }
- else
- {
- if (VALID_NAME_CHARACTER (c))
- {
- g_string_append_c (s, c);
- continue;
- }
- }
-
- first = FALSE;
- g_string_append_c (s, '_');
- g_string_append_c (s, hex[((guchar)c) >> 4]);
- g_string_append_c (s, hex[((guchar)c) & 0xf]);
- }
-}
-
-DBusMessage *
-_dbus_message_new_gerror (DBusMessage *message,
- GQuark domain,
- gint code,
- const gchar *format,
- ...)
-{
- DBusMessage *reply;
- va_list args;
- GError error;
-
- error.domain = domain;
- error.code = code;
- va_start (args, format);
- error.message = g_strdup_vprintf (format, args);
- va_end (args);
-
- reply = _dbus_message_new_from_gerror (message, &error);
-
- g_free (error.message);
-
- return reply;
-}
-
-DBusMessage *
-_dbus_message_new_from_gerror (DBusMessage *message,
- GError *error)
-{
- DBusMessage *reply;
- GString *str;
-
- str = g_string_new ("org.glib.GError.");
- append_escaped_name (str, g_quark_to_string (error->domain));
- g_string_append_printf (str, ".c%d", error->code);
- reply = dbus_message_new_error (message, str->str, error->message);
- g_string_free (str, TRUE);
- return reply;
-}
-
-gboolean
-_g_error_from_message (DBusMessage *message,
- GError **error)
-{
- DBusError derror;
-
- dbus_error_init (&derror);
- if (dbus_set_error_from_message (&derror, message))
- {
- _g_error_from_dbus (&derror, error);
- dbus_error_free (&derror);
- return TRUE;
- }
- return FALSE;
-}
-
-
-
-static void
-append_unescaped_dbus_name (GString *s,
- const char *escaped,
- const char *end)
-{
- guchar c;
-
- while (escaped < end)
- {
- c = *escaped++;
- if (c == '_' &&
- escaped < end)
- {
- c = g_ascii_xdigit_value (*escaped++) << 4;
-
- if (escaped < end)
- c |= g_ascii_xdigit_value (*escaped++);
- }
- g_string_append_c (s, c);
- }
-}
-
-char *
-_g_dbus_unescape_bus_name (const char *escaped, const char *end)
-{
- GString *s = g_string_new ("");
-
- if (end == NULL)
- end = escaped + strlen (escaped);
-
- append_unescaped_dbus_name (s, escaped, end);
- return g_string_free (s, FALSE);
-}
-
-/* We use _ for escaping */
-#define VALID_INITIAL_BUS_NAME_CHARACTER(c) \
- ( ((c) >= 'A' && (c) <= 'Z') || \
- ((c) >= 'a' && (c) <= 'z') || \
- /*((c) == '_') || */((c) == '-'))
-#define VALID_BUS_NAME_CHARACTER(c) \
- ( ((c) >= '0' && (c) <= '9') || \
- ((c) >= 'A' && (c) <= 'Z') || \
- ((c) >= 'a' && (c) <= 'z') || \
- /*((c) == '_')||*/ ((c) == '-'))
-
-void
-_g_dbus_append_escaped_bus_name (GString *s,
- gboolean at_start,
- const char *unescaped)
-{
- char c;
- gboolean first;
- static const gchar hex[16] = "0123456789ABCDEF";
-
- while ((c = *unescaped++) != 0)
- {
- if (first && at_start)
- {
- if (VALID_INITIAL_BUS_NAME_CHARACTER (c))
- {
- g_string_append_c (s, c);
- continue;
- }
- }
- else
- {
- if (VALID_BUS_NAME_CHARACTER (c))
- {
- g_string_append_c (s, c);
- continue;
- }
- }
-
- first = FALSE;
- g_string_append_c (s, '_');
- g_string_append_c (s, hex[((guchar)c) >> 4]);
- g_string_append_c (s, hex[((guchar)c) & 0xf]);
- }
-}
-
-void
-_g_dbus_message_iter_append_cstring (DBusMessageIter *iter, const char *str)
-{
- DBusMessageIter array;
-
- if (str == NULL)
- str = "";
-
- if (!dbus_message_iter_open_container (iter,
- DBUS_TYPE_ARRAY,
- DBUS_TYPE_BYTE_AS_STRING,
- &array))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_fixed_array (&array,
- DBUS_TYPE_BYTE,
- &str, strlen (str)))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_close_container (iter, &array))
- _g_dbus_oom ();
-}
-
-void
-_g_dbus_message_iter_append_args_valist (DBusMessageIter *iter,
- int first_arg_type,
- va_list var_args)
-{
- int type;
-
- g_return_if_fail (iter != NULL);
-
- type = first_arg_type;
-
- while (type != DBUS_TYPE_INVALID)
- {
- if (type == G_DBUS_TYPE_CSTRING)
- {
- const char **value_p;
- const char *value;
-
- value_p = va_arg (var_args, const char**);
- value = *value_p;
-
- _g_dbus_message_iter_append_cstring (iter, value);
- }
- else if (dbus_type_is_basic (type))
- {
- const void *value;
- value = va_arg (var_args, const void*);
-
- if (!dbus_message_iter_append_basic (iter,
- type,
- value))
- _g_dbus_oom ();
- }
- else if (type == DBUS_TYPE_ARRAY)
- {
- int element_type;
- DBusMessageIter array;
- char buf[2];
-
- element_type = va_arg (var_args, int);
-
- buf[0] = element_type;
- buf[1] = '\0';
- if (!dbus_message_iter_open_container (iter,
- DBUS_TYPE_ARRAY,
- buf,
- &array))
- _g_dbus_oom ();
-
- if (dbus_type_is_fixed (element_type))
- {
- const void **value;
- int n_elements;
-
- value = va_arg (var_args, const void**);
- n_elements = va_arg (var_args, int);
-
- if (!dbus_message_iter_append_fixed_array (&array,
- element_type,
- value,
- n_elements))
- _g_dbus_oom ();
- }
- else if (element_type == DBUS_TYPE_STRING ||
- element_type == DBUS_TYPE_SIGNATURE ||
- element_type == DBUS_TYPE_OBJECT_PATH)
- {
- const char ***value_p;
- const char **value;
- int n_elements;
- int i;
-
- value_p = va_arg (var_args, const char***);
- n_elements = va_arg (var_args, int);
-
- value = *value_p;
-
- i = 0;
- while (i < n_elements)
- {
- if (!dbus_message_iter_append_basic (&array,
- element_type,
- &value[i]))
- _g_dbus_oom ();
- ++i;
- }
- }
- else
- {
- g_error ("arrays of %d can't be appended with _g_dbus_message_append_args_valist for now\n",
- element_type);
- }
-
- if (!dbus_message_iter_close_container (iter, &array))
- _g_dbus_oom ();
- }
-
- type = va_arg (var_args, int);
- }
-}
-
-
-void
-_g_dbus_message_append_args_valist (DBusMessage *message,
- int first_arg_type,
- va_list var_args)
-{
- int type;
- DBusMessageIter iter;
-
- g_return_if_fail (message != NULL);
-
- type = first_arg_type;
-
- dbus_message_iter_init_append (message, &iter);
-
- _g_dbus_message_iter_append_args_valist (&iter,
- first_arg_type,
- var_args);
-}
-
-dbus_bool_t
-_g_dbus_message_iter_get_args_valist (DBusMessageIter *iter,
- DBusError *error,
- int first_arg_type,
- va_list var_args)
-{
- int spec_type, msg_type, i, dbus_spec_type;
- dbus_bool_t retval;
-
-
- retval = FALSE;
-
- spec_type = first_arg_type;
- i = 0;
-
- while (spec_type != DBUS_TYPE_INVALID)
- {
- msg_type = dbus_message_iter_get_arg_type (iter);
-
- if (spec_type == G_DBUS_TYPE_CSTRING)
- dbus_spec_type = DBUS_TYPE_ARRAY;
- else
- dbus_spec_type = spec_type;
-
- if (msg_type != dbus_spec_type)
- {
- dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
- "Argument %d is specified to be of type \"%c\", but "
- "is actually of type \"%c\"\n", i,
- spec_type,
- msg_type);
-
- goto out;
- }
-
- if (spec_type == G_DBUS_TYPE_CSTRING)
- {
- int element_type;
- char **ptr;
- const char *str;
- int n_elements;
- DBusMessageIter array;
-
- element_type = dbus_message_iter_get_element_type (iter);
- if (DBUS_TYPE_BYTE != element_type)
- {
- dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
- "Argument %d is specified to be an array of \"char\", but "
- "is actually an array of \"%d\"\n",
- i,
- element_type);
- goto out;
- }
-
- ptr = va_arg (var_args, char**);
- g_assert (ptr != NULL);
-
- dbus_message_iter_recurse (iter, &array);
- dbus_message_iter_get_fixed_array (&array,
- &str, &n_elements);
- *ptr = g_strndup (str, n_elements);
- }
- else if (dbus_type_is_basic (spec_type))
- {
- void *ptr;
-
- ptr = va_arg (var_args, void*);
-
- g_assert (ptr != NULL);
-
- dbus_message_iter_get_basic (iter, ptr);
- }
- else if (spec_type == DBUS_TYPE_ARRAY)
- {
- int element_type;
- int spec_element_type;
- const void **ptr;
- int *n_elements_p;
- DBusMessageIter array;
-
- spec_element_type = va_arg (var_args, int);
- element_type = dbus_message_iter_get_element_type (iter);
-
- if (spec_element_type != element_type)
- {
- dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
- "Argument %d is specified to be an array of \"%d\", but "
- "is actually an array of \"%d\"\n",
- i,
- spec_element_type,
- element_type);
-
- goto out;
- }
-
- if (dbus_type_is_fixed (spec_element_type))
- {
- ptr = va_arg (var_args, const void**);
- n_elements_p = va_arg (var_args, int*);
-
- g_assert (ptr != NULL);
- g_assert (n_elements_p != NULL);
-
- dbus_message_iter_recurse (iter, &array);
-
- dbus_message_iter_get_fixed_array (&array,
- ptr, n_elements_p);
- }
- else if (spec_element_type == DBUS_TYPE_STRING ||
- spec_element_type == DBUS_TYPE_SIGNATURE ||
- spec_element_type == DBUS_TYPE_OBJECT_PATH)
- {
- char ***str_array_p;
- int n_elements;
- char **str_array;
-
- str_array_p = va_arg (var_args, char***);
- n_elements_p = va_arg (var_args, int*);
-
- g_assert (str_array_p != NULL);
- g_assert (n_elements_p != NULL);
-
- /* Count elements in the array */
- dbus_message_iter_recurse (iter, &array);
-
- n_elements = 0;
- while (dbus_message_iter_get_arg_type (&array) != DBUS_TYPE_INVALID)
- {
- ++n_elements;
- dbus_message_iter_next (&array);
- }
-
- str_array = g_new0 (char*, n_elements + 1);
- if (str_array == NULL)
- {
- _g_dbus_oom ();
- goto out;
- }
-
- /* Now go through and dup each string */
- dbus_message_iter_recurse (iter, &array);
-
- i = 0;
- while (i < n_elements)
- {
- const char *s;
- dbus_message_iter_get_basic (&array, &s);
-
- str_array[i] = g_strdup (s);
- if (str_array[i] == NULL)
- {
- g_strfreev (str_array);
- _g_dbus_oom ();
- goto out;
- }
-
- ++i;
-
- if (!dbus_message_iter_next (&array))
- g_assert (i == n_elements);
- }
-
- g_assert (dbus_message_iter_get_arg_type (&array) == DBUS_TYPE_INVALID);
- g_assert (i == n_elements);
- g_assert (str_array[i] == NULL);
-
- *str_array_p = str_array;
- *n_elements_p = n_elements;
- }
- }
-
- spec_type = va_arg (var_args, int);
- if (!dbus_message_iter_next (iter) && spec_type != DBUS_TYPE_INVALID)
- {
- dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
- "Message has only %d arguments, but more were expected", i);
- goto out;
- }
-
- i++;
- }
-
- retval = TRUE;
-
- out:
- return retval;
-}
-
-dbus_bool_t
-_g_dbus_message_iter_get_args (DBusMessageIter *iter,
- DBusError *error,
- int first_arg_type,
- ...)
-{
- va_list var_args;
- dbus_bool_t res;
-
- va_start (var_args, first_arg_type);
- res = _g_dbus_message_iter_get_args_valist (iter, error,
- first_arg_type,
- var_args);
- va_end (var_args);
- return res;
-}
-
-/* Same as the dbus one, except doesn't give OOM and handles
- G_DBUS_TYPE_CSTRING
-*/
-void
-_g_dbus_message_append_args (DBusMessage *message,
- int first_arg_type,
- ...)
-{
- va_list var_args;
-
- g_return_if_fail (message != NULL);
-
- va_start (var_args, first_arg_type);
- _g_dbus_message_append_args_valist (message,
- first_arg_type,
- var_args);
- va_end (var_args);
-}
-
-void
-_g_dbus_message_iter_append_args (DBusMessageIter *iter,
- int first_arg_type,
- ...)
-{
- va_list var_args;
-
- g_return_if_fail (iter != NULL);
-
- va_start (var_args, first_arg_type);
- _g_dbus_message_iter_append_args_valist (iter,
- first_arg_type,
- var_args);
- va_end (var_args);
-}
-
-void
-_g_error_from_dbus (DBusError *derror,
- GError **error)
-{
- const char *name, *end;
- GString *str;
- GQuark domain;
- int code;
-
- if (g_str_has_prefix (derror->name, "org.glib.GError."))
- {
- domain = 0;
- code = 0;
-
- name = derror->name + strlen ("org.glib.GError.");
- end = strchr (name, '.');
- if (end)
- {
- str = g_string_new (NULL);
- append_unescaped_dbus_name (str, name, end);
- domain = g_quark_from_string (str->str);
- g_string_free (str, TRUE);
-
- end++; /* skip . */
- if (*end++ == 'c')
- code = atoi (end);
- }
-
- g_set_error_literal (error, domain, code, derror->message);
- }
- /* TODO: Special case other types, like DBUS_ERROR_NO_MEMORY etc? */
- else
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "DBus error %s: %s", derror->name, derror->message);
-}
-
-GList *
-_g_dbus_bus_list_names_with_prefix (DBusConnection *connection,
- const char *prefix,
- DBusError *error)
-{
- DBusMessage *message, *reply;
- DBusMessageIter iter, array;
- GList *names;
-
- g_return_val_if_fail (connection != NULL, NULL);
-
- message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
- DBUS_PATH_DBUS,
- DBUS_INTERFACE_DBUS,
- "ListNames");
- if (message == NULL)
- return NULL;
-
- reply = dbus_connection_send_with_reply_and_block (connection, message, -1, error);
- dbus_message_unref (message);
-
- if (reply == NULL)
- return NULL;
-
- names = NULL;
-
- if (!dbus_message_iter_init (reply, &iter) ||
- (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_ARRAY) ||
- (dbus_message_iter_get_element_type (&iter) != DBUS_TYPE_STRING))
- goto out;
-
- for (dbus_message_iter_recurse (&iter, &array);
- dbus_message_iter_get_arg_type (&array) == DBUS_TYPE_STRING;
- dbus_message_iter_next (&array))
- {
- char *name;
- dbus_message_iter_get_basic (&array, &name);
- if (g_str_has_prefix (name, prefix))
- names = g_list_prepend (names, g_strdup (name));
- }
-
- names = g_list_reverse (names);
-
- out:
- dbus_message_unref (reply);
- return names;
-}
-
-/*************************************************************************
- * Helper fd source *
- ************************************************************************/
-
-typedef struct
-{
- GSource source;
- GPollFD pollfd;
- GCancellable *cancellable;
- gulong cancelled_tag;
-} FDSource;
-
-static gboolean
-fd_source_prepare (GSource *source,
- gint *timeout)
-{
- FDSource *fd_source = (FDSource *)source;
- *timeout = -1;
-
- return g_cancellable_is_cancelled (fd_source->cancellable);
-}
-
-static gboolean
-fd_source_check (GSource *source)
-{
- FDSource *fd_source = (FDSource *)source;
-
- return
- g_cancellable_is_cancelled (fd_source->cancellable) ||
- fd_source->pollfd.revents != 0;
-}
-
-static gboolean
-fd_source_dispatch (GSource *source,
- GSourceFunc callback,
- gpointer user_data)
-
-{
- GFDSourceFunc func = (GFDSourceFunc)callback;
- FDSource *fd_source = (FDSource *)source;
-
- g_assert (func != NULL);
-
- return (*func) (user_data, fd_source->pollfd.revents, fd_source->pollfd.fd);
-}
-
-static void
-fd_source_finalize (GSource *source)
-{
- FDSource *fd_source = (FDSource *)source;
-
- if (fd_source->cancelled_tag)
- g_signal_handler_disconnect (fd_source->cancellable,
- fd_source->cancelled_tag);
-
- if (fd_source->cancellable)
- g_object_unref (fd_source->cancellable);
-}
-
-static GSourceFuncs fd_source_funcs = {
- fd_source_prepare,
- fd_source_check,
- fd_source_dispatch,
- fd_source_finalize
-};
-
-/* Might be called on another thread */
-static void
-fd_source_cancelled_cb (GCancellable *cancellable,
- gpointer data)
-{
- /* Wake up the mainloop in case we're waiting on async calls with FDSource */
- g_main_context_wakeup (NULL);
-}
-
-/* Two __ to avoid conflict with gio version */
-GSource *
-__g_fd_source_new (int fd,
- gushort events,
- GCancellable *cancellable)
-{
- GSource *source;
- FDSource *fd_source;
-
- source = g_source_new (&fd_source_funcs, sizeof (FDSource));
- fd_source = (FDSource *)source;
-
- if (cancellable)
- fd_source->cancellable = g_object_ref (cancellable);
-
- fd_source->pollfd.fd = fd;
- fd_source->pollfd.events = events;
- g_source_add_poll (source, &fd_source->pollfd);
-
- if (cancellable)
- fd_source->cancelled_tag =
- g_signal_connect_data (cancellable, "cancelled",
- (GCallback)fd_source_cancelled_cb,
- NULL, NULL,
- 0);
-
- return source;
-}
-
-
-/*************************************************************************
- * *
- * dbus mainloop integration for async ops *
- * *
- *************************************************************************/
-
-static gint32 main_integration_data_slot = -1;
-static GOnce once_init_main_integration = G_ONCE_INIT;
-
-/**
- * A GSource subclass for dispatching DBusConnection messages.
- * We need this on top of the IO handlers, because sometimes
- * there are messages to dispatch queued up but no IO pending.
- *
- * The source is owned by the connection (and the main context
- * while that is alive)
- */
-typedef struct
-{
- GSource source;
-
- DBusConnection *connection;
- GSList *ios;
- GSList *timeouts;
-} DBusSource;
-
-typedef struct
-{
- DBusSource *dbus_source;
- GSource *source;
- DBusWatch *watch;
-} IOHandler;
-
-typedef struct
-{
- DBusSource *dbus_source;
- GSource *source;
- DBusTimeout *timeout;
-} TimeoutHandler;
-
-static gpointer
-main_integration_init (gpointer arg)
-{
- if (!dbus_connection_allocate_data_slot (&main_integration_data_slot))
- g_error ("Unable to allocate data slot");
-
- return NULL;
-}
-
-static gboolean
-dbus_source_prepare (GSource *source,
- gint *timeout)
-{
- DBusConnection *connection = ((DBusSource *)source)->connection;
-
- *timeout = -1;
-
- return (dbus_connection_get_dispatch_status (connection) == DBUS_DISPATCH_DATA_REMAINS);
-}
-
-static gboolean
-dbus_source_check (GSource *source)
-{
- return FALSE;
-}
-
-static gboolean
-dbus_source_dispatch (GSource *source,
- GSourceFunc callback,
- gpointer user_data)
-{
- DBusConnection *connection = ((DBusSource *)source)->connection;
-
- dbus_connection_ref (connection);
-
- /* Only dispatch once - we don't want to starve other GSource */
- dbus_connection_dispatch (connection);
-
- dbus_connection_unref (connection);
-
- return TRUE;
-}
-
-static gboolean
-io_handler_dispatch (gpointer data,
- GIOCondition condition,
- int fd)
-{
- IOHandler *handler = data;
- guint dbus_condition = 0;
- DBusConnection *connection;
-
- connection = handler->dbus_source->connection;
-
- if (connection)
- dbus_connection_ref (connection);
-
- if (condition & G_IO_IN)
- dbus_condition |= DBUS_WATCH_READABLE;
- if (condition & G_IO_OUT)
- dbus_condition |= DBUS_WATCH_WRITABLE;
- if (condition & G_IO_ERR)
- dbus_condition |= DBUS_WATCH_ERROR;
- if (condition & G_IO_HUP)
- dbus_condition |= DBUS_WATCH_HANGUP;
-
- /* Note that we don't touch the handler after this, because
- * dbus may have disabled the watch and thus killed the
- * handler.
- */
- dbus_watch_handle (handler->watch, dbus_condition);
- handler = NULL;
-
- if (connection)
- dbus_connection_unref (connection);
-
- return TRUE;
-}
-
-static void
-io_handler_free (IOHandler *handler)
-{
- DBusSource *dbus_source;
-
- dbus_source = handler->dbus_source;
- dbus_source->ios = g_slist_remove (dbus_source->ios, handler);
-
- g_source_destroy (handler->source);
- g_source_unref (handler->source);
- g_free (handler);
-}
-
-static void
-dbus_source_add_watch (DBusSource *dbus_source,
- DBusWatch *watch)
-{
- guint flags;
- GIOCondition condition;
- IOHandler *handler;
- int fd;
-
- if (!dbus_watch_get_enabled (watch))
- return;
-
- g_assert (dbus_watch_get_data (watch) == NULL);
-
- flags = dbus_watch_get_flags (watch);
-
- condition = G_IO_ERR | G_IO_HUP;
- if (flags & DBUS_WATCH_READABLE)
- condition |= G_IO_IN;
- if (flags & DBUS_WATCH_WRITABLE)
- condition |= G_IO_OUT;
-
- handler = g_new0 (IOHandler, 1);
- handler->dbus_source = dbus_source;
- handler->watch = watch;
-
-#if (DBUS_MAJOR_VERSION == 1 && DBUS_MINOR_VERSION == 1 && DBUS_MICRO_VERSION >= 1) || (DBUS_MAJOR_VERSION == 1 && DBUS_MINOR_VERSION > 1) || (DBUS_MAJOR_VERSION > 1)
- fd = dbus_watch_get_unix_fd (watch);
-#else
- fd = dbus_watch_get_fd (watch);
-#endif
-
- handler->source = __g_fd_source_new (fd, condition, NULL);
- g_source_set_callback (handler->source,
- (GSourceFunc) io_handler_dispatch, handler,
- NULL);
- g_source_attach (handler->source, NULL);
-
- dbus_source->ios = g_slist_prepend (dbus_source->ios, handler);
- dbus_watch_set_data (watch, handler,
- (DBusFreeFunction)io_handler_free);
-}
-
-static void
-dbus_source_remove_watch (DBusSource *dbus_source,
- DBusWatch *watch)
-{
- dbus_watch_set_data (watch, NULL, NULL);
-}
-
-static void
-timeout_handler_free (TimeoutHandler *handler)
-{
- DBusSource *dbus_source;
-
- dbus_source = handler->dbus_source;
- dbus_source->timeouts = g_slist_remove (dbus_source->timeouts, handler);
-
- g_source_destroy (handler->source);
- g_source_unref (handler->source);
- g_free (handler);
-}
-
-static gboolean
-timeout_handler_dispatch (gpointer data)
-{
- TimeoutHandler *handler = data;
-
- dbus_timeout_handle (handler->timeout);
-
- return TRUE;
-}
-
-static void
-dbus_source_add_timeout (DBusSource *dbus_source,
- DBusTimeout *timeout)
-{
- TimeoutHandler *handler;
-
- if (!dbus_timeout_get_enabled (timeout))
- return;
-
- g_assert (dbus_timeout_get_data (timeout) == NULL);
-
- handler = g_new0 (TimeoutHandler, 1);
- handler->dbus_source = dbus_source;
- handler->timeout = timeout;
-
- handler->source = g_timeout_source_new (dbus_timeout_get_interval (timeout));
- g_source_set_callback (handler->source,
- timeout_handler_dispatch, handler,
- NULL);
- g_source_attach (handler->source, NULL);
-
- /* handler->source is owned by the context here */
- dbus_source->timeouts = g_slist_prepend (dbus_source->timeouts, handler);
-
- dbus_timeout_set_data (timeout, handler,
- (DBusFreeFunction)timeout_handler_free);
-}
-
-static void
-dbus_source_remove_timeout (DBusSource *source,
- DBusTimeout *timeout)
-{
- dbus_timeout_set_data (timeout, NULL, NULL);
-}
-
-static dbus_bool_t
-add_watch (DBusWatch *watch,
- gpointer data)
-{
- DBusSource *dbus_source = data;
-
- dbus_source_add_watch (dbus_source, watch);
-
- return TRUE;
-}
-
-static void
-remove_watch (DBusWatch *watch,
- gpointer data)
-{
- DBusSource *dbus_source = data;
-
- dbus_source_remove_watch (dbus_source, watch);
-}
-
-static void
-watch_toggled (DBusWatch *watch,
- void *data)
-{
- /* Because we just exit on OOM, enable/disable is
- * no different from add/remove */
- if (dbus_watch_get_enabled (watch))
- add_watch (watch, data);
- else
- remove_watch (watch, data);
-}
-
-static dbus_bool_t
-add_timeout (DBusTimeout *timeout,
- void *data)
-{
- DBusSource *source = data;
-
- if (!dbus_timeout_get_enabled (timeout))
- return TRUE;
-
- dbus_source_add_timeout (source, timeout);
-
- return TRUE;
-}
-
-static void
-remove_timeout (DBusTimeout *timeout,
- void *data)
-{
- DBusSource *source = data;
-
- dbus_source_remove_timeout (source, timeout);
-}
-
-static void
-timeout_toggled (DBusTimeout *timeout,
- void *data)
-{
- /* Because we just exit on OOM, enable/disable is
- * no different from add/remove
- */
- if (dbus_timeout_get_enabled (timeout))
- add_timeout (timeout, data);
- else
- remove_timeout (timeout, data);
-}
-
-static void
-wakeup_main (void *data)
-{
- g_main_context_wakeup (NULL);
-}
-
-static const GSourceFuncs dbus_source_funcs = {
- dbus_source_prepare,
- dbus_source_check,
- dbus_source_dispatch
-};
-
-/* Called when the connection dies or when we're unintegrating from mainloop */
-static void
-dbus_source_free (DBusSource *dbus_source)
-{
- while (dbus_source->ios)
- {
- IOHandler *handler = dbus_source->ios->data;
-
- dbus_watch_set_data (handler->watch, NULL, NULL);
- }
-
- while (dbus_source->timeouts)
- {
- TimeoutHandler *handler = dbus_source->timeouts->data;
-
- dbus_timeout_set_data (handler->timeout, NULL, NULL);
- }
-
- /* Remove from mainloop */
- g_source_destroy ((GSource *)dbus_source);
-
- g_source_unref ((GSource *)dbus_source);
-}
-
-void
-_g_dbus_connection_integrate_with_main (DBusConnection *connection)
-{
- DBusSource *dbus_source;
-
- g_once (&once_init_main_integration, main_integration_init, NULL);
-
- g_assert (connection != NULL);
-
- _g_dbus_connection_remove_from_main (connection);
-
- dbus_source = (DBusSource *)
- g_source_new ((GSourceFuncs*)&dbus_source_funcs,
- sizeof (DBusSource));
-
- dbus_source->connection = connection;
-
- if (!dbus_connection_set_watch_functions (connection,
- add_watch,
- remove_watch,
- watch_toggled,
- dbus_source, NULL))
- _g_dbus_oom ();
-
- if (!dbus_connection_set_timeout_functions (connection,
- add_timeout,
- remove_timeout,
- timeout_toggled,
- dbus_source, NULL))
- _g_dbus_oom ();
-
- dbus_connection_set_wakeup_main_function (connection,
- wakeup_main,
- dbus_source, NULL);
-
- /* Owned by both connection and mainloop (until destroy) */
- g_source_attach ((GSource *)dbus_source, NULL);
-
- if (!dbus_connection_set_data (connection,
- main_integration_data_slot,
- dbus_source, (DBusFreeFunction)dbus_source_free))
- _g_dbus_oom ();
-}
-
-void
-_g_dbus_connection_remove_from_main (DBusConnection *connection)
-{
- g_once (&once_init_main_integration, main_integration_init, NULL);
-
- if (!dbus_connection_set_data (connection,
- main_integration_data_slot,
- NULL, NULL))
- _g_dbus_oom ();
-}
-
-void
-_g_dbus_message_iter_copy (DBusMessageIter *dest,
- DBusMessageIter *source)
-{
- int type, element_type;
-
- while (dbus_message_iter_get_arg_type (source) != DBUS_TYPE_INVALID)
- {
- type = dbus_message_iter_get_arg_type (source);
-
- if (dbus_type_is_basic (type))
- {
- dbus_uint64_t value;
- dbus_message_iter_get_basic (source, &value);
- dbus_message_iter_append_basic (dest, type, &value);
- }
- else if (type == DBUS_TYPE_ARRAY)
- {
- DBusMessageIter source_array, dest_array;
- void *value;
- int n_elements;
- char buf[2];
-
- element_type = dbus_message_iter_get_element_type (source);
- if (dbus_type_is_fixed (element_type))
- {
- buf[0] = element_type;
- buf[1] = '\0';
-
- dbus_message_iter_recurse (source, &source_array);
- dbus_message_iter_get_fixed_array (&source_array, &value, &n_elements);
-
- if (!dbus_message_iter_open_container (dest, DBUS_TYPE_ARRAY,
- buf, &dest_array))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_fixed_array (&dest_array,
- element_type,
- &value, n_elements))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_close_container (dest, &dest_array))
- _g_dbus_oom ();
- }
- else
- g_error ("Unsupported array type %c in _g_dbus_message_iter_copy", element_type);
- }
- else
- g_error ("Unsupported type %c in _g_dbus_message_iter_copy", type);
-
- dbus_message_iter_next (source);
- }
-
-}
-
-typedef struct {
- GAsyncDBusCallback callback;
- gpointer user_data;
- GError *io_error;
-
-
- /* protected by async_call lock: */
- gboolean ran; /* the pending_call reply handler ran */
- gboolean idle; /* we queued an idle */
-
- /* only used for idle */
- DBusPendingCall *pending;
-} AsyncDBusCallData;
-
-/* Lock to protect the data for working around racecondition
- between send_with_reply and pending_set_notify */
-G_LOCK_DEFINE_STATIC(async_call);
-
-static void
-handle_async_reply (DBusPendingCall *pending,
- AsyncDBusCallData *data)
-{
- DBusMessage *reply;
- GError *error;
-
- reply = dbus_pending_call_steal_reply (pending);
-
- error = NULL;
- if (_g_error_from_message (reply, &error))
- {
- if (data->callback)
- data->callback (NULL, error, data->user_data);
- g_error_free (error);
- }
- else
- {
- if (data->callback)
- data->callback (reply, NULL, data->user_data);
- }
-
- dbus_message_unref (reply);
-}
-
-static void
-async_call_reply (DBusPendingCall *pending,
- void *_data)
-{
- AsyncDBusCallData *data = _data;
-
- G_LOCK (async_call);
- if (data->idle)
- return;
- data->ran = TRUE;
- G_UNLOCK (async_call);
-
- handle_async_reply (pending, data);
-}
-
-static gboolean
-idle_async_callback (void *_data)
-{
- AsyncDBusCallData *data = _data;
- handle_async_reply (data->pending, data);
- dbus_pending_call_unref (data->pending);
- return FALSE;
-}
-
-static gboolean
-async_call_error_at_idle (gpointer _data)
-{
- AsyncDBusCallData *data = _data;
-
- if (data->callback)
- data->callback (NULL, data->io_error, data->user_data);
-
- g_error_free (data->io_error);
- g_free (data);
-
- return FALSE;
-}
-
-void
-_g_dbus_connection_call_async (DBusConnection *connection,
- DBusMessage *message,
- int timeout_msecs,
- GAsyncDBusCallback callback,
- gpointer user_data)
-{
- AsyncDBusCallData *data;
- DBusPendingCall *pending_call;
- DBusError derror;
-
- data = g_new0 (AsyncDBusCallData, 1);
- data->callback = callback;
- data->user_data = user_data;
-
- if (connection == NULL)
- {
- dbus_error_init (&derror);
- connection = dbus_bus_get (DBUS_BUS_SESSION, &derror);
- if (connection == NULL)
- {
- g_set_error_literal (&data->io_error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Can't open dbus connection");
- g_idle_add (async_call_error_at_idle, data);
- dbus_error_free (&derror);
- return;
- }
- }
-
- if (!dbus_connection_send_with_reply (connection, message, &pending_call, timeout_msecs))
- _g_dbus_oom ();
-
- if (pending_call == NULL)
- {
- g_set_error (&data->io_error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Error while getting peer-to-peer dbus connection: %s",
- "Connection is closed");
- g_idle_add (async_call_error_at_idle, data);
- return;
- }
-
- if (!dbus_pending_call_set_notify (pending_call,
- async_call_reply,
- data, g_free))
- _g_dbus_oom ();
-
-
- /* All this is required to work around a race condition between
- * send_with_reply and pending_call_set_notify :/
- */
- G_LOCK (async_call);
-
- if (dbus_pending_call_get_completed (pending_call) &&
- !data->ran)
- {
- data->idle = TRUE;
- data->pending = dbus_pending_call_ref (pending_call);
- g_idle_add (idle_async_callback, data);
- }
-
- G_UNLOCK (async_call);
-
-
- dbus_pending_call_unref (pending_call);
-}
diff --git a/common/gdbusutils.h b/common/gdbusutils.h
deleted file mode 100644
index 00ef566d..00000000
--- a/common/gdbusutils.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_DBUS_UTILS_H__
-#define __G_DBUS_UTILS_H__
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-typedef gboolean (*GFDSourceFunc) (gpointer data,
- GIOCondition condition,
- int fd);
-typedef void (*GAsyncDBusCallback) (DBusMessage *reply,
- GError *error,
- gpointer user_data);
-
-/* Only used internally, never on wire */
-#define G_DBUS_TYPE_CSTRING 1024
-
-GList * _g_dbus_bus_list_names_with_prefix (DBusConnection *connection,
- const char *prefix,
- DBusError *error);
-void _g_dbus_message_iter_append_cstring (DBusMessageIter *iter,
- const char *str);
-void _g_dbus_message_iter_append_args_valist (DBusMessageIter *iter,
- int first_arg_type,
- va_list var_args);
-void _g_dbus_message_iter_append_args (DBusMessageIter *iter,
- int first_arg_type,
- ...);
-void _g_dbus_message_append_args_valist (DBusMessage *message,
- int first_arg_type,
- va_list var_args);
-void _g_dbus_message_append_args (DBusMessage *message,
- int first_arg_type,
- ...);
-dbus_bool_t _g_dbus_message_iter_get_args_valist (DBusMessageIter *iter,
- DBusError *error,
- int first_arg_type,
- va_list var_args);
-dbus_bool_t _g_dbus_message_iter_get_args (DBusMessageIter *iter,
- DBusError *error,
- int first_arg_type,
- ...);
-void _g_error_from_dbus (DBusError *derror,
- GError **error);
-gboolean _g_error_from_message (DBusMessage *message,
- GError **error);
-DBusMessage *_dbus_message_new_from_gerror (DBusMessage *message,
- GError *error);
-DBusMessage *_dbus_message_new_gerror (DBusMessage *message,
- GQuark domain,
- gint code,
- const gchar *format,
- ...);
-char * _g_dbus_unescape_bus_name (const char *escaped,
- const char *end);
-void _g_dbus_append_escaped_bus_name (GString *string,
- gboolean at_start,
- const char *unescaped);
-void _g_dbus_connection_integrate_with_main (DBusConnection *connection);
-void _g_dbus_connection_remove_from_main (DBusConnection *connection);
-GSource * __g_fd_source_new (int fd,
- gushort events,
- GCancellable *cancellable);
-void _g_dbus_message_iter_copy (DBusMessageIter *dest,
- DBusMessageIter *source);
-void _g_dbus_oom (void) G_GNUC_NORETURN;
-void _g_dbus_connection_call_async (DBusConnection *connection,
- DBusMessage *message,
- int timeout_msecs,
- GAsyncDBusCallback callback,
- gpointer user_data);
-
-G_END_DECLS
-
-
-#endif /* __G_DBUS_UTILS_H__ */
diff --git a/common/gmountoperationdbus.c b/common/gmountoperationdbus.c
deleted file mode 100644
index 1027b3a9..00000000
--- a/common/gmountoperationdbus.c
+++ /dev/null
@@ -1,324 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <dbus/dbus.h>
-
-#define I_(string) g_intern_static_string (string)
-
-#include <gio/gio.h>
-#include "gmountoperationdbus.h"
-#include "gvfsdaemonprotocol.h"
-#include "gdbusutils.h"
-#include <glib/gi18n-lib.h>
-
-typedef struct
-{
- GMountOperation *op;
- char *obj_path;
- char *dbus_id;
- DBusConnection *connection;
-} GMountOperationDBus;
-
-static DBusHandlerResult mount_op_message_function (DBusConnection *connection,
- DBusMessage *message,
- void *user_data);
-static void mount_op_unregister_function (DBusConnection *connection,
- void *user_data);
-static void mount_op_ask_password (GMountOperationDBus *op_dbus,
- DBusMessage *message);
-static void mount_op_ask_question (GMountOperationDBus *op_dbus,
- DBusMessage *message);
-
-static void
-g_mount_operation_dbus_free (GMountOperationDBus *op_dbus)
-{
- if (op_dbus->connection)
- {
- dbus_connection_unregister_object_path (op_dbus->connection,
- op_dbus->obj_path);
- dbus_connection_unref (op_dbus->connection);
- }
- g_free (op_dbus->dbus_id);
- g_free (op_dbus->obj_path);
- g_free (op_dbus);
-}
-
-GMountSource *
-g_mount_operation_dbus_wrap (GMountOperation *op,
- DBusConnection *connection)
-{
- GMountOperationDBus *op_dbus;
- static int mount_id = 0;
- DBusObjectPathVTable mount_vtable = {
- mount_op_unregister_function,
- mount_op_message_function
- };
-
- if (op == NULL)
- return g_mount_source_new_dummy ();
-
- op_dbus = g_new0 (GMountOperationDBus, 1);
-
- op_dbus->op = op;
- op_dbus->connection = dbus_connection_ref (connection);
- op_dbus->obj_path = g_strdup_printf ("/org/gtk/gvfs/mountop/%d", mount_id++);
- if (op_dbus->connection)
- {
- op_dbus->dbus_id = g_strdup (dbus_bus_get_unique_name (op_dbus->connection));
- if (!dbus_connection_register_object_path (op_dbus->connection,
- op_dbus->obj_path,
- &mount_vtable,
- op_dbus))
- _g_dbus_oom ();
- }
-
- g_object_set_data_full (G_OBJECT (op), "dbus-op",
- op_dbus, (GDestroyNotify)g_mount_operation_dbus_free);
-
- return g_mount_source_new (op_dbus->dbus_id, op_dbus->obj_path);
-}
-
-/**
- * Called when a #DBusObjectPathVTable is unregistered (or its connection is freed).
- * Found in #DBusObjectPathVTable.
- */
-static void
-mount_op_unregister_function (DBusConnection *connection,
- void *user_data)
-{
-}
-
-/**
- * Called when a message is sent to a registered object path. Found in
- * #DBusObjectPathVTable which is registered with dbus_connection_register_object_path()
- * or dbus_connection_register_fallback().
- */
-static DBusHandlerResult
-mount_op_message_function (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
-{
- GMountOperationDBus *op_dbus = user_data;
-
- if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_OPERATION_INTERFACE,
- G_VFS_DBUS_MOUNT_OPERATION_OP_ASK_PASSWORD))
- mount_op_ask_password (op_dbus, message);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_OPERATION_INTERFACE,
- G_VFS_DBUS_MOUNT_OPERATION_OP_ASK_QUESTION))
- mount_op_ask_question (op_dbus, message);
- else
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static void
-mount_op_send_reply (GMountOperationDBus *op_dbus,
- DBusMessage *reply)
-{
- if (!dbus_connection_send (op_dbus->connection, reply, NULL))
- _g_dbus_oom ();
-
- g_signal_handlers_disconnect_matched (op_dbus->op,
- G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_DATA,
- g_signal_lookup ("reply", G_TYPE_MOUNT_OPERATION),
- 0,
- NULL,
- NULL,
- reply);
- dbus_message_unref (reply);
-}
-
-static void
-ask_password_reply (GMountOperation *op,
- GMountOperationResult result,
- gpointer data)
-{
- DBusMessage *reply = data;
- const char *username, *password, *domain;
- dbus_bool_t anonymous;
- guint32 password_save;
- dbus_bool_t handled, abort_dbus;
- GMountOperationDBus *op_dbus;
-
- op_dbus = g_object_get_data (G_OBJECT (op), "dbus-op");
-
- handled = (result != G_MOUNT_OPERATION_UNHANDLED);
- abort_dbus = (result == G_MOUNT_OPERATION_ABORTED);
-
- password = g_mount_operation_get_password (op);
- if (password == NULL)
- password = "";
- username = g_mount_operation_get_username (op);
- if (username == NULL)
- username = "";
- domain = g_mount_operation_get_domain (op);
- if (domain == NULL)
- domain = "";
- anonymous = g_mount_operation_get_anonymous (op);
- password_save = g_mount_operation_get_password_save (op);
-
- _g_dbus_message_append_args (reply,
- DBUS_TYPE_BOOLEAN, &handled,
- DBUS_TYPE_BOOLEAN, &abort_dbus,
- DBUS_TYPE_STRING, &password,
- DBUS_TYPE_STRING, &username,
- DBUS_TYPE_STRING, &domain,
- DBUS_TYPE_BOOLEAN, &anonymous,
- DBUS_TYPE_UINT32, &password_save,
- 0);
-
- mount_op_send_reply (op_dbus, reply);
-}
-
-static void
-mount_op_ask_password (GMountOperationDBus *op_dbus,
- DBusMessage *message)
-{
- const char *message_string, *default_user, *default_domain;
- guint32 flags;
- DBusMessageIter iter;
- DBusMessage *reply;
- DBusError error;
-
- reply = NULL;
-
- dbus_message_iter_init (message, &iter);
-
- dbus_error_init (&error);
- if (!_g_dbus_message_iter_get_args (&iter,
- &error,
- DBUS_TYPE_STRING, &message_string,
- DBUS_TYPE_STRING, &default_user,
- DBUS_TYPE_STRING, &default_domain,
- DBUS_TYPE_UINT32, &flags,
- 0))
- {
- reply = dbus_message_new_error (message, error.name, error.message);
- if (reply == NULL)
- _g_dbus_oom ();
- if (!dbus_connection_send (op_dbus->connection, reply, NULL))
- _g_dbus_oom ();
- dbus_message_unref (reply);
- dbus_error_free (&error);
- return;
- }
-
- reply = dbus_message_new_method_return (message);
- if (reply == NULL)
- _g_dbus_oom ();
-
- g_signal_connect (op_dbus->op, "reply", (GCallback)ask_password_reply, reply);
-
- g_signal_emit_by_name (op_dbus->op, "ask_password",
- message_string,
- default_user,
- default_domain,
- flags);
-}
-
-static void
-ask_question_reply (GMountOperation *op,
- GMountOperationResult result,
- gpointer data)
-{
- DBusMessage *reply = data;
- guint32 choice;
- dbus_bool_t handled, abort_dbus;
- GMountOperationDBus *op_dbus;
-
- op_dbus = g_object_get_data (G_OBJECT (op), "dbus-op");
-
- handled = (result != G_MOUNT_OPERATION_UNHANDLED);
- abort_dbus = (result == G_MOUNT_OPERATION_ABORTED);
-
- choice = g_mount_operation_get_choice (op);
-
- _g_dbus_message_append_args (reply,
- DBUS_TYPE_BOOLEAN, &handled,
- DBUS_TYPE_BOOLEAN, &abort_dbus,
- DBUS_TYPE_UINT32, &choice,
- 0);
-
- mount_op_send_reply (op_dbus, reply);
-}
-
-static void
-mount_op_ask_question (GMountOperationDBus *op_dbus,
- DBusMessage *message)
-{
- const char *message_string;
- char **choices;
- int num_choices;
- dbus_bool_t handled = FALSE;
- DBusMessage *reply;
- DBusError error;
- gboolean res;
- DBusMessageIter iter;
-
- reply = NULL;
-
- dbus_message_iter_init (message, &iter);
- dbus_error_init (&error);
- if (!_g_dbus_message_iter_get_args (&iter,
- &error,
- DBUS_TYPE_STRING, &message_string,
- DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
- &choices, &num_choices,
- 0))
- {
- reply = dbus_message_new_error (message, error.name, error.message);
- if (reply == NULL)
- _g_dbus_oom ();
- if (!dbus_connection_send (op_dbus->connection, reply, NULL))
- _g_dbus_oom ();
- dbus_message_unref (reply);
- dbus_error_free (&error);
- return;
- }
-
- reply = dbus_message_new_method_return (message);
- if (reply == NULL)
- _g_dbus_oom ();
-
- g_signal_connect (op_dbus->op, "reply", (GCallback)ask_question_reply, reply);
-
- g_signal_emit_by_name (op_dbus->op, "ask_question",
- message_string,
- choices,
- &res);
- if (!res)
- {
- _g_dbus_message_append_args (reply,
- DBUS_TYPE_BOOLEAN, &handled,
- 0);
- mount_op_send_reply (op_dbus, reply);
- }
-
- dbus_free_string_array (choices);
-}
diff --git a/common/gmountoperationdbus.h b/common/gmountoperationdbus.h
deleted file mode 100644
index 26ee4013..00000000
--- a/common/gmountoperationdbus.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_MOUNT_OPERATION_DBUS_H__
-#define __G_MOUNT_OPERATION_DBUS_H__
-
-#include <sys/stat.h>
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <gmountspec.h>
-#include <gmountsource.h>
-
-G_BEGIN_DECLS
-
-GMountSource *g_mount_operation_dbus_wrap (GMountOperation *op,
- DBusConnection *connection);
-
-G_END_DECLS
-
-#endif /* __G_MOUNT_OPERATION_DBUS_H__ */
diff --git a/common/gmountsource.c b/common/gmountsource.c
deleted file mode 100644
index bbf6d73f..00000000
--- a/common/gmountsource.c
+++ /dev/null
@@ -1,741 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <gmountsource.h>
-#include <gdbusutils.h>
-#include <gio/gio.h>
-#include <gvfsdaemonprotocol.h>
-
-struct _GMountSource
-{
- GObject parent_instance;
-
- char *dbus_id;
- char *obj_path;
-};
-
-/* We use this hack to avoid problems when this code
- is shared in both the daemon and the client */
-static GType _g_mount_source_get_type (void) G_GNUC_CONST;
-
-#define g_mount_source_get_type _g_mount_source_get_type
-G_DEFINE_TYPE (GMountSource, g_mount_source, G_TYPE_OBJECT)
-#undef g_mount_source_get_type
-
-GType
-g_mount_source_get_type (void)
-{
- static volatile gsize type_volatile = 0;
-
- if (g_once_init_enter (&type_volatile))
- {
- GType type;
-
- type = g_type_from_name ("GMountSource");
- if (type == 0)
- type = _g_mount_source_get_type ();
-
- g_once_init_leave (&type_volatile, type);
- }
-
- return type_volatile;
-}
-
-static void
-g_mount_source_finalize (GObject *object)
-{
- GMountSource *source;
-
- source = G_MOUNT_SOURCE (object);
-
- g_free (source->dbus_id);
- g_free (source->obj_path);
-
- if (G_OBJECT_CLASS (g_mount_source_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_mount_source_parent_class)->finalize) (object);
-}
-
-static void
-g_mount_source_class_init (GMountSourceClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_mount_source_finalize;
-}
-
-static void
-g_mount_source_init (GMountSource *mount_source)
-{
-}
-
-GMountSource *
-g_mount_source_new (const char *dbus_id,
- const char *obj_path)
-{
- GMountSource *source;
-
- source = g_object_new (G_TYPE_MOUNT_SOURCE, NULL);
-
- source->dbus_id = g_strdup (dbus_id);
- source->obj_path = g_strdup (obj_path);
-
- return source;
-}
-
-GMountSource *
-g_mount_source_new_dummy (void)
-{
- GMountSource *source;
-
- source = g_object_new (G_TYPE_MOUNT_SOURCE, NULL);
-
- source->dbus_id = g_strdup ("");
- source->obj_path = g_strdup ("/");
-
- return source;
-}
-
-
-void
-g_mount_source_to_dbus (GMountSource *source,
- DBusMessage *message)
-{
- g_assert (source->dbus_id != NULL);
- g_assert (source->obj_path != NULL);
-
- if (!dbus_message_append_args (message,
- DBUS_TYPE_STRING, &source->dbus_id,
- DBUS_TYPE_OBJECT_PATH, &source->obj_path,
- 0))
- _g_dbus_oom ();
-
-}
-
-const char *
-g_mount_source_get_dbus_id (GMountSource *mount_source)
-{
- return mount_source->dbus_id;
-}
-
-const char *
-g_mount_source_get_obj_path (GMountSource *mount_source)
-{
- return mount_source->obj_path;
-}
-
-typedef struct AskPasswordData AskPasswordData;
-
-struct AskPasswordData {
-
- /* results: */
- gboolean aborted;
- char *password;
- char *username;
- char *domain;
- GPasswordSave password_save;
- gboolean anonymous;
-};
-
-typedef struct AskSyncData AskSyncData;
-
-struct AskSyncData {
-
- /* For sync calls */
- GMutex *mutex;
- GCond *cond;
-
- /* results: */
- GAsyncResult *result;
-};
-
-static void
-ask_password_data_free (gpointer _data)
-{
- AskPasswordData *data = (AskPasswordData *) _data;
- g_free (data->password);
- g_free (data->username);
- g_free (data->domain);
- g_free (data);
-}
-
-/* the callback from dbus -> main thread */
-static void
-ask_password_reply (DBusMessage *reply,
- GError *error,
- gpointer _data)
-{
- GSimpleAsyncResult *result;
- AskPasswordData *data;
- dbus_bool_t handled, aborted, anonymous;
- guint32 password_save;
- const char *password, *username, *domain;
- DBusMessageIter iter;
-
- result = G_SIMPLE_ASYNC_RESULT (_data);
- handled = TRUE;
-
- data = g_new0 (AskPasswordData, 1);
- g_simple_async_result_set_op_res_gpointer (result, data, ask_password_data_free);
-
- if (reply == NULL)
- {
- data->aborted = TRUE;
- }
- else
- {
- dbus_message_iter_init (reply, &iter);
- if (!_g_dbus_message_iter_get_args (&iter, NULL,
- DBUS_TYPE_BOOLEAN, &handled,
- DBUS_TYPE_BOOLEAN, &aborted,
- DBUS_TYPE_STRING, &password,
- DBUS_TYPE_STRING, &username,
- DBUS_TYPE_STRING, &domain,
- DBUS_TYPE_BOOLEAN, &anonymous,
- DBUS_TYPE_UINT32, &password_save,
- 0))
- data->aborted = TRUE;
- else
- {
- data->aborted = aborted;
-
- if (!anonymous)
- {
- data->password = g_strdup (password);
- data->username = *username == 0 ? NULL : g_strdup (username);
- data->domain = *domain == 0 ? NULL : g_strdup (domain);
- }
- data->password_save = (GPasswordSave)password_save;
- data->anonymous = anonymous;
-
- /* TODO: handle more args */
- }
- }
-
- if (handled == FALSE)
- {
- g_simple_async_result_set_error (result, G_IO_ERROR, G_IO_ERROR_FAILED, "Internal Error");
- }
-
- g_simple_async_result_complete (result);
-}
-
-void
-g_mount_source_ask_password_async (GMountSource *source,
- const char *message_string,
- const char *default_user,
- const char *default_domain,
- GAskPasswordFlags flags,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *result;
- DBusMessage *message;
- guint32 flags_as_int;
-
-
- /* If no dbus id specified, reply that we weren't handled */
- if (source->dbus_id[0] == 0)
- {
- g_simple_async_report_error_in_idle (G_OBJECT (source),
- callback,
- user_data,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- "Internal Error");
- return;
- }
-
- if (message_string == NULL)
- message_string = "";
- if (default_user == NULL)
- default_user = "";
- if (default_domain == NULL)
- default_domain = "";
-
- flags_as_int = flags;
-
- message = dbus_message_new_method_call (source->dbus_id,
- source->obj_path,
- G_VFS_DBUS_MOUNT_OPERATION_INTERFACE,
- G_VFS_DBUS_MOUNT_OPERATION_OP_ASK_PASSWORD);
-
- _g_dbus_message_append_args (message,
- DBUS_TYPE_STRING, &message_string,
- DBUS_TYPE_STRING, &default_user,
- DBUS_TYPE_STRING, &default_domain,
- DBUS_TYPE_UINT32, &flags_as_int,
- 0);
-
- result = g_simple_async_result_new (G_OBJECT (source), callback, user_data,
- g_mount_source_ask_password_async);
- /* 30 minute timeout */
- _g_dbus_connection_call_async (NULL, message, 1000 * 60 * 30,
- ask_password_reply, result);
- dbus_message_unref (message);
-
-}
-
-/**
- * g_mount_source_ask_password_finish:
- * @source: the source to query
- * @result: the async result
- * @aborted: set to %TRUE if the password dialog was aborted by the user
- * @password_out: the to the password set by the user or to %NULL if none
- * @user_out: set to the username set by the user or to %NULL if none
- * @domain_out: set to the domain set by the user or to %NULL if none
- * @anonymous_out: set to %TRUE if the user selected anonymous login. This
- * should only happen if G_ASK_PASSWORD_ANONYMOUS_SUPPORTED
- * was supplied whe querying the password.
- * @password_save_out: set to the save flags to use when saving the password
- * in the keyring.
- *
- * Requests the reply parameters from a g_mount_source_ask_password_async()
- * request. All out parameters can be set to %NULL to ignore them.
- * <note><para>Please be aware that out parameters other than the password
- * are set to %NULL if the user don't specify them so make sure to
- * check them.</para></note>
- *
- * Returns: %FALSE if the async reply contained an error.
- **/
-gboolean
-g_mount_source_ask_password_finish (GMountSource *source,
- GAsyncResult *result,
- gboolean *aborted,
- char **password_out,
- char **user_out,
- char **domain_out,
- gboolean *anonymous_out,
- GPasswordSave *password_save_out)
-{
- AskPasswordData *data, def = { TRUE, };
- GSimpleAsyncResult *simple;
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
- if (g_simple_async_result_propagate_error (simple, NULL))
- data = &def;
- else
- data = (AskPasswordData *) g_simple_async_result_get_op_res_gpointer (simple);
-
- if (aborted)
- *aborted = data->aborted;
-
- if (password_out)
- {
- *password_out = data->password;
- data->password = NULL;
- }
-
- if (user_out)
- {
- *user_out = data->username;
- data->username = NULL;
- }
-
- if (domain_out)
- {
- *domain_out = data->domain;
- data->domain = NULL;
- }
-
- if (anonymous_out)
- *anonymous_out = data->anonymous;
-
- if (password_save_out)
- *password_save_out = data->password_save;
-
- return data != &def;
-}
-
-
-static void
-ask_reply_sync (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- AskSyncData *data;
-
- data = (AskSyncData *) user_data;
-
- data->result = g_object_ref (res);
-
- /* Wake up sync call thread */
- g_mutex_lock (data->mutex);
- g_cond_signal (data->cond);
- g_mutex_unlock (data->mutex);
-}
-
-gboolean
-g_mount_source_ask_password (GMountSource *source,
- const char *message_string,
- const char *default_user,
- const char *default_domain,
- GAskPasswordFlags flags,
- gboolean *aborted_out,
- char **password_out,
- char **user_out,
- char **domain_out,
- gboolean *anonymous_out,
- GPasswordSave *password_save_out)
-{
- gboolean handled;
- AskSyncData data = {NULL};
-
- data.mutex = g_mutex_new ();
- data.cond = g_cond_new ();
-
- g_mutex_lock (data.mutex);
-
-
- g_mount_source_ask_password_async (source,
- message_string,
- default_user,
- default_domain,
- flags,
- ask_reply_sync,
- &data);
-
- g_cond_wait(data.cond, data.mutex);
- g_mutex_unlock (data.mutex);
-
- g_cond_free (data.cond);
- g_mutex_free (data.mutex);
-
-
- handled = g_mount_source_ask_password_finish (source,
- data.result,
- aborted_out,
- password_out,
- user_out,
- domain_out,
- anonymous_out,
- password_save_out);
- g_object_unref (data.result);
-
- return handled;
-}
-
-static void
-op_ask_password_reply (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GMountOperationResult result;
- GMountOperation *op;
- GMountSource *source;
- gboolean handled, aborted;
- char *username;
- char *password;
- char *domain;
- GPasswordSave password_save;
-
- source = G_MOUNT_SOURCE (source_object);
- op = G_MOUNT_OPERATION (user_data);
- username = NULL;
- password = NULL;
- domain = NULL;
-
- handled = g_mount_source_ask_password_finish (source,
- res,
- &aborted,
- &username,
- &password,
- &domain,
- NULL,
- &password_save);
-
- if (!handled)
- result = G_MOUNT_OPERATION_UNHANDLED;
- else if (aborted)
- result = G_MOUNT_OPERATION_ABORTED;
- else
- {
- result = G_MOUNT_OPERATION_HANDLED;
-
- if (password)
- g_mount_operation_set_password (op, password);
- if (username)
- g_mount_operation_set_username (op, username);
- if (domain)
- g_mount_operation_set_domain (op, domain);
- g_mount_operation_set_password_save (op, password_save);
- }
-
- g_mount_operation_reply (op, result);
- g_object_unref (op);
-}
-
-static gboolean
-op_ask_password (GMountOperation *op,
- const char *message,
- const char *default_user,
- const char *default_domain,
- GAskPasswordFlags flags,
- GMountSource *mount_source)
-{
- g_mount_source_ask_password_async (mount_source,
- message,
- default_user,
- default_domain,
- flags,
- op_ask_password_reply,
- g_object_ref (op));
- return TRUE;
-}
-
-typedef struct AskQuestionData AskQuestionData;
-
-struct AskQuestionData {
-
- /* results: */
- gboolean aborted;
- guint32 choice;
-};
-
-/* the callback from dbus -> main thread */
-static void
-ask_question_reply (DBusMessage *reply,
- GError *error,
- gpointer _data)
-{
- GSimpleAsyncResult *result;
- AskQuestionData *data;
- dbus_bool_t handled, aborted;
- guint32 choice;
- DBusMessageIter iter;
-
- result = G_SIMPLE_ASYNC_RESULT (_data);
- handled = TRUE;
-
- data = g_new0 (AskQuestionData, 1);
- g_simple_async_result_set_op_res_gpointer (result, data, g_free);
-
- if (reply == NULL)
- {
- data->aborted = TRUE;
- }
- else
- {
- dbus_message_iter_init (reply, &iter);
- if (!_g_dbus_message_iter_get_args (&iter, NULL,
- DBUS_TYPE_BOOLEAN, &handled,
- DBUS_TYPE_BOOLEAN, &aborted,
- DBUS_TYPE_UINT32, &choice,
- 0))
- data->aborted = TRUE;
- else
- {
- data->aborted = aborted;
- data->choice = choice;
- }
- }
-
- if (handled == FALSE)
- {
- g_simple_async_result_set_error (result, G_IO_ERROR, G_IO_ERROR_FAILED, "Internal Error");
- }
-
- g_simple_async_result_complete (result);
-}
-
-gboolean
-g_mount_source_ask_question (GMountSource *source,
- const char *message,
- const char **choices,
- gint n_choices,
- gboolean *aborted_out,
- gint *choice_out)
-{
- gint choice;
- gboolean handled, aborted;
- AskSyncData data = {NULL};
-
- data.mutex = g_mutex_new ();
- data.cond = g_cond_new ();
-
- g_mutex_lock (data.mutex);
-
- g_mount_source_ask_question_async (source,
- message,
- choices,
- n_choices,
- ask_reply_sync,
- &data);
-
- g_cond_wait(data.cond, data.mutex);
- g_mutex_unlock (data.mutex);
-
- g_cond_free (data.cond);
- g_mutex_free (data.mutex);
-
- handled = g_mount_source_ask_question_finish (source,
- data.result,
- &aborted,
- &choice);
-
- g_object_unref (data.result);
-
- if (aborted_out)
- *aborted_out = aborted;
-
- if (choice_out)
- *choice_out = choice;
-
- return handled;
-}
-
-void
-g_mount_source_ask_question_async (GMountSource *source,
- const char *message_string,
- const char **choices,
- gint n_choices,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *result;
- DBusMessage *message;
-
- /* If no dbus id specified, reply that we weren't handled */
- if (source->dbus_id[0] == 0)
- {
- g_simple_async_report_error_in_idle (G_OBJECT (source),
- callback,
- user_data,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- "Internal Error");
- return;
- }
-
- if (message_string == NULL)
- message_string = "";
-
- message = dbus_message_new_method_call (source->dbus_id,
- source->obj_path,
- G_VFS_DBUS_MOUNT_OPERATION_INTERFACE,
- G_VFS_DBUS_MOUNT_OPERATION_OP_ASK_QUESTION);
-
- _g_dbus_message_append_args (message,
- DBUS_TYPE_STRING, &message_string,
- DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
- choices, n_choices,
- 0);
-
- result = g_simple_async_result_new (G_OBJECT (source), callback, user_data,
- g_mount_source_ask_question_async);
- /* 30 minute timeout */
- _g_dbus_connection_call_async (NULL, message, 1000 * 60 * 30,
- ask_question_reply, result);
- dbus_message_unref (message);
-
-}
-
-gboolean
-g_mount_source_ask_question_finish (GMountSource *source,
- GAsyncResult *result,
- gboolean *aborted,
- gint *choice_out)
-{
- AskQuestionData *data, def= { FALSE, };
- GSimpleAsyncResult *simple;
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
- if (g_simple_async_result_propagate_error (simple, NULL))
- data = &def;
- else
- data = (AskQuestionData *) g_simple_async_result_get_op_res_gpointer (simple);
-
- if (aborted)
- *aborted = data->aborted;
-
- if (choice_out)
- *choice_out = data->choice;
-
- return data != &def;
-}
-
-static void
-op_ask_question_reply (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GMountOperationResult result;
- GMountOperation *op;
- GMountSource *source;
- gboolean handled, aborted;
- gint choice;
-
- source = G_MOUNT_SOURCE (source_object);
- op = G_MOUNT_OPERATION (user_data);
-
- handled = g_mount_source_ask_question_finish (source,
- res,
- &aborted,
- &choice);
-
- if (!handled)
- result = G_MOUNT_OPERATION_UNHANDLED;
- else if (aborted)
- result = G_MOUNT_OPERATION_ABORTED;
- else
- {
- result = G_MOUNT_OPERATION_HANDLED;
- g_mount_operation_set_choice (op, choice);
- }
-
- g_mount_operation_reply (op, result);
- g_object_unref (op);
-}
-
-static gboolean
-op_ask_question (GMountOperation *op,
- const char *message,
- const char **choices,
- gint n_choices,
- GMountSource *mount_source)
-{
- g_mount_source_ask_question_async (mount_source,
- message,
- choices,
- n_choices,
- op_ask_question_reply,
- g_object_ref (op));
- return TRUE;
-}
-
-GMountOperation *
-g_mount_source_get_operation (GMountSource *mount_source)
-{
- GMountOperation *op;
-
- op = g_mount_operation_new ();
- g_object_set_data_full (G_OBJECT (op), "source",
- g_object_ref (mount_source),
- g_object_unref);
-
-
- g_signal_connect (op, "ask_password", (GCallback)op_ask_password, mount_source);
- g_signal_connect (op, "ask_question", (GCallback)op_ask_question, mount_source);
-
- return op;
-}
diff --git a/common/gmountsource.h b/common/gmountsource.h
deleted file mode 100644
index e4298357..00000000
--- a/common/gmountsource.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_MOUNT_SOURCE_H__
-#define __G_MOUNT_SOURCE_H__
-
-#include <glib-object.h>
-#include <gmountspec.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_MOUNT_SOURCE (g_mount_source_get_type ())
-#define G_MOUNT_SOURCE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_MOUNT_SOURCE, GMountSource))
-#define G_MOUNT_SOURCE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_MOUNT_SOURCE, GMountSourceClass))
-#define G_IS_MOUNT_SOURCE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_MOUNT_SOURCE))
-#define G_IS_MOUNT_SOURCE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_MOUNT_SOURCE))
-#define G_MOUNT_SOURCE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_MOUNT_SOURCE, GMountSourceClass))
-
-typedef struct _GMountSource GMountSource;
-typedef struct _GMountSourceClass GMountSourceClass;
-
-struct _GMountSourceClass
-{
- GObjectClass parent_class;
-};
-
-typedef void (*RequestMountSpecCallback) (GMountSource *source,
- GMountSpec *mount_spec,
- GError *error,
- gpointer data);
-
-GType g_mount_source_get_type (void) G_GNUC_CONST;
-
-GMountSource *g_mount_source_new (const char *dbus_id,
- const char *obj_path);
-GMountSource *g_mount_source_new_dummy (void);
-void g_mount_source_to_dbus (GMountSource *source,
- DBusMessage *message);
-gboolean g_mount_source_ask_password (GMountSource *mount_source,
- const char *message,
- const char *initial_user,
- const char *initial_domain,
- GAskPasswordFlags flags,
- gboolean *aborted,
- char **password_out,
- char **user_out,
- char **domain_out,
- gboolean *anonymous_out,
- GPasswordSave *password_save_out);
-
-void g_mount_source_ask_password_async (GMountSource *mount_source,
- const char *message,
- const char *initial_user,
- const char *initial_domain,
- GAskPasswordFlags flags,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-gboolean g_mount_source_ask_password_finish (GMountSource *source,
- GAsyncResult *result,
- gboolean *aborted,
- char **password_out,
- char **user_out,
- char **domain_out,
- gboolean *anonymous_out,
- GPasswordSave *password_save_out);
-
-gboolean g_mount_source_ask_question (GMountSource *mount_source,
- const char *message,
- const char **choices,
- gint n_choices,
- gboolean *aborted,
- gint *choice_out);
-
-void g_mount_source_ask_question_async (GMountSource *mount_source,
- const char *message,
- const char **choices,
- gint n_choices,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-gboolean g_mount_source_ask_question_finish (GMountSource *source,
- GAsyncResult *result,
- gboolean *aborted,
- gint *choice_out);
-
-
-const char * g_mount_source_get_dbus_id (GMountSource *mount_source);
-const char * g_mount_source_get_obj_path (GMountSource *mount_source);
-
-GMountOperation *g_mount_source_get_operation (GMountSource *mount_source);
-
-G_END_DECLS
-
-#endif /* __G_MOUNT_SOURCE_H__ */
diff --git a/common/gmountspec.c b/common/gmountspec.c
deleted file mode 100644
index 7d8fa57e..00000000
--- a/common/gmountspec.c
+++ /dev/null
@@ -1,534 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib/gi18n-lib.h>
-
-#include "gdbusutils.h"
-#include "gmountspec.h"
-
-static GHashTable *unique_hash = NULL;
-G_LOCK_DEFINE_STATIC(unique_hash);
-
-static int
-item_compare (const void *_a, const void *_b)
-{
- const GMountSpecItem *a = _a;
- const GMountSpecItem *b = _b;
-
- return strcmp (a->key, b->key);
-}
-
-GMountSpec *
-g_mount_spec_new (const char *type)
-{
- GMountSpec *spec;
-
- spec = g_new0 (GMountSpec, 1);
- spec->ref_count = 1;
- spec->items = g_array_new (FALSE, TRUE, sizeof (GMountSpecItem));
- spec->mount_prefix = g_strdup ("/");
-
- if (type != NULL)
- g_mount_spec_set (spec, "type", type);
-
- return spec;
-}
-
-/* Takes ownership of passed in data */
-GMountSpec *
-g_mount_spec_new_from_data (GArray *items,
- char *mount_prefix)
-{
- GMountSpec *spec;
-
- spec = g_new0 (GMountSpec, 1);
- spec->ref_count = 1;
- spec->items = items;
- if (mount_prefix == NULL)
- spec->mount_prefix = g_strdup ("/");
- else
- spec->mount_prefix = mount_prefix;
-
- g_array_sort (spec->items, item_compare);
-
- return spec;
-}
-
-GMountSpec *
-g_mount_spec_get_unique_for (GMountSpec *spec)
-{
- GMountSpec *unique_spec;
-
- if (spec->is_unique)
- return g_mount_spec_ref (spec);
-
- G_LOCK (unique_hash);
-
- if (unique_hash == NULL)
- unique_hash = g_hash_table_new (g_mount_spec_hash, (GEqualFunc)g_mount_spec_equal);
-
- unique_spec = g_hash_table_lookup (unique_hash, spec);
-
- if (unique_spec == NULL)
- {
- spec->is_unique = TRUE;
- g_hash_table_insert (unique_hash, spec, spec);
- unique_spec = spec;
- }
-
- g_mount_spec_ref (unique_spec);
-
- G_UNLOCK (unique_hash);
-
- return unique_spec;
-}
-
-void
-g_mount_spec_set_mount_prefix (GMountSpec *spec,
- const char *mount_prefix)
-{
- g_free (spec->mount_prefix);
- spec->mount_prefix = g_strdup (mount_prefix);
-}
-
-
-static void
-add_item (GMountSpec *spec,
- const char *key,
- char *value)
-{
- GMountSpecItem item;
-
- g_return_if_fail (key != NULL);
- g_return_if_fail (value != NULL);
-
- item.key = g_strdup (key);
- item.value = value;
-
- g_array_append_val (spec->items, item);
-}
-
-
-void
-g_mount_spec_set_with_len (GMountSpec *spec,
- const char *key,
- const char *value,
- int value_len)
-{
- int i;
- char *value_copy;
-
- g_return_if_fail (key != NULL);
- g_return_if_fail (value != NULL);
-
- if (value_len == -1)
- value_copy = g_strdup (value);
- else
- value_copy = g_strndup (value, value_len);
-
- for (i = 0; i < spec->items->len; i++)
- {
- GMountSpecItem *item = &g_array_index (spec->items, GMountSpecItem, i);
- if (strcmp (item->key, key) == 0)
- {
- g_free (item->value);
- item->value = value_copy;
- return;
- }
- }
-
- add_item (spec, key, value_copy);
- g_array_sort (spec->items, item_compare);
-}
-
-void
-g_mount_spec_set (GMountSpec *spec,
- const char *key,
- const char *value)
-{
- g_mount_spec_set_with_len (spec, key, value, -1);
-}
-
-
-GMountSpec *
-g_mount_spec_copy (GMountSpec *spec)
-{
- GMountSpec *copy;
- int i;
-
- copy = g_mount_spec_new (NULL);
- g_mount_spec_set_mount_prefix (copy, spec->mount_prefix);
-
- for (i = 0; i < spec->items->len; i++)
- {
- GMountSpecItem *item = &g_array_index (spec->items, GMountSpecItem, i);
- g_mount_spec_set (copy, item->key, item->value);
- }
-
- return copy;
-}
-
-GMountSpec *
-g_mount_spec_ref (GMountSpec *spec)
-{
- g_atomic_int_inc (&spec->ref_count);
- return spec;
-}
-
-
-void
-g_mount_spec_unref (GMountSpec *spec)
-{
- int i;
-
- if (g_atomic_int_dec_and_test (&spec->ref_count))
- {
- G_LOCK (unique_hash);
- if (unique_hash != NULL &&
- spec->is_unique)
- g_hash_table_remove (unique_hash, spec);
- G_UNLOCK (unique_hash);
-
- g_free (spec->mount_prefix);
- for (i = 0; i < spec->items->len; i++)
- {
- GMountSpecItem *item = &g_array_index (spec->items, GMountSpecItem, i);
- g_free (item->key);
- g_free (item->value);
- }
- g_array_free (spec->items, TRUE);
-
- g_free (spec);
- }
-}
-
-GMountSpec *
-g_mount_spec_from_dbus (DBusMessageIter *iter)
-{
- GMountSpec *spec;
- DBusMessageIter array_iter, struct_iter, spec_iter;
- const char *key;
- char *value;
- char *mount_prefix;
-
- if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_STRUCT)
- return NULL;
-
- dbus_message_iter_recurse (iter, &spec_iter);
-
- mount_prefix = NULL;
- if (!_g_dbus_message_iter_get_args (&spec_iter, NULL,
- G_DBUS_TYPE_CSTRING, &mount_prefix,
- 0))
- return NULL;
-
- spec = g_mount_spec_new (NULL);
- g_free (spec->mount_prefix);
- spec->mount_prefix = mount_prefix;
-
- if (dbus_message_iter_get_arg_type (&spec_iter) != DBUS_TYPE_ARRAY ||
- dbus_message_iter_get_element_type (&spec_iter) != DBUS_TYPE_STRUCT)
- {
- g_mount_spec_unref (spec);
- return NULL;
- }
-
- dbus_message_iter_recurse (&spec_iter, &array_iter);
- while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_STRUCT)
- {
- dbus_message_iter_recurse (&array_iter, &struct_iter);
- if (_g_dbus_message_iter_get_args (&struct_iter, NULL,
- DBUS_TYPE_STRING, &key,
- G_DBUS_TYPE_CSTRING, &value,
- 0))
- add_item (spec, key, value);
- dbus_message_iter_next (&array_iter);
- }
-
- dbus_message_iter_next (iter);
-
- /* Sort on key */
- g_array_sort (spec->items, item_compare);
-
- return spec;
-}
-
-void
-g_mount_spec_to_dbus_with_path (DBusMessageIter *iter,
- GMountSpec *spec,
- const char *path)
-{
- DBusMessageIter spec_iter, array_iter, item_iter;
- int i;
-
- if (!dbus_message_iter_open_container (iter,
- DBUS_TYPE_STRUCT,
- NULL,
- &spec_iter))
- _g_dbus_oom ();
-
- _g_dbus_message_iter_append_cstring (&spec_iter, path ? path : "");
-
- if (!dbus_message_iter_open_container (&spec_iter,
- DBUS_TYPE_ARRAY,
- G_MOUNT_SPEC_ITEM_TYPE_AS_STRING,
- &array_iter))
- _g_dbus_oom ();
-
- for (i = 0; i < spec->items->len; i++)
- {
- GMountSpecItem *item = &g_array_index (spec->items, GMountSpecItem, i);
-
- if (!dbus_message_iter_open_container (&array_iter,
- DBUS_TYPE_STRUCT,
- NULL,
- &item_iter))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_basic (&item_iter, DBUS_TYPE_STRING,
- &item->key))
- _g_dbus_oom ();
- _g_dbus_message_iter_append_cstring (&item_iter, item->value);
-
- if (!dbus_message_iter_close_container (&array_iter, &item_iter))
- _g_dbus_oom ();
-
- }
-
- if (!dbus_message_iter_close_container (&spec_iter, &array_iter))
- _g_dbus_oom ();
-
-
-
- if (!dbus_message_iter_close_container (iter, &spec_iter))
- _g_dbus_oom ();
-
-}
-
-void
-g_mount_spec_to_dbus (DBusMessageIter *iter,
- GMountSpec *spec)
-{
- g_mount_spec_to_dbus_with_path (iter, spec, spec->mount_prefix);
-}
-
-static gboolean
-items_equal (GArray *a,
- GArray *b)
-{
- int i;
-
- if (a->len != b->len)
- return FALSE;
-
- for (i = 0; i < a->len; i++)
- {
- GMountSpecItem *item_a = &g_array_index (a, GMountSpecItem, i);
- GMountSpecItem *item_b = &g_array_index (b, GMountSpecItem, i);
-
- if (strcmp (item_a->key, item_b->key) != 0)
- return FALSE;
- if (strcmp (item_a->value, item_b->value) != 0)
- return FALSE;
- }
-
- return TRUE;
-}
-
-static gboolean
-path_has_prefix (const char *path,
- const char *prefix)
-{
- int prefix_len;
-
- if (prefix == NULL)
- return TRUE;
-
- prefix_len = strlen (prefix);
-
- if (strncmp (path, prefix, prefix_len) == 0 &&
- (prefix_len == 0 || /* empty prefix always matches */
- prefix[prefix_len - 1] == '/' || /* last char in prefix was a /, so it must be in path too */
- path[prefix_len] == 0 ||
- path[prefix_len] == '/'))
- return TRUE;
-
- return FALSE;
-}
-
-guint
-g_mount_spec_hash (gconstpointer _mount)
-{
- GMountSpec *mount = (GMountSpec *) _mount;
- guint hash;
- int i;
-
- hash = 0;
- if (mount->mount_prefix)
- hash ^= g_str_hash (mount->mount_prefix);
-
- for (i = 0; i < mount->items->len; i++)
- {
- GMountSpecItem *item = &g_array_index (mount->items, GMountSpecItem, i);
- hash ^= g_str_hash (item->value);
- }
-
- return hash;
-}
-
-gboolean
-g_mount_spec_equal (GMountSpec *mount1,
- GMountSpec *mount2)
-{
- return items_equal (mount1->items, mount2->items) &&
- ((mount1->mount_prefix == mount2->mount_prefix) ||
- (mount1->mount_prefix != NULL && mount2->mount_prefix != NULL &&
- strcmp (mount1->mount_prefix, mount2->mount_prefix) == 0));
-}
-
-gboolean
-g_mount_spec_match_with_path (GMountSpec *mount,
- GMountSpec *spec,
- const char *path)
-{
- if (items_equal (mount->items, spec->items) &&
- path_has_prefix (path, mount->mount_prefix))
- return TRUE;
- return FALSE;
-}
-
-gboolean
-g_mount_spec_match (GMountSpec *mount,
- GMountSpec *path)
-{
- return g_mount_spec_match_with_path (mount, path, path->mount_prefix);
-}
-
-const char *
-g_mount_spec_get (GMountSpec *spec,
- const char *key)
-{
- int i;
-
- for (i = 0; i < spec->items->len; i++)
- {
- GMountSpecItem *item = &g_array_index (spec->items, GMountSpecItem, i);
-
- if (strcmp (item->key, key) == 0)
- return item->value;
- }
-
- return NULL;
-}
-
-const char *
-g_mount_spec_get_type (GMountSpec *spec)
-{
- return g_mount_spec_get (spec, "type");
-}
-
-char *
-g_mount_spec_to_string (GMountSpec *spec)
-{
- GString *str;
- int i;
-
- if (spec == NULL)
- return g_strdup ("(null)");
-
- str = g_string_new ("");
-
- for (i = 0; i < spec->items->len; i++)
- {
- GMountSpecItem *item = &g_array_index (spec->items, GMountSpecItem, i);
-
- g_string_append_printf (str, "%s='%s',", item->key, item->value);
- }
- g_string_append_printf (str, "mount_prefix='%s'", spec->mount_prefix);
-
- return g_string_free (str, FALSE);
-}
-
-char *
-g_mount_spec_canonicalize_path (const char *path)
-{
- char *canon, *start, *p, *q;
-
- if (*path != '/')
- canon = g_strconcat ("/", path, NULL);
- else
- canon = g_strdup (path);
-
- /* Skip initial slash */
- start = canon + 1;
-
- p = start;
- while (*p != 0)
- {
- if (p[0] == '.' && (p[1] == 0 || p[1] == '/'))
- {
- memmove (p, p+1, strlen (p+1)+1);
- }
- else if (p[0] == '.' && p[1] == '.' && (p[2] == 0 || p[2] == '/'))
- {
- q = p + 2;
- /* Skip previous separator */
- p = p - 2;
- if (p < start)
- p = start;
- while (p > start && *p != '/')
- p--;
- if (*p == '/')
- p++;
- memmove (p, q, strlen (q)+1);
- }
- else
- {
- /* Skip until next separator */
- while (*p != 0 && *p != '/')
- p++;
-
- /* Keep one separator */
- if (*p != 0)
- p++;
- }
-
- /* Remove additional separators */
- q = p;
- while (*q && *q == '/')
- q++;
-
- if (p != q)
- memmove (p, q, strlen (q)+1);
- }
-
- /* Remove trailing slashes */
- if (p > start && *(p-1) == '/')
- *(p-1) = 0;
-
- return canon;
-}
diff --git a/common/gmountspec.h b/common/gmountspec.h
deleted file mode 100644
index 55ac5c63..00000000
--- a/common/gmountspec.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_MOUNT_SPEC_H__
-#define __G_MOUNT_SPEC_H__
-
-#include <glib.h>
-#include <dbus/dbus.h>
-
-G_BEGIN_DECLS
-
-#define G_MOUNT_SPEC_ITEM_INNER_TYPE_AS_STRING \
- DBUS_TYPE_STRING_AS_STRING \
- DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING
-
-#define G_MOUNT_SPEC_ITEM_TYPE_AS_STRING \
- DBUS_STRUCT_BEGIN_CHAR_AS_STRING \
- G_MOUNT_SPEC_ITEM_INNER_TYPE_AS_STRING \
- DBUS_STRUCT_END_CHAR_AS_STRING
-
-#define G_MOUNT_SPEC_INNER_TYPE_AS_STRING \
- DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING \
- DBUS_TYPE_ARRAY_AS_STRING G_MOUNT_SPEC_ITEM_TYPE_AS_STRING
-
-#define G_MOUNT_SPEC_TYPE_AS_STRING \
- DBUS_STRUCT_BEGIN_CHAR_AS_STRING \
- G_MOUNT_SPEC_INNER_TYPE_AS_STRING \
- DBUS_STRUCT_END_CHAR_AS_STRING
-
-typedef struct {
- char *key;
- char *value;
-} GMountSpecItem;
-
-typedef struct {
- volatile int ref_count;
- GArray *items;
- char *mount_prefix;
- gboolean is_unique;
-} GMountSpec;
-
-GMountSpec *g_mount_spec_new (const char *type);
-GMountSpec *g_mount_spec_new_from_data (GArray *items,
- char *mount_prefix);
-GMountSpec *g_mount_spec_ref (GMountSpec *spec);
-void g_mount_spec_unref (GMountSpec *spec);
-GMountSpec *g_mount_spec_get_unique_for (GMountSpec *spec);
-GMountSpec *g_mount_spec_copy (GMountSpec *spec);
-GMountSpec *g_mount_spec_from_dbus (DBusMessageIter *iter);
-void g_mount_spec_to_dbus (DBusMessageIter *iter,
- GMountSpec *spec);
-void g_mount_spec_to_dbus_with_path (DBusMessageIter *iter,
- GMountSpec *spec,
- const char *path);
-void g_mount_spec_set_mount_prefix (GMountSpec *spec,
- const char *mount_prefix);
-void g_mount_spec_set (GMountSpec *spec,
- const char *key,
- const char *value);
-void g_mount_spec_set_with_len (GMountSpec *spec,
- const char *key,
- const char *value,
- int value_len);
-guint g_mount_spec_hash (gconstpointer mount);
-gboolean g_mount_spec_equal (GMountSpec *mount1,
- GMountSpec *mount2);
-gboolean g_mount_spec_match (GMountSpec *mount,
- GMountSpec *path);
-gboolean g_mount_spec_match_with_path (GMountSpec *mount,
- GMountSpec *spec,
- const char *path);
-const char *g_mount_spec_get (GMountSpec *spec,
- const char *key);
-const char *g_mount_spec_get_type (GMountSpec *spec);
-
-/* For debugging */
-char * g_mount_spec_to_string (GMountSpec *spec);
-
-char * g_mount_spec_canonicalize_path (const char *path);
-
-G_END_DECLS
-
-
-#endif /* __G_MOUNT_SPEC_H__ */
diff --git a/common/gmounttracker.c b/common/gmounttracker.c
deleted file mode 100644
index 5d97d0c9..00000000
--- a/common/gmounttracker.c
+++ /dev/null
@@ -1,647 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <gmounttracker.h>
-#include <gdbusutils.h>
-#include <gvfsdaemonprotocol.h>
-
-enum {
- MOUNTED,
- UNMOUNTED,
- LAST_SIGNAL
-};
-
-enum {
- PROP_0,
- PROP_CONNECTION
-};
-
-/* TODO: Real P_() */
-#define P_(_x) (_x)
-#define I_(string) g_intern_static_string (string)
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-struct _GMountTracker
-{
- GObject parent_instance;
-
- GMutex *lock;
- GList *mounts;
- DBusConnection *connection;
-};
-
-/* We use this hack to avoid problems when this code
- is shared in both the daemon and the client */
-static GType _g_mount_tracker_get_type (void) G_GNUC_CONST;
-
-#define g_mount_tracker_get_type _g_mount_tracker_get_type
-G_DEFINE_TYPE (GMountTracker, g_mount_tracker, G_TYPE_OBJECT)
-#undef g_mount_tracker_get_type
-
-GType
-g_mount_tracker_get_type (void)
-{
- static volatile gsize type_volatile = 0;
-
- if (g_once_init_enter (&type_volatile))
- {
- GType type;
-
- type = g_type_from_name ("GMountTracker");
- if (type == 0)
- type = _g_mount_tracker_get_type ();
-
- g_once_init_leave (&type_volatile, type);
- }
-
- return type_volatile;
-}
-
-
-static DBusHandlerResult g_mount_tracker_filter_func (DBusConnection *conn,
- DBusMessage *message,
- gpointer data);
-static GObject* g_mount_tracker_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params);
-static void g_mount_tracker_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static void g_mount_tracker_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-
-gboolean
-g_mount_info_equal (GMountInfo *info1,
- GMountInfo *info2)
-{
- return
- strcmp (info1->dbus_id, info2->dbus_id) == 0 &&
- strcmp (info1->object_path, info2->object_path) == 0;
-}
-
-GMountInfo *
-g_mount_info_dup (GMountInfo *info)
-{
- GMountInfo *copy;
-
- copy = g_new (GMountInfo, 1);
- copy->ref_count = 1;
- copy->display_name = g_strdup (info->display_name);
- copy->stable_name = g_strdup (info->stable_name);
- copy->x_content_types = g_strdup (info->x_content_types);
- copy->icon = g_strdup (info->icon);
- copy->dbus_id = g_strdup (info->dbus_id);
- copy->object_path = g_strdup (info->object_path);
- copy->mount_spec = g_mount_spec_copy (info->mount_spec);
- copy->user_visible = info->user_visible;
- copy->prefered_filename_encoding = g_strdup (info->prefered_filename_encoding);
- copy->fuse_mountpoint = g_strdup (info->fuse_mountpoint);
-
- return copy;
-}
-
-GMountInfo *
-g_mount_info_ref (GMountInfo *info)
-{
- g_atomic_int_inc (&info->ref_count);
- return info;
-}
-
-void
-g_mount_info_unref (GMountInfo *info)
-{
- if (g_atomic_int_dec_and_test (&info->ref_count))
- {
- g_free (info->display_name);
- g_free (info->stable_name);
- g_free (info->x_content_types);
- g_free (info->icon);
- g_free (info->dbus_id);
- g_free (info->object_path);
- g_mount_spec_unref (info->mount_spec);
- g_free (info->prefered_filename_encoding);
- g_free (info->fuse_mountpoint);
- g_free (info);
- }
-}
-
-const char *
-g_mount_info_resolve_path (GMountInfo *info,
- const char *path)
-{
- const char *new_path;
- int len;
-
- if (info->mount_spec->mount_prefix != NULL &&
- info->mount_spec->mount_prefix[0] != 0)
- {
- len = strlen (info->mount_spec->mount_prefix);
- if (info->mount_spec->mount_prefix[len-1] == '/')
- len--;
- new_path = path + len;
- }
- else
- new_path = path;
-
- if (new_path == NULL ||
- new_path[0] == 0)
- new_path = "/";
-
- return new_path;
-}
-
-GMountInfo *
-g_mount_info_from_dbus (DBusMessageIter *iter)
-{
- DBusMessageIter struct_iter;
- GMountInfo *info;
- GMountSpec *mount_spec;
- dbus_bool_t user_visible;
- char *display_name;
- char *stable_name;
- char *x_content_types;
- char *icon;
- char *prefered_filename_encoding;
- char *dbus_id;
- char *obj_path;
- char *fuse_mountpoint;
-
- if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_STRUCT)
- return NULL;
-
- dbus_message_iter_recurse (iter, &struct_iter);
-
- if (!_g_dbus_message_iter_get_args (&struct_iter, NULL,
- DBUS_TYPE_STRING, &dbus_id,
- DBUS_TYPE_OBJECT_PATH, &obj_path,
- DBUS_TYPE_STRING, &display_name,
- DBUS_TYPE_STRING, &stable_name,
- DBUS_TYPE_STRING, &x_content_types,
- DBUS_TYPE_STRING, &icon,
- DBUS_TYPE_STRING, &prefered_filename_encoding,
- DBUS_TYPE_BOOLEAN, &user_visible,
- G_DBUS_TYPE_CSTRING, &fuse_mountpoint,
- 0))
- return NULL;
-
- mount_spec = g_mount_spec_from_dbus (&struct_iter);
- if (mount_spec == NULL) {
- g_free (fuse_mountpoint);
- return NULL;
- }
-
- info = g_new0 (GMountInfo, 1);
- info->ref_count = 1;
- info->display_name = g_strdup (display_name);
- info->stable_name = g_strdup (stable_name);
- info->x_content_types = g_strdup (x_content_types);
- info->icon = g_strdup (icon);
- info->dbus_id = g_strdup (dbus_id);
- info->object_path = g_strdup (obj_path);
- info->mount_spec = mount_spec;
- info->user_visible = user_visible;
- info->prefered_filename_encoding = g_strdup (prefered_filename_encoding);
- info->fuse_mountpoint = fuse_mountpoint;
-
- return info;
-}
-
-
-static void
-g_mount_tracker_finalize (GObject *object)
-{
- GMountTracker *tracker;
-
- tracker = G_MOUNT_TRACKER (object);
-
- if (tracker->lock)
- g_mutex_free (tracker->lock);
-
- g_list_foreach (tracker->mounts,
- (GFunc)g_mount_info_unref, NULL);
- g_list_free (tracker->mounts);
-
- dbus_connection_remove_filter (tracker->connection, g_mount_tracker_filter_func, tracker);
-
-
- dbus_bus_remove_match (tracker->connection,
- "sender='"G_VFS_DBUS_DAEMON_NAME"',"
- "interface='"G_VFS_DBUS_MOUNTTRACKER_INTERFACE"',"
- "member='"G_VFS_DBUS_MOUNTTRACKER_SIGNAL_MOUNTED"'",
- NULL);
- dbus_bus_remove_match (tracker->connection,
- "sender='"G_VFS_DBUS_DAEMON_NAME"',"
- "interface='"G_VFS_DBUS_MOUNTTRACKER_INTERFACE"',"
- "member='"G_VFS_DBUS_MOUNTTRACKER_SIGNAL_UNMOUNTED"'",
- NULL);
-
- dbus_connection_unref (tracker->connection);
-
- if (G_OBJECT_CLASS (g_mount_tracker_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_mount_tracker_parent_class)->finalize) (object);
-}
-
-static void
-g_mount_tracker_class_init (GMountTrackerClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_mount_tracker_finalize;
- gobject_class->constructor = g_mount_tracker_constructor;
- gobject_class->set_property = g_mount_tracker_set_property;
- gobject_class->get_property = g_mount_tracker_get_property;
-
- signals[MOUNTED] = g_signal_new (I_("mounted"),
- G_TYPE_MOUNT_TRACKER,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GMountTrackerClass, mounted),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- signals[UNMOUNTED] = g_signal_new (I_("unmounted"),
- G_TYPE_MOUNT_TRACKER,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GMountTrackerClass, unmounted),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- g_object_class_install_property (gobject_class,
- PROP_CONNECTION,
- g_param_spec_pointer ("connection",
- P_("DBus connection"),
- P_("The dbus connection to use for ipc."),
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
-
-}
-
-static void
-g_mount_tracker_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GMountTracker *tracker = G_MOUNT_TRACKER (object);
-
- switch (prop_id)
- {
- case PROP_CONNECTION:
- if (tracker->connection)
- dbus_connection_unref (tracker->connection);
- tracker->connection = NULL;
- if (g_value_get_pointer (value))
- tracker->connection = dbus_connection_ref (g_value_get_pointer (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-g_mount_tracker_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GMountTracker *tracker = G_MOUNT_TRACKER (object);
-
- switch (prop_id)
- {
- case PROP_CONNECTION:
- g_value_set_pointer (value, tracker->connection);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GList *
-g_mount_tracker_find (GMountTracker *tracker,
- GMountInfo *info)
-{
- GList *l;
-
- for (l = tracker->mounts; l != NULL; l = l->next)
- {
- if (g_mount_info_equal (info, (GMountInfo *)l->data))
- return l;
- }
-
- return NULL;
-}
-
-static void
-g_mount_tracker_add_mount (GMountTracker *tracker,
- GMountInfo *info)
-{
- if (tracker->lock)
- g_mutex_lock (tracker->lock);
-
- /* Don't add multiple times */
- if (g_mount_tracker_find (tracker, info))
- {
- if (tracker->lock)
- g_mutex_unlock (tracker->lock);
- return;
- }
-
- tracker->mounts = g_list_prepend (tracker->mounts, g_mount_info_ref (info));
-
- if (tracker->lock)
- g_mutex_unlock (tracker->lock);
-
- g_signal_emit (tracker, signals[MOUNTED], 0, info);
-}
-
-static void
-g_mount_tracker_remove_mount (GMountTracker *tracker,
- GMountInfo *info)
-{
- GList *l;
- GMountInfo *old_info;
-
- if (tracker->lock)
- g_mutex_lock (tracker->lock);
-
- l = g_mount_tracker_find (tracker, info);
-
- /* Don't remove multiple times */
- if (l == NULL)
- {
- if (tracker->lock)
- g_mutex_unlock (tracker->lock);
- return;
- }
-
- old_info = l->data;
-
- tracker->mounts = g_list_delete_link (tracker->mounts, l);
-
- if (tracker->lock)
- g_mutex_unlock (tracker->lock);
-
- g_signal_emit (tracker, signals[UNMOUNTED], 0, old_info);
- g_mount_info_unref (old_info);
-}
-
-static void
-list_mounts_reply (GMountTracker *tracker,
- DBusMessage *reply)
-{
- DBusMessageIter iter, array_iter;
- GMountInfo *info;
- gboolean b;
-
- b = dbus_message_iter_init (reply, &iter);
- if (b && dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_ARRAY)
- {
- dbus_message_iter_recurse (&iter, &array_iter);
-
- do
- {
- info = g_mount_info_from_dbus (&array_iter);
- if (info)
- {
- g_mount_tracker_add_mount (tracker, info);
- g_mount_info_unref (info);
- }
- }
- while (dbus_message_iter_next (&array_iter));
- }
- else
- {
- /* list_mounts_reply problem - gvfsd not running? */
- }
-}
-
-static DBusHandlerResult
-g_mount_tracker_filter_func (DBusConnection *conn,
- DBusMessage *message,
- gpointer data)
-{
- GMountTracker *tracker = data;
- GMountInfo *info;
- DBusMessageIter iter;
-
- if (dbus_message_is_signal (message,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_SIGNAL_MOUNTED))
- {
- dbus_message_iter_init (message, &iter);
- info = g_mount_info_from_dbus (&iter);
-
- if (info)
- {
- g_mount_tracker_add_mount (tracker, info);
- g_mount_info_unref (info);
- }
- }
- else if (dbus_message_is_signal (message,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_SIGNAL_UNMOUNTED))
- {
- dbus_message_iter_init (message, &iter);
- info = g_mount_info_from_dbus (&iter);
-
- if (info)
- {
- g_mount_tracker_remove_mount (tracker, info);
- g_mount_info_unref (info);
- }
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-/* Called after construction when the construct properties (like connection) are set */
-static void
-init_connection (GMountTracker *tracker)
-{
- DBusMessage *message, *reply;
-
- if (tracker->connection == NULL)
- tracker->connection = dbus_bus_get (DBUS_BUS_SESSION, NULL);
-
- message =
- dbus_message_new_method_call (G_VFS_DBUS_DAEMON_NAME,
- G_VFS_DBUS_MOUNTTRACKER_PATH,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_LIST_MOUNTS);
- if (message == NULL)
- _g_dbus_oom ();
-
- dbus_message_set_auto_start (message, TRUE);
-
- reply = dbus_connection_send_with_reply_and_block (tracker->connection, message,
- G_VFS_DBUS_TIMEOUT_MSECS,
- NULL);
- dbus_message_unref (message);
-
- if (reply != NULL)
- {
- list_mounts_reply (tracker, reply);
- dbus_message_unref (reply);
- }
-
- dbus_connection_add_filter (tracker->connection, g_mount_tracker_filter_func, tracker, NULL);
-
- dbus_bus_add_match (tracker->connection,
- "sender='"G_VFS_DBUS_DAEMON_NAME"',"
- "interface='"G_VFS_DBUS_MOUNTTRACKER_INTERFACE"',"
- "member='"G_VFS_DBUS_MOUNTTRACKER_SIGNAL_MOUNTED"'",
- NULL);
- dbus_bus_add_match (tracker->connection,
- "sender='"G_VFS_DBUS_DAEMON_NAME"',"
- "interface='"G_VFS_DBUS_MOUNTTRACKER_INTERFACE"',"
- "member='"G_VFS_DBUS_MOUNTTRACKER_SIGNAL_UNMOUNTED"'",
- NULL);
-}
-
-static void
-g_mount_tracker_init (GMountTracker *tracker)
-{
- if (g_thread_supported ())
- tracker->lock = g_mutex_new ();
-}
-
-
-static GObject*
-g_mount_tracker_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- GMountTracker *tracker;
-
- object = (* G_OBJECT_CLASS (g_mount_tracker_parent_class)->constructor) (type,
- n_construct_properties,
- construct_params);
-
- tracker = G_MOUNT_TRACKER (object);
-
- init_connection (tracker);
-
- return object;
-}
-
-GMountTracker *
-g_mount_tracker_new (DBusConnection *connection)
-{
- GMountTracker *tracker;
-
- tracker = g_object_new (G_TYPE_MOUNT_TRACKER, "connection", connection, NULL);
-
- return tracker;
-}
-
-GList *
-g_mount_tracker_list_mounts (GMountTracker *tracker)
-{
- GList *res, *l;
- GMountInfo *copy;
-
- if (tracker->lock)
- g_mutex_lock (tracker->lock);
-
- res = NULL;
- for (l = tracker->mounts; l != NULL; l = l->next)
- {
- copy = g_mount_info_ref (l->data);
- res = g_list_prepend (res, copy);
- }
-
- if (tracker->lock)
- g_mutex_unlock (tracker->lock);
-
- return g_list_reverse (res);
-}
-
-GMountInfo *
-g_mount_tracker_find_by_mount_spec (GMountTracker *tracker,
- GMountSpec *mount_spec)
-{
- GList *l;
- GMountInfo *info, *found;
-
- if (tracker->lock)
- g_mutex_lock (tracker->lock);
-
- found = NULL;
- for (l = tracker->mounts; l != NULL; l = l->next)
- {
- info = l->data;
-
- if (g_mount_spec_equal (info->mount_spec, mount_spec))
- {
- found = g_mount_info_ref (info);
- break;
- }
- }
-
- if (tracker->lock)
- g_mutex_unlock (tracker->lock);
-
- return found;
-}
-
-
-gboolean
-g_mount_tracker_has_mount_spec (GMountTracker *tracker,
- GMountSpec *mount_spec)
-{
- GList *l;
- GMountInfo *info;
- gboolean found;
-
- if (tracker->lock)
- g_mutex_lock (tracker->lock);
-
- found = FALSE;
- for (l = tracker->mounts; l != NULL; l = l->next)
- {
- info = l->data;
-
- if (g_mount_spec_equal (info->mount_spec, mount_spec))
- {
- found = TRUE;
- break;
- }
- }
-
- if (tracker->lock)
- g_mutex_unlock (tracker->lock);
-
- return found;
-}
-
diff --git a/common/gmounttracker.h b/common/gmounttracker.h
deleted file mode 100644
index 67c91ff1..00000000
--- a/common/gmounttracker.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_MOUNT_TRACKER_H__
-#define __G_MOUNT_TRACKER_H__
-
-#include <glib-object.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_MOUNT_TRACKER (g_mount_tracker_get_type ())
-#define G_MOUNT_TRACKER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_MOUNT_TRACKER, GMountTracker))
-#define G_MOUNT_TRACKER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_MOUNT_TRACKER, GMountTrackerClass))
-#define G_IS_MOUNT_TRACKER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_MOUNT_TRACKER))
-#define G_IS_MOUNT_TRACKER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_MOUNT_TRACKER))
-#define G_MOUNT_TRACKER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_MOUNT_TRACKER, GMountTrackerClass))
-
-typedef struct _GMountTracker GMountTracker;
-typedef struct _GMountTrackerClass GMountTrackerClass;
-
-typedef struct {
- volatile int ref_count;
- char *display_name;
- char *stable_name;
- char *x_content_types;
- char *icon;
- char *dbus_id;
- char *object_path;
- gboolean user_visible;
- char *prefered_filename_encoding; /* NULL -> UTF8 */
- char *fuse_mountpoint;
- GMountSpec *mount_spec;
-} GMountInfo;
-
-struct _GMountTrackerClass
-{
- GObjectClass parent_class;
-
- void (*mounted) (GMountTracker *tracker,
- GMountInfo *info);
- void (*unmounted) (GMountTracker *tracker,
- GMountInfo *info);
-};
-
-GType g_mount_tracker_get_type (void) G_GNUC_CONST;
-
-gboolean g_mount_info_equal (GMountInfo *info1,
- GMountInfo *info2);
-GMountInfo *g_mount_info_ref (GMountInfo *info);
-GMountInfo *g_mount_info_dup (GMountInfo *info);
-void g_mount_info_unref (GMountInfo *info);
-const char *g_mount_info_resolve_path (GMountInfo *info,
- const char *path);
-
-GMountInfo * g_mount_info_from_dbus (DBusMessageIter *iter);
-
-GMountTracker *g_mount_tracker_new (DBusConnection *connection);
-GList * g_mount_tracker_list_mounts (GMountTracker *tracker);
-GMountInfo * g_mount_tracker_find_by_mount_spec (GMountTracker *tracker,
- GMountSpec *mount_spec);
-gboolean g_mount_tracker_has_mount_spec (GMountTracker *tracker,
- GMountSpec *mount_spec);
-
-G_END_DECLS
-
-#endif /* __G_MOUNT_TRACKER_H__ */
diff --git a/common/gsysutils.c b/common/gsysutils.c
deleted file mode 100644
index 9dd8afa4..00000000
--- a/common/gsysutils.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#if defined(HAVE_SYS_PARAM_H)
-#include <sys/param.h>
-#endif
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <stdio.h>
-#include <string.h>
-#include <strings.h>
-#include <errno.h>
-#include <unistd.h>
-#ifdef HAVE_SYS_UIO_H
-#include <sys/uio.h>
-#endif
-#include <gio/gio.h>
-
-#include <glib/gi18n-lib.h>
-
-#include "gsysutils.h"
-
-int
-_g_socket_send_fd (int connection_fd,
- int fd)
-{
- struct msghdr msg;
- struct iovec vec[1];
- char buf[1] = {'x'};
- char ccmsg[CMSG_SPACE (sizeof (fd))];
- struct cmsghdr *cmsg;
- int ret;
-
- msg.msg_name = NULL;
- msg.msg_namelen = 0;
-
- vec[0].iov_base = buf;
- vec[0].iov_len = 1;
- msg.msg_iov = vec;
- msg.msg_iovlen = 1;
- msg.msg_control = ccmsg;
- msg.msg_controllen = sizeof (ccmsg);
- cmsg = CMSG_FIRSTHDR (&msg);
- cmsg->cmsg_level = SOL_SOCKET;
- cmsg->cmsg_type = SCM_RIGHTS;
- cmsg->cmsg_len = CMSG_LEN (sizeof(fd));
- *(int*)CMSG_DATA (cmsg) = fd;
- msg.msg_controllen = cmsg->cmsg_len;
- msg.msg_flags = 0;
-
- ret = sendmsg (connection_fd, &msg, 0);
- return ret;
-}
-
-/* receive a file descriptor over file descriptor fd */
-int
-_g_socket_receive_fd (int socket_fd)
-{
- struct msghdr msg;
- struct iovec iov[1];
- char buf[1];
- int rv;
- char ccmsg[CMSG_SPACE (sizeof(int))];
- struct cmsghdr *cmsg;
-
- iov[0].iov_base = buf;
- iov[0].iov_len = 1;
- msg.msg_name = 0;
- msg.msg_namelen = 0;
- msg.msg_iov = iov;
- msg.msg_iovlen = 1;
- msg.msg_control = ccmsg;
- msg.msg_controllen = sizeof (ccmsg);
-
- rv = recvmsg (socket_fd, &msg, 0);
- if (rv == -1)
- {
- perror ("recvmsg");
- return -1;
- }
-
- cmsg = CMSG_FIRSTHDR (&msg);
- if (cmsg == NULL)
- return -1;
-
- if (!cmsg->cmsg_type == SCM_RIGHTS) {
- g_warning("got control message of unknown type %d",
- cmsg->cmsg_type);
- return -1;
- }
-
- return *(int*)CMSG_DATA(cmsg);
-}
-
-int
-_g_socket_connect (const char *address,
- GError **error)
-{
- int fd;
- const char *path;
- size_t path_len;
- struct sockaddr_un addr;
- gboolean abstract;
-
- fd = socket (PF_UNIX, SOCK_STREAM, 0);
- if (fd == -1)
- {
- int errsv = errno;
-
- g_set_error (error, G_IO_ERROR,
- g_io_error_from_errno (errsv),
- _("Error creating socket: %s"),
- g_strerror (errsv));
- return -1;
- }
-
- if (g_str_has_prefix (address, "unix:abstract="))
- {
- path = address + strlen ("unix:abstract=");
- abstract = TRUE;
- }
- else
- {
- path = address + strlen ("unix:path=");
- abstract = FALSE;
- }
-
- memset (&addr, 0, sizeof (addr));
- addr.sun_family = AF_UNIX;
- path_len = strlen (path);
-
- if (abstract)
- {
- addr.sun_path[0] = '\0'; /* this is what says "use abstract" */
- path_len++; /* Account for the extra nul byte added to the start of sun_path */
-
- strncpy (&addr.sun_path[1], path, path_len);
- }
- else
- {
- strncpy (addr.sun_path, path, path_len);
- }
-
- if (connect (fd, (struct sockaddr*) &addr, G_STRUCT_OFFSET (struct sockaddr_un, sun_path) + path_len) < 0)
- {
- int errsv = errno;
-
- g_set_error (error, G_IO_ERROR,
- g_io_error_from_errno (errsv),
- _("Error connecting to socket: %s"),
- g_strerror (errsv));
- close (fd);
- return -1;
- }
-
- return fd;
-}
diff --git a/common/gsysutils.h b/common/gsysutils.h
deleted file mode 100644
index f68a2642..00000000
--- a/common/gsysutils.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_SYS_UTILS_H__
-#define __G_SYS_UTILS_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-int _g_socket_send_fd (int socket_fd,
- int fd);
-int _g_socket_receive_fd (int socket_fd);
-int _g_socket_connect (const char *address,
- GError **error);
-
-G_END_DECLS
-
-
-#endif /* __G_SYS_UTILS_H__ */
diff --git a/common/gvfsdaemonprotocol.c b/common/gvfsdaemonprotocol.c
deleted file mode 100644
index 36331ed8..00000000
--- a/common/gvfsdaemonprotocol.c
+++ /dev/null
@@ -1,614 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib-object.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n-lib.h>
-#include <gvfsdaemonprotocol.h>
-#include <gdbusutils.h>
-#include <gio/gio.h>
-
-static const char *
-get_object_signature (GObject *obj)
-{
- if (G_IS_THEMED_ICON (obj))
- {
- return
- DBUS_STRUCT_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_UINT32_AS_STRING
- DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING
- DBUS_STRUCT_END_CHAR_AS_STRING;
- }
- else if (G_IS_FILE_ICON (obj))
- {
- GFile *file;
- char *path;
-
- file = g_file_icon_get_file (G_FILE_ICON (obj));
-
- path = g_file_get_path (file);
- if (path)
- {
- g_free (path);
- return
- DBUS_STRUCT_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_UINT32_AS_STRING
- DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING
- DBUS_STRUCT_END_CHAR_AS_STRING;
- }
- }
- return
- DBUS_STRUCT_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_UINT32_AS_STRING
- DBUS_STRUCT_END_CHAR_AS_STRING;
-}
-
-static void
-append_string_array (DBusMessageIter *iter, char **strs)
-{
- DBusMessageIter array;
- int i;
-
- if (!dbus_message_iter_open_container (iter,
- DBUS_TYPE_ARRAY,
- DBUS_TYPE_STRING_AS_STRING,
- &array))
- _g_dbus_oom ();
-
-
- for (i = 0; strs[i] != NULL; i++)
- {
- if (!dbus_message_iter_append_basic (&array, DBUS_TYPE_STRING, &strs[i]))
- _g_dbus_oom ();
- }
-
- if (!dbus_message_iter_close_container (iter, &array))
- _g_dbus_oom ();
-}
-
-static void
-append_object (DBusMessageIter *iter, GObject *obj)
-{
- DBusMessageIter obj_struct_iter;
- guint32 v_uint32;
-
- if (!dbus_message_iter_open_container (iter,
- DBUS_TYPE_STRUCT,
- NULL,
- &obj_struct_iter))
- _g_dbus_oom ();
-
- if (G_IS_THEMED_ICON (obj))
- {
- const char * const *icons;
-
- icons = g_themed_icon_get_names (G_THEMED_ICON (obj));
-
- v_uint32 = 1;
- if (!dbus_message_iter_append_basic (&obj_struct_iter,
- DBUS_TYPE_UINT32, &v_uint32))
- _g_dbus_oom ();
-
- append_string_array (&obj_struct_iter, (char **)icons);
- }
- else if (G_IS_FILE_ICON (obj))
- {
- GFile *file;
- char *path;
-
- file = g_file_icon_get_file (G_FILE_ICON (obj));
-
- path = g_file_get_path (file);
- if (path)
- {
- v_uint32 = 2;
- if (!dbus_message_iter_append_basic (&obj_struct_iter,
- DBUS_TYPE_UINT32, &v_uint32))
- _g_dbus_oom ();
-
- path = g_file_get_path (file);
- _g_dbus_message_iter_append_cstring (&obj_struct_iter, path);
- g_free (path);
- }
- else
- {
- /* Seems unlikely that daemon backend will generate GFileIcons with
- files on the vfs, so its probably not a problem not to support this.
- (Its tricky to support, since we don't link the daemon to the client/
- library directly.) */
- g_warning ("Unknown file type for icon in attribute, ignoring");
-
- v_uint32 = 0;
- if (!dbus_message_iter_append_basic (&obj_struct_iter,
- DBUS_TYPE_UINT32, &v_uint32))
- _g_dbus_oom ();
- }
- }
- else
- {
- /* NULL or unknown type: */
- if (obj != NULL)
- g_warning ("Unknown attribute object type, ignoring");
-
- v_uint32 = 0;
- if (!dbus_message_iter_append_basic (&obj_struct_iter,
- DBUS_TYPE_UINT32, &v_uint32))
- _g_dbus_oom ();
- }
-
- if (!dbus_message_iter_close_container (iter, &obj_struct_iter))
- _g_dbus_oom ();
-}
-
-void
-_g_dbus_attribute_value_destroy (GFileAttributeType type,
- GDbusAttributeValue *value)
-{
- switch (type) {
- case G_FILE_ATTRIBUTE_TYPE_STRING:
- case G_FILE_ATTRIBUTE_TYPE_BYTE_STRING:
- g_free (value->ptr);
- break;
- case G_FILE_ATTRIBUTE_TYPE_OBJECT:
- if (value->ptr)
- g_object_unref (value->ptr);
- break;
- default:
- break;
- }
-}
-
-gpointer
-_g_dbus_attribute_as_pointer (GFileAttributeType type,
- GDbusAttributeValue *value)
-{
- switch (type) {
- case G_FILE_ATTRIBUTE_TYPE_STRING:
- case G_FILE_ATTRIBUTE_TYPE_BYTE_STRING:
- case G_FILE_ATTRIBUTE_TYPE_OBJECT:
- return value->ptr;
- default:
- return (gpointer) value;
- }
-}
-
-const char *
-_g_dbus_type_from_file_attribute_type (GFileAttributeType type)
-{
- char *dbus_type;
-
- switch (type)
- {
- case G_FILE_ATTRIBUTE_TYPE_STRING:
- dbus_type = DBUS_TYPE_STRING_AS_STRING;
- break;
- case G_FILE_ATTRIBUTE_TYPE_BYTE_STRING:
- dbus_type = DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING;
- break;
- case G_FILE_ATTRIBUTE_TYPE_BOOLEAN:
- dbus_type = DBUS_TYPE_BOOLEAN_AS_STRING;
- break;
- case G_FILE_ATTRIBUTE_TYPE_UINT32:
- dbus_type = DBUS_TYPE_UINT32_AS_STRING;
- break;
- case G_FILE_ATTRIBUTE_TYPE_INT32:
- dbus_type = DBUS_TYPE_INT32_AS_STRING;
- break;
- case G_FILE_ATTRIBUTE_TYPE_UINT64:
- dbus_type = DBUS_TYPE_UINT64_AS_STRING;
- break;
- case G_FILE_ATTRIBUTE_TYPE_INT64:
- dbus_type = DBUS_TYPE_INT64_AS_STRING;
- break;
- case G_FILE_ATTRIBUTE_TYPE_OBJECT:
- dbus_type = DBUS_TYPE_STRUCT_AS_STRING;
- break;
- default:
- dbus_type = NULL;
- g_warning ("Invalid attribute type %u, ignoring\n", type);
- break;
- }
-
- return dbus_type;
-}
-
-void
-_g_dbus_append_file_attribute (DBusMessageIter *iter,
- const char *attribute,
- GFileAttributeType type,
- gpointer value_p)
-{
- DBusMessageIter variant_iter, inner_struct_iter;
- const char *dbus_type;
- GObject *obj = NULL;
-
- dbus_type = _g_dbus_type_from_file_attribute_type (type);
-
- if (!dbus_message_iter_open_container (iter,
- DBUS_TYPE_STRUCT,
- NULL,
- &inner_struct_iter))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_basic (&inner_struct_iter,
- DBUS_TYPE_STRING,
- &attribute))
- _g_dbus_oom ();
-
- if (dbus_type[0] == DBUS_TYPE_STRUCT)
- dbus_type = get_object_signature ((GObject *)value_p);
-
- if (!dbus_message_iter_open_container (&inner_struct_iter,
- DBUS_TYPE_VARIANT,
- dbus_type,
- &variant_iter))
- _g_dbus_oom ();
-
- if (dbus_type[0] == DBUS_TYPE_STRING)
- {
- if (!dbus_message_iter_append_basic (&variant_iter,
- DBUS_TYPE_STRING, &value_p))
- _g_dbus_oom ();
- }
- else if (dbus_type[0] == DBUS_TYPE_ARRAY)
- _g_dbus_message_iter_append_cstring (&variant_iter, (char *)value_p);
- else if (dbus_type[0] == DBUS_STRUCT_BEGIN_CHAR)
- append_object (&variant_iter, (GObject *)value_p);
- else if (dbus_type[0] == DBUS_TYPE_BOOLEAN)
- {
- /* dbus bool is uint32, gboolean is just "int", convert */
- dbus_bool_t bool = *(gboolean *)value_p;
- if (!dbus_message_iter_append_basic (&variant_iter,
- dbus_type[0], &bool))
- _g_dbus_oom ();
- }
- else
- {
- /* All other types have the same size as dbus types */
- if (!dbus_message_iter_append_basic (&variant_iter,
- dbus_type[0], value_p))
- _g_dbus_oom ();
- }
-
- if (obj)
- g_object_unref (obj);
-
- if (!dbus_message_iter_close_container (&inner_struct_iter, &variant_iter))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_close_container (iter, &inner_struct_iter))
- _g_dbus_oom ();
-}
-
-void
-_g_dbus_append_file_info (DBusMessageIter *iter,
- GFileInfo *info)
-{
- DBusMessageIter struct_iter, array_iter;
- char **attributes;
- int i;
-
- attributes = g_file_info_list_attributes (info, NULL);
-
- if (!dbus_message_iter_open_container (iter,
- DBUS_TYPE_STRUCT,
- NULL,
- &struct_iter))
- _g_dbus_oom ();
-
-
- if (!dbus_message_iter_open_container (&struct_iter,
- DBUS_TYPE_ARRAY,
- DBUS_STRUCT_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_VARIANT_AS_STRING
- DBUS_STRUCT_END_CHAR_AS_STRING,
- &array_iter))
- _g_dbus_oom ();
-
- for (i = 0; attributes[i] != NULL; i++)
- {
- GFileAttributeType type;
- gpointer value_p;
-
- if (g_file_info_get_attribute_data (info, attributes[i], &type, &value_p, NULL))
- _g_dbus_append_file_attribute (&array_iter, attributes [i], type, value_p);
- }
-
- g_strfreev (attributes);
-
- if (!dbus_message_iter_close_container (&struct_iter, &array_iter))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_close_container (iter, &struct_iter))
- _g_dbus_oom ();
-}
-
-gboolean
-_g_dbus_get_file_attribute (DBusMessageIter *iter,
- gchar **attribute,
- GFileAttributeType *type,
- GDbusAttributeValue *value)
-{
- char *str;
- char **strs;
- int n_elements;
- DBusMessageIter inner_struct_iter, variant_iter, cstring_iter, obj_iter;
- const gchar *attribute_temp;
- dbus_uint32_t obj_type;
- dbus_bool_t dbus_bool;
- GObject *obj;
-
- dbus_message_iter_recurse (iter, &inner_struct_iter);
-
- if (dbus_message_iter_get_arg_type (&inner_struct_iter) != DBUS_TYPE_STRING)
- goto error;
-
- dbus_message_iter_get_basic (&inner_struct_iter, &attribute_temp);
- *attribute = g_strdup (attribute_temp);
-
- dbus_message_iter_next (&inner_struct_iter);
-
- if (dbus_message_iter_get_arg_type (&inner_struct_iter) != DBUS_TYPE_VARIANT)
- goto error;
-
- dbus_message_iter_recurse (&inner_struct_iter, &variant_iter);
-
- switch (dbus_message_iter_get_arg_type (&variant_iter))
- {
- case DBUS_TYPE_STRING:
- *type = G_FILE_ATTRIBUTE_TYPE_STRING;
- dbus_message_iter_get_basic (&variant_iter, &str);
- value->ptr = g_strdup (str);
- break;
- case DBUS_TYPE_ARRAY:
- if (dbus_message_iter_get_element_type (&variant_iter) != DBUS_TYPE_BYTE)
- goto error;
-
- *type = G_FILE_ATTRIBUTE_TYPE_BYTE_STRING;
-
- dbus_message_iter_recurse (&variant_iter, &cstring_iter);
- dbus_message_iter_get_fixed_array (&cstring_iter,
- &str, &n_elements);
- value->ptr = g_strndup (str, n_elements);
- break;
- case DBUS_TYPE_BOOLEAN:
- dbus_message_iter_get_basic (&variant_iter, &dbus_bool);
- value->boolean = dbus_bool;
- *type = G_FILE_ATTRIBUTE_TYPE_BOOLEAN;
- break;
- case DBUS_TYPE_UINT32:
- dbus_message_iter_get_basic (&variant_iter, value);
- *type = G_FILE_ATTRIBUTE_TYPE_UINT32;
- break;
- case DBUS_TYPE_INT32:
- dbus_message_iter_get_basic (&variant_iter, value);
- *type = G_FILE_ATTRIBUTE_TYPE_INT32;
- break;
- case DBUS_TYPE_UINT64:
- dbus_message_iter_get_basic (&variant_iter, value);
- *type = G_FILE_ATTRIBUTE_TYPE_UINT64;
- break;
- case DBUS_TYPE_INT64:
- dbus_message_iter_get_basic (&variant_iter, value);
- *type = G_FILE_ATTRIBUTE_TYPE_INT64;
- break;
- case DBUS_TYPE_STRUCT:
- dbus_message_iter_recurse (&variant_iter, &obj_iter);
- if (dbus_message_iter_get_arg_type (&obj_iter) != DBUS_TYPE_UINT32)
- goto error;
-
- *type = G_FILE_ATTRIBUTE_TYPE_OBJECT;
-
- dbus_message_iter_get_basic (&obj_iter, &obj_type);
- obj = NULL;
-
- dbus_message_iter_next (&obj_iter);
- /* 0 == NULL */
-
- if (obj_type == 1)
- {
- /* G_THEMED_ICON */
- if (_g_dbus_message_iter_get_args (&obj_iter,
- NULL,
- DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
- &strs, &n_elements, 0))
- {
- obj = G_OBJECT (g_themed_icon_new_from_names (strs, n_elements));
- dbus_free_string_array (strs);
- }
- }
- else if (obj_type == 2)
- {
- /* G_FILE_ICON, w/ local file */
- if (_g_dbus_message_iter_get_args (&obj_iter,
- NULL,
- G_DBUS_TYPE_CSTRING, &str,
- 0))
- {
- GFile *file = g_file_new_for_path (str);
- obj = G_OBJECT (g_file_icon_new (file));
- g_free (str);
- }
- }
- else
- {
- /* NULL (or unsupported) */
- if (obj_type != 0)
- g_warning ("Unsupported object type in file attribute");
- }
-
- value->ptr = obj;
- break;
- default:
- goto error;
- }
-
- return TRUE;
-
- error:
- return FALSE;
-}
-
-GFileInfo *
-_g_dbus_get_file_info (DBusMessageIter *iter,
- GError **error)
-{
- GFileInfo *info;
- DBusMessageIter struct_iter, array_iter;
- gchar *attribute;
- GFileAttributeType type;
- GDbusAttributeValue value;
-
- info = g_file_info_new ();
-
- if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_STRUCT)
- goto error;
-
- dbus_message_iter_recurse (iter, &struct_iter);
-
- if (dbus_message_iter_get_arg_type (&struct_iter) != DBUS_TYPE_ARRAY)
- goto error;
-
- dbus_message_iter_recurse (&struct_iter, &array_iter);
-
- while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_STRUCT)
- {
- if (!_g_dbus_get_file_attribute (&array_iter, &attribute, &type, &value))
- goto error;
-
- g_file_info_set_attribute (info, attribute, type, _g_dbus_attribute_as_pointer (type, &value));
-
- g_free (attribute);
- _g_dbus_attribute_value_destroy (type, &value);
-
- dbus_message_iter_next (&array_iter);
- }
-
- dbus_message_iter_next (iter);
- return info;
-
- error:
- g_object_unref (info);
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid file info format"));
- return NULL;
-}
-
-GFileAttributeInfoList *
-_g_dbus_get_attribute_info_list (DBusMessageIter *iter,
- GError **error)
-{
- GFileAttributeInfoList *list;
- DBusMessageIter array_iter, struct_iter;
- const char *name;
- dbus_uint32_t type, flags;
-
- if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_ARRAY ||
- dbus_message_iter_get_element_type (iter) != DBUS_TYPE_STRUCT)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid attribute info list content"));
- return NULL;
- }
-
- list = g_file_attribute_info_list_new ();
-
- dbus_message_iter_recurse (iter, &array_iter);
- while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_STRUCT)
- {
- dbus_message_iter_recurse (&array_iter, &struct_iter);
-
- if (dbus_message_iter_get_arg_type (&struct_iter) == DBUS_TYPE_STRING)
- {
- dbus_message_iter_get_basic (&struct_iter, &name);
- dbus_message_iter_next (&struct_iter);
-
- if (dbus_message_iter_get_arg_type (&struct_iter) == DBUS_TYPE_UINT32)
- {
- dbus_message_iter_get_basic (&struct_iter, &type);
- dbus_message_iter_next (&struct_iter);
-
- if (dbus_message_iter_get_arg_type (&struct_iter) == DBUS_TYPE_UINT32)
- {
- dbus_message_iter_get_basic (&struct_iter, &flags);
-
- g_file_attribute_info_list_add (list, name, type, flags);
- }
- }
- }
-
- dbus_message_iter_next (&array_iter);
- }
-
- return list;
-}
-
-void
-_g_dbus_append_attribute_info_list (DBusMessageIter *iter,
- GFileAttributeInfoList *list)
-{
- DBusMessageIter array_iter, struct_iter;
- int i;
- dbus_uint32_t dbus_type, dbus_flags;
-
- if (!dbus_message_iter_open_container (iter,
- DBUS_TYPE_ARRAY,
- DBUS_STRUCT_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_UINT32_AS_STRING
- DBUS_TYPE_UINT32_AS_STRING
- DBUS_STRUCT_END_CHAR_AS_STRING,
- &array_iter))
- _g_dbus_oom ();
-
- for (i = 0; i < list->n_infos; i++)
- {
- if (!dbus_message_iter_open_container (&array_iter,
- DBUS_TYPE_STRUCT,
- NULL,
- &struct_iter))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_STRING, &list->infos[i].name))
- _g_dbus_oom ();
-
- dbus_type = list->infos[i].type;
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_UINT32, &dbus_type))
- _g_dbus_oom ();
-
- dbus_flags = list->infos[i].flags;
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_UINT32, &dbus_flags))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_close_container (&array_iter, &struct_iter))
- _g_dbus_oom ();
- }
-
- if (!dbus_message_iter_close_container (iter, &array_iter))
- _g_dbus_oom ();
-}
diff --git a/common/gvfsdaemonprotocol.h b/common/gvfsdaemonprotocol.h
deleted file mode 100644
index 0e73c52e..00000000
--- a/common/gvfsdaemonprotocol.h
+++ /dev/null
@@ -1,186 +0,0 @@
-#ifndef __G_VFS_DAEMON_PROTOCOL_H__
-#define __G_VFS_DAEMON_PROTOCOL_H__
-
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-/* The well known name of the main daemon */
-#define G_VFS_DBUS_DAEMON_NAME "org.gtk.vfs.Daemon"
-
-/* The mount tracking interface in the main daemon */
-#define G_VFS_DBUS_MOUNTTRACKER_INTERFACE "org.gtk.vfs.MountTracker"
-#define G_VFS_DBUS_MOUNTTRACKER_PATH "/org/gtk/vfs/mounttracker"
-#define G_VFS_DBUS_MOUNTTRACKER_OP_LOOKUP_MOUNT "lookupMount"
-#define G_VFS_DBUS_MOUNTTRACKER_OP_MOUNT_LOCATION "mountLocation"
-#define G_VFS_DBUS_MOUNTTRACKER_OP_LIST_MOUNTS "listMounts"
-#define G_VFS_DBUS_MOUNTTRACKER_OP_REGISTER_MOUNT "registerMount"
-#define G_VFS_DBUS_MOUNTTRACKER_OP_UNREGISTER_MOUNT "unregisterMount"
-#define G_VFS_DBUS_MOUNTTRACKER_OP_LIST_MOUNT_TYPES "listMountTypes"
-#define G_VFS_DBUS_MOUNTTRACKER_OP_LIST_MOUNTABLE_INFO "listMountableInfo"
-#define G_VFS_DBUS_MOUNTTRACKER_OP_REGISTER_FUSE "registerFuse"
-#define G_VFS_DBUS_MOUNTTRACKER_SIGNAL_MOUNTED "mounted"
-#define G_VFS_DBUS_MOUNTTRACKER_SIGNAL_UNMOUNTED "unmounted"
-
-/* Each mount (there might be several in a daemon) implements one of these interfaces
- for standard i/o operations */
-#define G_VFS_DBUS_MOUNT_INTERFACE "org.gtk.vfs.Mount"
-#define G_VFS_DBUS_MOUNT_OP_UNMOUNT "Unmount"
-#define G_VFS_DBUS_MOUNT_OP_OPEN_FOR_READ "OpenForRead"
-#define G_VFS_DBUS_MOUNT_OP_OPEN_FOR_WRITE "OpenForWrite"
-#define G_VFS_DBUS_MOUNT_OP_QUERY_INFO "QueryInfo"
-#define G_VFS_DBUS_MOUNT_OP_QUERY_FILESYSTEM_INFO "QueryFilesystemInfo"
-#define G_VFS_DBUS_MOUNT_OP_ENUMERATE "Enumerate"
-#define G_VFS_DBUS_MOUNT_OP_CREATE_DIR_MONITOR "CreateDirectoryMonitor"
-#define G_VFS_DBUS_MOUNT_OP_CREATE_FILE_MONITOR "CreateFileMonitor"
-#define G_VFS_DBUS_MOUNT_OP_MOUNT_MOUNTABLE "MountMountable"
-#define G_VFS_DBUS_MOUNT_OP_UNMOUNT_MOUNTABLE "UnountMountable"
-#define G_VFS_DBUS_MOUNT_OP_EJECT_MOUNTABLE "EjectMountable"
-#define G_VFS_DBUS_MOUNT_OP_SET_DISPLAY_NAME "SetDisplayName"
-#define G_VFS_DBUS_MOUNT_OP_DELETE "Delete"
-#define G_VFS_DBUS_MOUNT_OP_TRASH "Trash"
-#define G_VFS_DBUS_MOUNT_OP_MAKE_DIRECTORY "MakeDirectory"
-#define G_VFS_DBUS_MOUNT_OP_MAKE_SYMBOLIC_LINK "MakeSymbolicLink"
-#define G_VFS_DBUS_MOUNT_OP_COPY "Copy"
-#define G_VFS_DBUS_MOUNT_OP_MOVE "Move"
-#define G_VFS_DBUS_MOUNT_OP_PUSH "Push"
-#define G_VFS_DBUS_MOUNT_OP_PULL "Pull"
-#define G_VFS_DBUS_MOUNT_OP_SET_ATTRIBUTE "SetAttribute"
-#define G_VFS_DBUS_MOUNT_OP_QUERY_SETTABLE_ATTRIBUTES "QuerySettableAttributes"
-#define G_VFS_DBUS_MOUNT_OP_QUERY_WRITABLE_NAMESPACES "QueryWritableNamespaces"
-
-/* Progress callback interface for copy and move */
-#define G_VFS_DBUS_PROGRESS_INTERFACE "org.gtk.vfs.Progress"
-#define G_VFS_DBUS_PROGRESS_OP_PROGRESS "Progress"
-
-/* mount daemons that support mounting more mounts implement this,
- and set the dbus name in the mountable description file */
-#define G_VFS_DBUS_MOUNTABLE_INTERFACE "org.gtk.vfs.Mountable"
-#define G_VFS_DBUS_MOUNTABLE_PATH "/org/gtk/vfs/mountable"
-#define G_VFS_DBUS_MOUNTABLE_OP_MOUNT "mount"
-
-#define G_VFS_DBUS_ERROR_SOCKET_FAILED "org.gtk.vfs.Error.SocketFailed"
-
-/* Each daemon (main and for mounts) implement this. */
-#define G_VFS_DBUS_DAEMON_INTERFACE "org.gtk.vfs.Daemon"
-#define G_VFS_DBUS_DAEMON_PATH "/org/gtk/vfs/Daemon"
-#define G_VFS_DBUS_OP_GET_CONNECTION "GetConnection"
-#define G_VFS_DBUS_OP_CANCEL "Cancel"
-
-/* Used by the dbus-proxying implementation of GMoutOperation */
-#define G_VFS_DBUS_MOUNT_OPERATION_INTERFACE "org.gtk.vfs.MountOperation"
-#define G_VFS_DBUS_MOUNT_OPERATION_OP_ASK_PASSWORD "askPassword"
-#define G_VFS_DBUS_MOUNT_OPERATION_OP_ASK_QUESTION "askQuestion"
-
-/* Implemented by the spawner of a process, the spawned process sends the
- spawned message (with noreply) when it has spawned and gotten a dbus id */
-#define G_VFS_DBUS_SPAWNER_INTERFACE "org.gtk.vfs.Spawner"
-#define G_VFS_DBUS_OP_SPAWNED "spawned"
-
-/* Implemented by client side for a file enumerator */
-#define G_VFS_DBUS_ENUMERATOR_INTERFACE "org.gtk.vfs.Enumerator"
-#define G_VFS_DBUS_ENUMERATOR_OP_DONE "Done"
-#define G_VFS_DBUS_ENUMERATOR_OP_GOT_INFO "GotInfo"
-
-#define G_VFS_DBUS_MONITOR_INTERFACE "org.gtk.vfs.Monitor"
-#define G_VFS_DBUS_MONITOR_OP_SUBSCRIBE "Subscribe"
-#define G_VFS_DBUS_MONITOR_OP_UNSUBSCRIBE "Unsubscribe"
-
-#define G_VFS_DBUS_MONITOR_CLIENT_INTERFACE "org.gtk.vfs.MonitorClient"
-#define G_VFS_DBUS_MONITOR_CLIENT_OP_CHANGED "Changed"
-
-
-/* Mounts time out in 10 minutes, since they can be slow, with auth, etc */
-#define G_VFS_DBUS_MOUNT_TIMEOUT_MSECS (1000*60*10)
-/* Normal ops are faster, one minute timeout */
-#define G_VFS_DBUS_TIMEOUT_MSECS (1000*60)
-
-typedef struct {
- guint32 command;
- guint32 seq_nr;
- guint32 arg1;
- guint32 arg2;
- guint32 data_len;
-} GVfsDaemonSocketProtocolRequest;
-
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SIZE sizeof(GVfsDaemonSocketProtocolRequest)
-
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_READ 0
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_WRITE 1
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CLOSE 2
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CANCEL 3
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_SET 4
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_END 5
-
-/*
-read, readahead reply:
-type, seek_generation, size, data
-
-seek reply:
-type, pos (64),
-
-error:
-type, code, size, data (size bytes, 2 strings: domain, message)
-*/
-
-typedef struct {
- guint32 type;
- guint32 seq_nr;
- guint32 arg1;
- guint32 arg2;
-} GVfsDaemonSocketProtocolReply;
-
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE 16
-
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_DATA 0
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_ERROR 1
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SEEK_POS 2
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_WRITTEN 3
-#define G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_CLOSED 4
-
-#define G_FILE_INFO_INNER_TYPE_AS_STRING \
- DBUS_TYPE_ARRAY_AS_STRING \
- DBUS_STRUCT_BEGIN_CHAR_AS_STRING \
- DBUS_TYPE_STRING_AS_STRING \
- DBUS_TYPE_VARIANT_AS_STRING \
- DBUS_STRUCT_END_CHAR_AS_STRING
-
-#define G_FILE_INFO_TYPE_AS_STRING \
- DBUS_STRUCT_BEGIN_CHAR_AS_STRING \
- G_FILE_INFO_INNER_TYPE_AS_STRING \
- DBUS_STRUCT_END_CHAR_AS_STRING
-
-
-typedef union {
- gboolean boolean;
- guint32 uint32;
- guint64 uint64;
- gpointer ptr;
-} GDbusAttributeValue;
-
-void _g_dbus_attribute_value_destroy (GFileAttributeType type,
- GDbusAttributeValue *value);
-gpointer _g_dbus_attribute_as_pointer (GFileAttributeType type,
- GDbusAttributeValue *value);
-const char*_g_dbus_type_from_file_attribute_type (GFileAttributeType type);
-void _g_dbus_append_file_attribute (DBusMessageIter *iter,
- const char *attribute,
- GFileAttributeType type,
- gpointer value_p);
-void _g_dbus_append_file_info (DBusMessageIter *iter,
- GFileInfo *file_info);
-gboolean _g_dbus_get_file_attribute (DBusMessageIter *iter,
- gchar **attribute,
- GFileAttributeType *type,
- GDbusAttributeValue *value);
-GFileInfo *_g_dbus_get_file_info (DBusMessageIter *iter,
- GError **error);
-
-GFileAttributeInfoList *_g_dbus_get_attribute_info_list (DBusMessageIter *iter,
- GError **error);
-void _g_dbus_append_attribute_info_list (DBusMessageIter *iter,
- GFileAttributeInfoList *list);
-
-G_END_DECLS
-
-#endif /* __G_VFS_DAEMON_PROTOCOL_H__ */
diff --git a/configure.ac b/configure.ac
deleted file mode 100644
index 19bdb79a..00000000
--- a/configure.ac
+++ /dev/null
@@ -1,584 +0,0 @@
-AC_INIT(client/gdaemonvfs.h)
-
-AM_INIT_AUTOMAKE(gvfs, 0.99.8)
-AM_CONFIG_HEADER(config.h)
-
-AM_SANITY_CHECK
-
-AC_C_CONST
-AC_ISC_POSIX
-AC_PROG_CC
-AC_PROG_CPP
-AC_PROG_INSTALL
-AC_PROG_LN_S
-AC_PROG_MAKE_SET
-AM_DISABLE_STATIC
-AM_PROG_LIBTOOL
-AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-AM_PROG_CC_C_O
-
-
-# Make libtool use --silent when --silent is passed to make
-changequote(,)dnl
-LIBTOOL="${LIBTOOL} \$(shell echo \"\$(MFLAGS)\" | awk '/^[^ ]*s/ { print \"--silent\" }')"
-changequote([,])dnl
-
-AC_TYPE_PID_T
-AC_TYPE_SIGNAL
-AC_TYPE_SIZE_T
-AC_TYPE_UID_T
-
-AH_VERBATIM([_GNU_SOURCE],
-[/* Enable GNU extensions on systems that have them. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE
-#endif])
-
-saved_CFLAGS=$CFLAGS
-AC_CHECK_MEMBERS([struct stat.st_mtimensec, struct stat.st_mtim.tv_nsec, struct stat.st_atimensec, struct stat.st_atim.tv_nsec, struct stat.st_ctimensec, struct stat.st_ctim.tv_nsec])
-CFLAGS=$saved_CFLAGS
-
-LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^[[^_]].*"'
-AC_SUBST(LIBTOOL_EXPORT_OPTIONS)
-
-GTK_DOC_CHECK
-DISTCHECK_CONFIGURE_FLAGS="--enable-gtk-doc"
-AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
-
-PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.17.6 gthread-2.0 gobject-2.0 gmodule-no-export-2.0 gio-unix-2.0 gio-2.0)
-AC_SUBST(GLIB_CFLAGS)
-AC_SUBST(GLIB_LIBS)
-
-PKG_CHECK_MODULES(DBUS, dbus-1)
-AC_SUBST(DBUS_CFLAGS)
-AC_SUBST(DBUS_LIBS)
-
-AC_ARG_WITH(dbus_service_dir, [ --with-dbus-service-dir=PATH choose directory for dbus service files, [default=PREFIX/share/dbus-1/services]], with_dbus_service_dir="$withval", with_dbus_service_dir=$datadir/dbus-1/services)
-DBUS_SERVICE_DIR=$with_dbus_service_dir
-AC_SUBST(DBUS_SERVICE_DIR)
-
-dnl **** gio module path handling ****
-giomodulesdir=`pkg-config --define-variable=libdir=$libdir --variable=giomoduledir gio-2.0`
-AC_SUBST(giomodulesdir)
-
-dnl ****************************
-dnl *** Checks for intltool ***
-dnl ****************************
-
-IT_PROG_INTLTOOL([0.35.0])
-GETTEXT_PACKAGE=gvfs
-
-AC_SUBST([GETTEXT_PACKAGE])
-AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"],[The gettext domain name])
-AM_GLIB_GNU_GETTEXT
-
-dnl ****************************
-dnl *** Checks for gettext ***
-dnl ****************************
-
-dnl *** disabled by now, using intltool ***
-dnl *** we'll revert when glib-gettexttize will be able
-dnl *** to manage [enconding: UTF-8] in POTIFILES.in
-
-dnl GETTEXT_PACKAGE=gvfs
-dnl AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [The gettext domain name])
-dnl AC_SUBST(GETTEXT_PACKAGE)
-
-dnl ALL_LINGUAS=""
-
-dnl AM_GLIB_GNU_GETTEXT
-
-dnl LIBS="$LIBS $INTLLIBS"
-
-dnl AM_GLIB_DEFINE_LOCALEDIR(GVFS_LOCALEDIR)
-
-dnl ****************************
-dnl *** Checks for ssh stuff ***
-dnl ****************************
-
-AC_PATH_PROG(SSH_PROGRAM, ssh, "ssh")
-
-dnl ****************************
-dnl *** Checks for pty stuff ***
-dnl ****************************
-
-AC_CHECK_HEADERS(sys/un.h stropts.h termios.h utmp.h sys/uio.h sys/param.h)
-
-# Check for PTY handling functions.
-AC_CHECK_FUNCS(getpt posix_openpt grantpt unlockpt ptsname ptsname_r)
-
-# Pull in the right libraries for various functions which might not be
-# bundled into an exploded libc.
-AC_CHECK_FUNC(socketpair,[have_socketpair=1],AC_CHECK_LIB(socket,socketpair,[have_socketpair=1; LIBS="$LIBS -lsocket"]))
-if test x$have_socketpair = x1 ; then
- AC_DEFINE(HAVE_SOCKETPAIR,1,[Define if you have the socketpair function.])
-fi
-
-AC_SEARCH_LIBS(login_tty, util, [AC_DEFINE([HAVE_LOGIN_TTY],[],[Whether login_tty is available])])
-
-dnl **************************************************
-dnl *** Check if we should build with http backend ***
-dnl **************************************************
-AC_ARG_ENABLE(http, [ --disable-http build without http/dav backend])
-msg_http=no
-HTTP_CFLAGS=
-HTTP_LIBS=
-
-if test "x$enable_http" != "xno"; then
- PKG_CHECK_EXISTS(libsoup-2.4 >= 2.23.91, msg_http=yes)
-
- if test "x$msg_http" == "xyes"; then
- PKG_CHECK_MODULES(HTTP, libsoup-2.4 libxml-2.0)
- AC_DEFINE(HAVE_HTTP, 1, [Define to 1 if http/dav is going to be built])
- fi
-fi
-
-AC_SUBST(HTTP_CFLAGS)
-AC_SUBST(HTTP_LIBS)
-AM_CONDITIONAL(HAVE_HTTP, [test "$msg_http" = "yes"])
-
-dnl **************************************************
-dnl *** Check if we should build with DNS-SD backend ***
-dnl **************************************************
-AM_CONDITIONAL(HAVE_AVAHI, false)
-
-AC_ARG_ENABLE(avahi, [ --disable-avahi build without avahi support])
-msg_avahi=no
-if test "x$enable_avahi" != "xno"; then
- PKG_CHECK_MODULES(AVAHI, avahi-glib >= 0.6 avahi-client >= 0.6,
- [AM_CONDITIONAL(HAVE_AVAHI, true)
- AC_DEFINE(HAVE_AVAHI, [], [Set if we can use avahi])]
- msg_avahi=yes,
- [AM_CONDITIONAL(HAVE_AVAHI, false)])
- AC_SUBST(AVAHI_CFLAGS)
- AC_SUBST(AVAHI_LIBS)
-fi
-
-dnl **********************
-dnl *** Check for FUSE ***
-dnl **********************
-AC_ARG_ENABLE(fuse, [ --disable-fuse build without FUSE support])
-msg_fuse=no
-FUSE_LIBS=
-FUSE_CFLAGS=
-
-if test "x$enable_fuse" != "xno"; then
- PKG_CHECK_EXISTS(fuse, msg_fuse=yes)
-
- if test "x$msg_fuse" == "xyes"; then
- PKG_CHECK_MODULES(FUSE, fuse)
- AC_DEFINE(HAVE_FUSE, 1, [Define to 1 if FUSE is available])
- fi
-fi
-
-AC_SUBST(FUSE_LIBS)
-AC_SUBST(FUSE_CFLAGS)
-
-AM_CONDITIONAL(USE_FUSE, [test "$msg_fuse" = "yes"])
-
-dnl **********************
-dnl *** Check for GConf ***
-dnl **********************
-AC_ARG_ENABLE(gconf, [ --disable-gconf build without GConf support])
-msg_gconf=no
-GCONF_LIBS=
-GCONF_CFLAGS=
-
-if test "x$enable_gconf" != "xno"; then
- PKG_CHECK_EXISTS(gconf-2.0, msg_gconf=yes)
-
- if test "x$msg_gconf" == "xyes"; then
- PKG_CHECK_MODULES(GCONF, gconf-2.0)
- AC_DEFINE(HAVE_GCONF, 1, [Define to 1 if GConf is available])
- fi
-fi
-
-AC_SUBST(GCONF_LIBS)
-AC_SUBST(GCONF_CFLAGS)
-
-AM_CONDITIONAL(USE_GCONF, [test "$msg_gconf" = "yes"])
-
-dnl **********************
-dnl *** Check for HAL ***
-dnl **********************
-AC_ARG_ENABLE(hal, [ --disable-hal build without HAL support])
-msg_hal=no
-have_hal_fast_init=no
-HAL_LIBS=
-HAL_CFLAGS=
-HAL_REQUIRED=0.5.10
-
-if test "x$enable_hal" != "xno"; then
- PKG_CHECK_EXISTS([hal >= $HAL_REQUIRED], msg_hal=yes)
-
- if test "x$msg_hal" == "xyes"; then
- PKG_CHECK_MODULES([HAL],[hal >= $HAL_REQUIRED])
- AC_DEFINE(HAVE_HAL, 1, [Define to 1 if HAL is available])
- save_libs="$LIBS"
- LIBS="$HAL_LIBS"
- AC_CHECK_LIB(hal, libhal_get_all_devices_with_properties, have_hal_fast_init=yes)
- if test "x$have_hal_fast_init" == "xyes"; then
- AC_DEFINE(HAVE_HAL_FAST_INIT, 1, [Define to 1 if libhal_get_all_devices_with_properties is available])
- fi
- LIBS="$save_libs"
- fi
-fi
-
-AC_SUBST(HAL_LIBS)
-AC_SUBST(HAL_CFLAGS)
-
-AM_CONDITIONAL(USE_HAL, [test "$msg_hal" = "yes"])
-
-dnl **************************************************
-dnl *** Check if we should build with CDDA backend ***
-dnl **************************************************
-AC_ARG_ENABLE(cdda, [ --disable-cdda build without CDDA backend])
-msg_cdda=no
-CDDA_LIBS=
-CDDA_CFLAGS=
-
-if test "x$enable_cdda" != "xno"; then
- PKG_CHECK_EXISTS(libcdio_paranoia >= 0.78.2 hal >= $HAL_REQUIRED, msg_cdda=yes)
-
- if test "x$msg_cdda" == "xyes"; then
- PKG_CHECK_MODULES(CDDA, libcdio_paranoia hal >= $HAL_REQUIRED)
- AC_DEFINE(HAVE_CDDA, 1, [Define to 1 if CDDA is going to be built])
- fi
-fi
-
-AC_SUBST(CDDA_LIBS)
-AC_SUBST(CDDA_CFLAGS)
-
-AM_CONDITIONAL(USE_CDDA, [test "$msg_cdda" = "yes"])
-
-dnl *****************************************************
-dnl *** Check if we should build with obexftp backend ***
-dnl *****************************************************
-AC_ARG_ENABLE(obexftp, [ --disable-obexftp build without ObexFTP backend])
-msg_obexftp=no
-OBEXFTP_LIBS=
-OBEXFTP_CFLAGS=
-
-if test "x$enable_obexftp" != "xno"; then
- PKG_CHECK_EXISTS(dbus-glib-1 bluez >= 3.12, msg_obexftp=yes)
-
- dnl Make sure we have expat
- AC_CHECK_LIB(expat, XML_ParserCreate_MM,
- [ AC_CHECK_HEADERS(expat.h, have_expat=true, have_expat=false) ],
- have_expat=false)
-
- if test "x$msg_obexftp" == "xyes" -a "x$have_expat" == "xtrue"; then
- PKG_CHECK_MODULES(OBEXFTP, dbus-glib-1 bluez >= 3.12)
- AC_SUBST(OBEXFTP_LIBS)
- AC_SUBST(OBEXFTP_CFLAGS)
-
- msg_obexftp=yes
- AC_DEFINE(HAVE_OBEXFTP, 1, [Define to 1 if ObexFTP is going to be built])
- XML_CFLAGS=""
- XML_LIBS="-lexpat"
- else
- msg_obexftp=no
- fi
-fi
-
-AC_SUBST(XML_LIBS)
-AC_SUBST(XML_CFLAGS)
-
-AM_CONDITIONAL(USE_OBEXFTP, [test "$msg_obexftp" = "yes"])
-
-dnl *************************
-dnl *** Check for gphoto2 ***
-dnl *************************
-AC_ARG_ENABLE(gphoto2, [ --disable-gphoto2 build without gphoto2 support])
-msg_gphoto2=no
-GPHOTO2_LIBS=
-GPHOTO2_CFLAGS=
-
-if test "x$enable_gphoto2" != "xno" -a "x$msg_hal" = "xyes" ; then
- PKG_CHECK_EXISTS(libgphoto2, msg_gphoto2=yes)
-
- # Need OS tweaks in hal volume monitor backend
- case "$host" in
- *-linux*)
- use_gphoto2=yes
- ;;
- *)
- use_gphoto2=no
- ;;
- esac
-
- if test "x$msg_gphoto2" == "xyes"; then
- if test "x$use_gphoto2" == "xyes"; then
- PKG_CHECK_MODULES(GPHOTO2, libgphoto2 >= 2.4.0)
- AC_DEFINE(HAVE_GPHOTO2, 1, [Define to 1 if gphoto2 is available])
- else
- AC_MSG_WARN([Not building with gphoto2 support. Need OS tweaks in hal volume monitor.])
- msg_gphoto2=no
- fi
- fi
-fi
-
-AC_SUBST(GPHOTO2_LIBS)
-AC_SUBST(GPHOTO2_CFLAGS)
-
-AM_CONDITIONAL(USE_GPHOTO2, [test "$msg_gphoto2" = "yes"])
-
-dnl *******************************
-dnl *** Check for GNOME Keyring ***
-dnl *******************************
-AC_ARG_ENABLE(keyring, [ --disable-keyring build without GNOME Keyring support])
-msg_keyring=no
-KEYRING_LIBS=
-KEYRING_CFLAGS=
-
-if test "x$enable_keyring" != "xno"; then
- PKG_CHECK_EXISTS(gnome-keyring-1, msg_keyring=yes)
-
- if test "x$msg_keyring" == "xyes"; then
- PKG_CHECK_MODULES(KEYRING, gnome-keyring-1)
- AC_DEFINE(HAVE_KEYRING, 1, [Define to 1 if GNOME Keyring is available])
- fi
-fi
-
-AC_SUBST(KEYRING_LIBS)
-AC_SUBST(KEYRING_CFLAGS)
-
-AM_CONDITIONAL(USE_KEYRING, [test "$msg_keyring" = "yes"])
-
-dnl ==========================================================================
-dnl Samba 3.0
-
-AC_ARG_ENABLE(samba, [ --disable-samba build without samba support])
-msg_samba="no"
-if test "x$enable_samba" != "xno"; then
- AC_ARG_WITH(samba-includes, [ --with-samba-includes=PREFIX Location of samba includes.],
- with_samba_includes="$withval", with_samba_includes="/usr/include")
- have_samba_includes="no"
- if test "x${with_samba_includes}" != "xno"; then
- CPPFLAGS_save="$CPPFLAGS"
-
- CPPFLAGS="$CPPFLAGS -I$with_samba_includes"
- AC_CHECK_HEADER(libsmbclient.h, [ samba_includes="yes" ])
- CPPFLAGS="$CPPFLAGS_save"
-
- if test "x{samba_includes}" != "xno" -a "x${samba_includes}" != "x"; then
- have_samba_includes="yes"
- if test "${with_samba_includes}" != "/usr/include" ; then
- SAMBA_CFLAGS="-I$with_samba_includes"
- else
- SAMBA_CFLAGS=""
- fi
-
- CPPFLAGS="$CPPFLAGS -I$with_samba_includes"
- AC_CHECK_MEMBER(SMBCCTX.flags,
- [AC_DEFINE(HAVE_SAMBA_FLAGS,, [Defined if flags available in SMBCCTXT])],,
- [#include <libsmbclient.h>])
- AC_CHECK_MEMBER(SMBCCTX.close,
- [AC_DEFINE(HAVE_SAMBA_OLD_CLOSE, , [Defined if old close is available in SMBCCTXT])],,
- [#include <libsmbclient.h>])
- CPPFLAGS="$CPPFLAGS_save"
- else
- SAMBA_CFLAGS=""
- fi
- fi
- AC_ARG_WITH(samba-libs, [ --with-samba-libs=PREFIX Location of Samba libs.],
- with_samba_libs="$withval", with_samba_libs="/usr/lib")
- if test "x${with_samba_libs}" != "xno" -a "x${have_samba_includes}" != "xno"; then
- LDFLAGS_save="$LDFLAGS"
-
- LDFLAGS="$LDFLAGS -L$with_samba_libs"
- AC_CHECK_LIB(smbclient, smbc_option_get,samba_libs="yes", samba_libs="no")
- LDFLAGS="$LDFLAGS_save"
- if test "x${samba_libs}" != "xno"; then
- AC_DEFINE(HAVE_SAMBA,, [Define to 1 if you have the samba 3.0 libraries])
- msg_samba="yes"
- if test x$with_samba_libs != x/usr/lib; then
- SAMBA_LIBS="-L$with_samba_libs -lsmbclient"
- else
- SAMBA_LIBS="-lsmbclient"
- fi
- else
- AC_CHECK_LIB(smbclient, smbc_new_context,samba_old_libs="yes", samba_old_libs="no")
- if test "x${samba_old_libs}" != "xno"; then
- msg_samba="Too old, need at least samba 3.0.22"
- fi
- SAMBA_CFLAGS=""
- SAMBA_LIBS=""
- fi
- fi
- AC_MSG_CHECKING(for Samba 3.0 libraries)
- AC_MSG_RESULT($msg_samba)
-fi
-AM_CONDITIONAL(HAVE_SAMBA, test "$msg_samba" = "yes")
-AC_SUBST(SAMBA_CFLAGS)
-AC_SUBST(SAMBA_LIBS)
-
-dnl ==========================================================================
-
-dnl ****************************
-dnl *** Check for libarchive ***
-dnl ****************************
-
-AC_ARG_ENABLE(archive, [ --disable-archive build without archive support])
-msg_archive="no"
-if test "x$enable_archive" != "xno"; then
- AC_ARG_WITH(archive-includes, [ --with-archive-includes=PREFIX Location of archive includes.],
- with_archive_includes="$withval", with_archive_includes="/usr/include")
- have_archive_includes="no"
- if test "x${with_archive_includes}" != "xno"; then
- CPPFLAGS_save="$CPPFLAGS"
-
- CPPFLAGS="$CPPFLAGS -I$with_archive_includes"
- AC_CHECK_HEADER(archive.h, [ archive_includes="yes" ])
- CPPFLAGS="$CPPFLAGS_save"
-
- if test "x{archive_includes}" != "xno" -a "x${archive_includes}" != "x"; then
- have_archive_includes="yes"
- if test "${with_archive_includes}" != "/usr/include" ; then
- ARCHIVE_CFLAGS="-I$with_archive_includes"
- else
- ARCHIVE_CFLAGS=""
- fi
- else
- ARCHIVE_CFLAGS=""
- fi
- fi
- AC_ARG_WITH(archive-libs, [ --with-archive-libs=PREFIX Location of Archive libs.],
- with_archive_libs="$withval", with_archive_libs="/usr/lib")
- if test "x${with_archive_libs}" != "xno" -a "x${have_archive_includes}" != "xno"; then
- LDFLAGS_save="$LDFLAGS"
-
- LDFLAGS="$LDFLAGS -L$with_archive_libs"
- AC_CHECK_LIB(archive, archive_read_open, archive_libs="yes", archive_libs="no")
- LDFLAGS="$LDFLAGS_save"
- if test "x${archive_libs}" != "xno"; then
- AC_DEFINE(HAVE_ARCHIVE,, [Define to 1 if you have the libarchive library])
- msg_archive="yes"
- if test x$with_archive_libs != x/usr/lib; then
- ARCHIVE_LIBS="-L$with_archive_libs -larchive"
- else
- ARCHIVE_LIBS="-larchive"
- fi
- else
- AC_CHECK_LIB(archive, archive_read_open, archive_old_libs="yes", archive_old_libs="no")
- if test "x${archive_old_libs}" != "xno"; then
- msg_archive="Too old, need at least archive 3.0.22"
- fi
- ARCHIVE_CFLAGS=""
- ARCHIVE_LIBS=""
- fi
- fi
- AC_MSG_CHECKING(for Archive 3.libraries)
- AC_MSG_RESULT($msg_archive)
-fi
-AM_CONDITIONAL(HAVE_ARCHIVE, test "$msg_archive" = "yes")
-AC_SUBST(ARCHIVE_CFLAGS)
-AC_SUBST(ARCHIVE_LIBS)
-
-dnl Install bash-completion file?
-AC_ARG_ENABLE([bash-completion],
- AC_HELP_STRING([--disable-bash-completion],
- [build without bash-completion support]),
- msg_bash_completion=$enableval,
- msg_bash_completion=yes)
-if test "x$enable_bash_completion" != "xno"; then
- msg_bash_completion=yes
-fi
-AM_CONDITIONAL(ENABLE_BASHCOMP, test "$msg_bash_completion" = "yes")
-
-AC_ARG_WITH([bash-completion-dir],
- AC_HELP_STRING([--with-bash-completion-dir=PATH],
- [choose directory for bash-completion file (default=SYSCONFDIR/profile.d)]),
- with_bashcomp_dir=$withval,
- with_bashcomp_dir=$sysconfdir/profile.d)
-BASHCOMP_DIR=$with_bashcomp_dir
-AC_SUBST(BASHCOMP_DIR)
-
-dnl ==========================================================================
-
-dnl Globally define_GNU_SOURCE and therefore enable the GNU extensions
-AC_DEFINE(_GNU_SOURCE, 1, [Enable GNU Extensions])
-
-dnl ==========================================================================
-
-AC_DEFINE(_FILE_OFFSET_BITS, 64, [Enable LFS])
-
-dnl ==========================================================================
-
-AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
-
-dnl ==========================================================================
-dnl Turn on the additional warnings last, so -Werror doesn't affect other tests.
-
-AC_ARG_ENABLE(more-warnings,
-[ --enable-more-warnings Maximum compiler warnings],
-set_more_warnings="$enableval",[
-if test -f $srcdir/CVSVERSION; then
- is_cvs_version=true
- set_more_warnings=yes
-else
- set_more_warnings=no
-fi
-])
-AC_MSG_CHECKING(for more warnings, including -Werror)
-if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then
- AC_MSG_RESULT(yes)
- CFLAGS="\
- -Wall \
- -Wchar-subscripts -Wmissing-declarations -Wmissing-prototypes \
- -Wnested-externs -Wpointer-arith \
- -Wcast-align -Wsign-compare \
- $CFLAGS"
-
- for option in -Wno-strict-aliasing -Wno-sign-compare; do
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $option"
- AC_MSG_CHECKING([whether gcc understands $option])
- AC_TRY_COMPILE([], [],
- has_option=yes,
- has_option=no,)
- if test $has_option = no; then
- CFLAGS="$SAVE_CFLAGS"
- fi
- AC_MSG_RESULT($has_option)
- unset has_option
- unset SAVE_CFLAGS
- done
- unset option
-else
- AC_MSG_RESULT(no)
-fi
-
-AC_OUTPUT([
-Makefile
-common/Makefile
-client/Makefile
-daemon/Makefile
-monitor/Makefile
-monitor/proxy/Makefile
-monitor/hal/Makefile
-monitor/gphoto2/Makefile
-gconf/Makefile
-programs/Makefile
-test/Makefile
-po/Makefile.in
-])
-
-echo
-echo "gvfs configuration summary:"
-echo "
- gio module directory : $giomodulesdir
-
- FTP/HTTP/WebDAV support $msg_http
- ObexFTP support $msg_obexftp
- Samba support: $msg_samba
- FUSE support: $msg_fuse
- CDDA support: $msg_cdda
- Gphoto2 support: $msg_gphoto2
- archive support: $msg_archive
- GConf support: $msg_gconf
- DNS-SD support: $msg_avahi
- Use HAL for volume monitor: $msg_hal (with fast init path: $have_hal_fast_init)
- GNOME Keyring support: $msg_keyring
- Bash-completion support: $msg_bash_completion
-"
diff --git a/daemon/.gitignore b/daemon/.gitignore
deleted file mode 100644
index 2331dfbd..00000000
--- a/daemon/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-*~
-*.o
-*.lo
-*.la
-.deps
-.libs
-Makefile
-Makefile.in
-gvfs-daemon
-gvfs-daemon-smb
-gvfs-daemon-ftp
-gvfs-daemon-sftp
-gvfs-daemon-smb-browse
-gvfs-daemon-test
-*.service
-*.mount
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
deleted file mode 100644
index 57e03080..00000000
--- a/daemon/Makefile.am
+++ /dev/null
@@ -1,397 +0,0 @@
-NULL =
-
-mountdir = $(datadir)/gvfs/mounts
-
-INCLUDES = \
- $(SAMBA_CFLAGS) \
- -I$(top_srcdir) \
- -I$(top_srcdir)/common \
- -I$(top_builddir) \
- $(GLIB_CFLAGS) $(DBUS_CFLAGS) \
- $(OBEXFTP_CFLAGS) $(XML_CFLAGS) \
- $(KEYRING_CFLAGS) \
- -DDBUS_API_SUBJECT_TO_CHANGE \
- -DLIBEXEC_DIR=\"$(libexecdir)/\" \
- -DMOUNTABLE_DIR=\"$(mountdir)/\" \
- -DGVFS_LOCALEDIR=\""$(localedir)"\" \
- -DG_DISABLE_DEPRECATED
-
-noinst_LTLIBRARIES=libdaemon.la
-
-libraries = \
- libdaemon.la \
- $(top_builddir)/common/libgvfscommon.la \
- $(GLIB_LIBS) $(DBUS_LIBS) $(KEYRING_LIBS)
-
-# D-BUS service file
-%.service: %.service.in ../config.log
- sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
-
-servicedir = $(DBUS_SERVICE_DIR)
-service_in_files = gvfs-daemon.service.in
-service_DATA = gvfs-daemon.service
-
-%.mount: %.mount.in ../config.log
- sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
-
-libexec_PROGRAMS=gvfsd gvfsd-sftp gvfsd-trash gvfsd-computer gvfsd-burn gvfsd-localtest
-
-mount_in_files = sftp.mount.in trash.mount.in computer.mount.in burn.mount.in localtest.mount.in
-mount_DATA = sftp.mount trash.mount computer.mount burn.mount localtest.mount
-
-mount_in_files += http.mount.in dav.mount.in ftp.mount.in
-if HAVE_HTTP
-mount_DATA += http.mount dav.mount ftp.mount
-libexec_PROGRAMS += gvfsd-http gvfsd-dav gvfsd-ftp
-endif
-
-mount_in_files += smb.mount.in smb-browse.mount.in
-if HAVE_SAMBA
-mount_DATA += smb.mount smb-browse.mount
-libexec_PROGRAMS += gvfsd-smb-browse gvfsd-smb
-endif
-
-mount_in_files += cdda.mount.in
-if USE_CDDA
-mount_DATA += cdda.mount
-libexec_PROGRAMS += gvfsd-cdda
-endif
-
-mount_in_files += gphoto2.mount.in
-if USE_GPHOTO2
-mount_DATA += gphoto2.mount
-libexec_PROGRAMS += gvfsd-gphoto2
-endif
-
-mount_in_files += network.mount.in
-if USE_GCONF
-mount_DATA += network.mount
-libexec_PROGRAMS += gvfsd-network
-endif
-
-mount_in_files += obexftp.mount.in
-if USE_OBEXFTP
-mount_DATA += obexftp.mount
-libexec_PROGRAMS += gvfsd-obexftp
-BUILT_SOURCES = obexftp-marshal.c obexftp-marshal.h
-
-obexftp-marshal.h: obexftp-marshal.list
- glib-genmarshal $< --prefix=obexftp_marshal --header > $@
-
-obexftp-marshal.c: obexftp-marshal.list
- echo "#include \"obexftp-marshal.h\"" > $@ && glib-genmarshal $< --prefix=obexftp_marshal --body >> $@
-
-endif
-
-mount_in_files += dns-sd.mount.in
-if HAVE_AVAHI
-mount_DATA += dns-sd.mount
-libexec_PROGRAMS += gvfsd-dnssd
-endif
-
-mount_in_files += archive.mount.in
-if HAVE_ARCHIVE
-mount_DATA += archive.mount
-libexec_PROGRAMS += gvfsd-archive
-endif
-
-EXTRA_DIST = gvfs-daemon.service.in $(mount_in_files) obexftp-marshal.list
-
-DISTCLEANFILES = gvfs-daemon.service $(mount_DATA)
-
-
-noinst_PROGRAMS = \
- gvfsd-test \
- $(NULL)
-
-libdaemon_la_SOURCES = \
- gvfsdaemon.c gvfsdaemon.h \
- gvfsbackend.c gvfsbackend.h \
- gvfschannel.c gvfschannel.h \
- gvfsreadchannel.c gvfsreadchannel.h \
- gvfswritechannel.c gvfswritechannel.h \
- gvfsmonitor.c gvfsmonitor.h \
- gvfsdaemonutils.c gvfsdaemonutils.h \
- gvfsjob.c gvfsjob.h \
- gvfsjobsource.c gvfsjobsource.h \
- gvfsjobdbus.c gvfsjobdbus.h \
- gvfsjobmount.c gvfsjobmount.h \
- gvfsjobunmount.c gvfsjobunmount.h \
- gvfsjobmountmountable.c gvfsjobmountmountable.h \
- gvfsjobunmountmountable.c gvfsjobunmountmountable.h \
- gvfsjobopenforread.c gvfsjobopenforread.h \
- gvfsjobread.c gvfsjobread.h \
- gvfsjobseekread.c gvfsjobseekread.h \
- gvfsjobcloseread.c gvfsjobcloseread.h \
- gvfsjobopenforwrite.c gvfsjobopenforwrite.h \
- gvfsjobwrite.c gvfsjobwrite.h \
- gvfsjobseekwrite.c gvfsjobseekwrite.h \
- gvfsjobclosewrite.c gvfsjobclosewrite.h \
- gvfsjobqueryinfo.c gvfsjobqueryinfo.h \
- gvfsjobqueryfsinfo.c gvfsjobqueryfsinfo.h \
- gvfsjobenumerate.c gvfsjobenumerate.h \
- gvfsjobsetdisplayname.c gvfsjobsetdisplayname.h \
- gvfsjobtrash.c gvfsjobtrash.h \
- gvfsjobdelete.c gvfsjobdelete.h \
- gvfsjobcopy.c gvfsjobcopy.h \
- gvfsjobmove.c gvfsjobmove.h \
- gvfsjobpush.c gvfsjobpush.h \
- gvfsjobpull.c gvfsjobpull.h \
- gvfsjobmakedirectory.c gvfsjobmakedirectory.h \
- gvfsjobmakesymlink.c gvfsjobmakesymlink.h \
- gvfsjobsetattribute.c gvfsjobsetattribute.h \
- gvfsjobqueryattributes.c gvfsjobqueryattributes.h \
- gvfsjobcreatemonitor.c gvfsjobcreatemonitor.h \
- dbus-gmain.h dbus-gmain.c \
- gvfskeyring.h gvfskeyring.c \
- $(NULL)
-
-gvfsd_SOURCES = \
- mount.c mount.h \
- main.c
-
-gvfsd_LDADD = $(libraries)
-
-gvfsd_test_SOURCES = \
- gvfsbackendtest.c gvfsbackendtest.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_test_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendtest.h \
- -DDEFAULT_BACKEND_TYPE=test \
- -DBACKEND_TYPES='"test", G_VFS_TYPE_BACKEND_TEST,'
-
-gvfsd_test_LDADD = $(libraries)
-
-gvfsd_localtest_SOURCES = \
- gvfsbackendlocaltest.c gvfsbackendlocaltest.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_localtest_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendlocaltest.h \
- -DDEFAULT_BACKEND_TYPE=localtest \
- -DBACKEND_TYPES='"localtest", G_VFS_TYPE_BACKEND_LOCALTEST,'
-
-gvfsd_localtest_LDADD = $(libraries)
-
-gvfsd_smb_SOURCES = \
- gvfsbackendsmb.c gvfsbackendsmb.h libsmb-compat.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_smb_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendsmb.h \
- -DDEFAULT_BACKEND_TYPE=smb-share \
- -DMAX_JOB_THREADS=1 \
- $(GCONF_CFLAGS) \
- -DBACKEND_TYPES='"smb-share", G_VFS_TYPE_BACKEND_SMB,'
-
-gvfsd_smb_LDADD = $(SAMBA_LIBS) $(GCONF_LIBS) $(libraries)
-
-gvfsd_smb_browse_SOURCES = \
- gvfsbackendsmbbrowse.c gvfsbackendsmbbrowse.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_smb_browse_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendsmbbrowse.h \
- -DMOUNTABLE_DBUS_NAME=org.gtk.vfs.mountpoint.smb_browse \
- -DMAX_JOB_THREADS=1 \
- $(GCONF_CFLAGS) \
- -DBACKEND_TYPES='"smb-network", G_VFS_TYPE_BACKEND_SMB_BROWSE,"smb-server", G_VFS_TYPE_BACKEND_SMB_BROWSE,'
-
-gvfsd_smb_browse_LDADD = $(SAMBA_LIBS) $(GCONF_LIBS) $(libraries)
-
-gvfsd_obexftp_SOURCES = \
- gvfsbackendobexftp.c gvfsbackendobexftp.h \
- obexftp-marshal.c obexftp-marshal.h \
- gvfsbackendobexftp-fl-parser.c gvfsbackendobexftp-fl-parser.h \
- gvfsbackendobexftp-cap-parser.c gvfsbackendobexftp-cap-parser.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_obexftp_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendobexftp.h \
- -DDEFAULT_BACKEND_TYPE=obex \
- -DMAX_JOB_THREADS=1 \
- -DBACKEND_TYPES='"obex", G_VFS_TYPE_BACKEND_OBEXFTP,'
-
-gvfsd_obexftp_LDADD = $(OBEXFTP_LIBS) $(XML_LIBS) $(libraries)
-
-gvfsd_ftp_SOURCES = \
- gvfsbackendftp.c gvfsbackendftp.h \
- ParseFTPList.c ParseFTPList.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_ftp_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendftp.h \
- -DDEFAULT_BACKEND_TYPE=ftp \
- -DMAX_JOB_THREADS=10 \
- $(HTTP_CFLAGS) \
- -DBACKEND_TYPES='"ftp", G_VFS_TYPE_BACKEND_FTP,'
-
-gvfsd_ftp_LDADD = $(libraries) $(HTTP_LIBS)
-
-gvfsd_sftp_SOURCES = \
- sftp.h \
- gvfsbackendsftp.c gvfsbackendsftp.h \
- pty_open.c pty_open.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_sftp_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendsftp.h \
- -DDEFAULT_BACKEND_TYPE=sftp \
- -DMAX_JOB_THREADS=1 \
- -DSSH_PROGRAM=\"$(SSH_PROGRAM)\" \
- -DBACKEND_TYPES='"sftp", G_VFS_TYPE_BACKEND_SFTP,'
-
-gvfsd_sftp_LDADD = $(libraries)
-
-gvfsd_trash_SOURCES = \
- gvfsbackendtrash.c gvfsbackendtrash.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_trash_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendtrash.h \
- -DDEFAULT_BACKEND_TYPE=trash \
- -DMAX_JOB_THREADS=10 \
- -DBACKEND_TYPES='"trash", G_VFS_TYPE_BACKEND_TRASH,'
-
-gvfsd_trash_LDADD = $(libraries)
-
-gvfsd_computer_SOURCES = \
- gvfsbackendcomputer.c gvfsbackendcomputer.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_computer_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendcomputer.h \
- -DDEFAULT_BACKEND_TYPE=computer \
- -DMAX_JOB_THREADS=1 \
- -DBACKEND_TYPES='"computer", G_VFS_TYPE_BACKEND_COMPUTER,'
-
-gvfsd_computer_LDADD = $(libraries)
-
-gvfsd_network_SOURCES = \
- gvfsbackendnetwork.c gvfsbackendnetwork.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_network_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendnetwork.h \
- -DDEFAULT_BACKEND_TYPE=network \
- -DMAX_JOB_THREADS=1 \
- $(GCONF_CFLAGS) \
- -DBACKEND_TYPES='"network", G_VFS_TYPE_BACKEND_NETWORK,'
-
-gvfsd_network_LDADD = $(libraries) $(GCONF_LIBS)
-
-gvfsd_dnssd_SOURCES = \
- gvfsbackenddnssd.c gvfsbackenddnssd.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_dnssd_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackenddnssd.h \
- -DDEFAULT_BACKEND_TYPE=dns-sd \
- -DMAX_JOB_THREADS=1 \
- $(AVAHI_CFLAGS) \
- -DBACKEND_TYPES='"dns-sd", G_VFS_TYPE_BACKEND_DNS_SD,'
-
-gvfsd_dnssd_LDADD = $(libraries) $(AVAHI_LIBS)
-
-
-gvfsd_archive_SOURCES = \
- gvfsbackendarchive.c gvfsbackendarchive.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_archive_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendarchive.h \
- -DDEFAULT_BACKEND_TYPE=archive \
- -DMAX_JOB_THREADS=1 \
- $(ARCHIVE_CFLAGS) \
- -DBACKEND_TYPES='"archive", G_VFS_TYPE_BACKEND_ARCHIVE,'
-
-gvfsd_archive_LDADD = $(libraries) $(ARCHIVE_LIBS)
-
-gvfsd_burn_SOURCES = \
- gvfsbackendburn.c gvfsbackendburn.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_burn_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendburn.h \
- -DDEFAULT_BACKEND_TYPE=burn \
- -DMAX_JOB_THREADS=1 \
- -DBACKEND_TYPES='"burn", G_VFS_TYPE_BACKEND_BURN,'
-
-gvfsd_burn_LDADD = $(libraries)
-
-gvfsd_cdda_SOURCES = \
- gvfsbackendcdda.c gvfsbackendcdda.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_cdda_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendcdda.h \
- -DDEFAULT_BACKEND_TYPE=cdda \
- -DMAX_JOB_THREADS=1 \
- $(CDDA_CFLAGS) $(HAL_CFLAGS) \
- -DBACKEND_TYPES='"cdda", G_VFS_TYPE_BACKEND_CDDA,'
-
-gvfsd_cdda_LDADD = $(libraries) $(CDDA_LIBS) $(HAL_LIBS)
-
-gvfsd_gphoto2_SOURCES = \
- gvfsbackendgphoto2.c gvfsbackendgphoto2.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_gphoto2_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendgphoto2.h \
- -DDEFAULT_BACKEND_TYPE=gphoto2 \
- -DMAX_JOB_THREADS=1 \
- $(GPHOTO2_CFLAGS) $(HAL_CFLAGS) \
- -DBACKEND_TYPES='"gphoto2", G_VFS_TYPE_BACKEND_GPHOTO2,'
-
-gvfsd_gphoto2_LDADD = $(libraries) $(GPHOTO2_LIBS) $(HAL_LIBS)
-
-gvfsd_http_SOURCES = \
- soup-input-stream.c soup-input-stream.h \
- soup-output-stream.c soup-output-stream.h \
- gvfsbackendhttp.c gvfsbackendhttp.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_http_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackendhttp.h \
- -DMOUNTABLE_DBUS_NAME=org.gtk.vfs.mountpoint.http \
- -DDEFAULT_BACKEND_TYPE=http \
- -DMAX_JOB_THREADS=1 \
- $(HTTP_CFLAGS) \
- -DBACKEND_TYPES='"http", G_VFS_TYPE_BACKEND_HTTP,'
-
-gvfsd_http_LDADD = $(libraries) $(HTTP_LIBS)
-
-gvfsd_dav_SOURCES = \
- soup-input-stream.c soup-input-stream.h \
- soup-output-stream.c soup-output-stream.h \
- gvfsbackendhttp.c gvfsbackendhttp.h \
- gvfsbackenddav.c gvfsbackenddav.h \
- daemon-main.c daemon-main.h \
- daemon-main-generic.c
-
-gvfsd_dav_CPPFLAGS = \
- -DBACKEND_HEADER=gvfsbackenddav.h \
- -DDEFAULT_BACKEND_TYPE=dav \
- -DMAX_JOB_THREADS=1 \
- $(HTTP_CFLAGS) \
- -DBACKEND_TYPES='"dav", G_VFS_TYPE_BACKEND_DAV,'
-
-gvfsd_dav_LDADD = $(libraries) $(HTTP_LIBS)
-
diff --git a/daemon/ParseFTPList.c b/daemon/ParseFTPList.c
deleted file mode 100644
index 3b261a29..00000000
--- a/daemon/ParseFTPList.c
+++ /dev/null
@@ -1,1842 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org Code.
- *
- * The Initial Developer of the Original Code is
- * Cyrus Patel <cyp@fb14.uni-mainz.de>.
- * Portions created by the Initial Developer are Copyright (C) 2002
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Doug Turner <dougt@netscape.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "ParseFTPList.h"
-
-/* ==================================================================== */
-
-int ParseFTPList(const char *line, struct list_state *state,
- struct list_result *result )
-{
- unsigned int carry_buf_len; /* copy of state->carry_buf_len */
- unsigned int linelen, pos;
- const char *p;
-
- if (!line || !state || !result)
- return 0;
-
- memset( result, 0, sizeof(*result) );
- if (state->magic != ((void *)ParseFTPList))
- {
- memset( state, 0, sizeof(*state) );
- state->magic = ((void *)ParseFTPList);
- }
- state->numlines++;
-
- /* carry buffer is only valid from one line to the next */
- carry_buf_len = state->carry_buf_len;
- state->carry_buf_len = 0;
-
- linelen = 0;
-
- /* strip leading whitespace */
- while (*line == ' ' || *line == '\t')
- line++;
-
- /* line is terminated at first '\0' or '\n' */
- p = line;
- while (*p && *p != '\n')
- p++;
- linelen = p - line;
-
- if (linelen > 0 && *p == '\n' && *(p-1) == '\r')
- linelen--;
-
- /* DON'T strip trailing whitespace. */
-
- if (linelen > 0)
- {
- static const char *month_names = "JanFebMarAprMayJunJulAugSepOctNovDec";
- const char *tokens[16]; /* 16 is more than enough */
- unsigned int toklen[(sizeof(tokens)/sizeof(tokens[0]))];
- unsigned int linelen_sans_wsp; // line length sans whitespace
- unsigned int numtoks = 0;
- unsigned int tokmarker = 0; /* extra info for lstyle handler */
- unsigned int month_num = 0;
- char tbuf[4];
- int lstyle = 0;
-
- if (carry_buf_len) /* VMS long filename carryover buffer */
- {
- tokens[0] = state->carry_buf;
- toklen[0] = carry_buf_len;
- numtoks++;
- }
-
- pos = 0;
- while (pos < linelen && numtoks < (sizeof(tokens)/sizeof(tokens[0])) )
- {
- while (pos < linelen &&
- (line[pos] == ' ' || line[pos] == '\t' || line[pos] == '\r'))
- pos++;
- if (pos < linelen)
- {
- tokens[numtoks] = &line[pos];
- while (pos < linelen &&
- (line[pos] != ' ' && line[pos] != '\t' && line[pos] != '\r'))
- pos++;
- if (tokens[numtoks] != &line[pos])
- {
- toklen[numtoks] = (&line[pos] - tokens[numtoks]);
- numtoks++;
- }
- }
- }
-
- linelen_sans_wsp = &(tokens[numtoks-1][toklen[numtoks-1]]) - tokens[0];
- if (numtoks == (sizeof(tokens)/sizeof(tokens[0])) )
- {
- pos = linelen;
- while (pos > 0 && (line[pos-1] == ' ' || line[pos-1] == '\t'))
- pos--;
- linelen_sans_wsp = pos;
- }
-
- /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
-
-#if defined(SUPPORT_EPLF)
- /* EPLF handling must come somewhere before /bin/dls handling. */
- if (!lstyle && (!state->lstyle || state->lstyle == 'E'))
- {
- if (*line == '+' && linelen > 4 && numtoks >= 2)
- {
- pos = 1;
- while (pos < (linelen-1))
- {
- p = &line[pos++];
- if (*p == '/')
- result->fe_type = 'd'; /* its a dir */
- else if (*p == 'r')
- result->fe_type = 'f'; /* its a file */
- else if (*p == 'm')
- {
- if (isdigit(line[pos]))
- {
- while (pos < linelen && isdigit(line[pos]))
- pos++;
- if (pos < linelen && line[pos] == ',')
- {
- guint64 seconds;
- time_t t;
- sscanf(p+1, "%"G_GUINT64_FORMAT, &seconds);
- t = seconds;
- result->fe_time = *localtime (&t);
- }
- }
- }
- else if (*p == 's')
- {
- if (isdigit(line[pos]))
- {
- while (pos < linelen && isdigit(line[pos]))
- pos++;
- if (pos < linelen && line[pos] == ',' &&
- ((&line[pos]) - (p+1)) < (int) (sizeof(result->fe_size)-1) )
- {
- memcpy( result->fe_size, p+1, (unsigned)(&line[pos] - (p+1)) );
- result->fe_size[(&line[pos] - (p+1))] = '\0';
- }
- }
- }
- else if (isalpha(*p)) /* 'i'/'up' or unknown "fact" (property) */
- {
- while (pos < linelen && *++p != ',')
- pos++;
- }
- else if (*p != '\t' || (p+1) != tokens[1])
- {
- break; /* its not EPLF after all */
- }
- else
- {
- state->parsed_one = 1;
- state->lstyle = lstyle = 'E';
-
- p = &(line[linelen_sans_wsp]);
- result->fe_fname = tokens[1];
- result->fe_fnlen = p - tokens[1];
-
- if (!result->fe_type) /* access denied */
- {
- result->fe_type = 'f'; /* is assuming 'f'ile correct? */
- return '?'; /* NO! junk it. */
- }
- return result->fe_type;
- }
- if (pos >= (linelen-1) || line[pos] != ',')
- break;
- pos++;
- } /* while (pos < linelen) */
- memset( result, 0, sizeof(*result) );
- } /* if (*line == '+' && linelen > 4 && numtoks >= 2) */
- } /* if (!lstyle && (!state->lstyle || state->lstyle == 'E')) */
-#endif /* SUPPORT_EPLF */
-
- /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
-
-#if defined(SUPPORT_VMS)
- if (!lstyle && (!state->lstyle || state->lstyle == 'V'))
- { /* try VMS Multinet/UCX/CMS server */
- /*
- * Legal characters in a VMS file/dir spec are [A-Z0-9$.-_~].
- * '$' cannot begin a filename and `-' cannot be used as the first
- * or last character. '.' is only valid as a directory separator
- * and <file>.<type> separator. A canonical filename spec might look
- * like this: DISK$VOL:[DIR1.DIR2.DIR3]FILE.TYPE;123
- * All VMS FTP servers LIST in uppercase.
- *
- * We need to be picky about this in order to support
- * multi-line listings correctly.
- */
- if (!state->parsed_one &&
- (numtoks == 1 || (numtoks == 2 && toklen[0] == 9 &&
- memcmp(tokens[0], "Directory", 9)==0 )))
- {
- /* If no dirstyle has been detected yet, and this line is a
- * VMS list's dirname, then turn on VMS dirstyle.
- * eg "ACA:[ANONYMOUS]", "DISK$FTP:[ANONYMOUS]", "SYS$ANONFTP:"
- */
- p = tokens[0];
- pos = toklen[0];
- if (numtoks == 2)
- {
- p = tokens[1];
- pos = toklen[1];
- }
- pos--;
- if (pos >= 3)
- {
- while (pos > 0 && p[pos] != '[')
- {
- pos--;
- if (p[pos] == '-' || p[pos] == '$')
- {
- if (pos == 0 || p[pos-1] == '[' || p[pos-1] == '.' ||
- (p[pos] == '-' && (p[pos+1] == ']' || p[pos+1] == '.')))
- break;
- }
- else if (p[pos] != '.' && p[pos] != '~' &&
- !isdigit(p[pos]) && !isalpha(p[pos]))
- break;
- else if (isalpha(p[pos]) && p[pos] != toupper(p[pos]))
- break;
- }
- if (pos > 0)
- {
- pos--;
- if (p[pos] != ':' || p[pos+1] != '[')
- pos = 0;
- }
- }
- if (pos > 0 && p[pos] == ':')
- {
- while (pos > 0)
- {
- pos--;
- if (p[pos] != '$' && p[pos] != '_' && p[pos] != '-' &&
- p[pos] != '~' && !isdigit(p[pos]) && !isalpha(p[pos]))
- break;
- else if (isalpha(p[pos]) && p[pos] != toupper(p[pos]))
- break;
- }
- if (pos == 0)
- {
- state->lstyle = 'V';
- return '?'; /* its junk */
- }
- }
- /* fallthrough */
- }
- else if ((tokens[0][toklen[0]-1]) != ';')
- {
- if (numtoks == 1 && (state->lstyle == 'V' && !carry_buf_len))
- lstyle = 'V';
- else if (numtoks < 4)
- ;
- else if (toklen[1] >= 10 && memcmp(tokens[1], "%RMS-E-PRV", 10) == 0)
- lstyle = 'V';
- else if ((&line[linelen] - tokens[1]) >= 22 &&
- memcmp(tokens[1], "insufficient privilege", 22) == 0)
- lstyle = 'V';
- else if (numtoks != 4 && numtoks != 6)
- ;
- else if (numtoks == 6 && (
- toklen[5] < 4 || *tokens[5] != '(' || /* perms */
- (tokens[5][toklen[5]-1]) != ')' ))
- ;
- else if ( (toklen[2] == 10 || toklen[2] == 11) &&
- (tokens[2][toklen[2]-5]) == '-' &&
- (tokens[2][toklen[2]-9]) == '-' &&
- (((toklen[3]==4 || toklen[3]==5 || toklen[3]==7 || toklen[3]==8) &&
- (tokens[3][toklen[3]-3]) == ':' ) ||
- ((toklen[3]==10 || toklen[3]==11 ) &&
- (tokens[3][toklen[3]-3]) == '.' )
- ) && /* time in [H]H:MM[:SS[.CC]] format */
- isdigit(*tokens[1]) && /* size */
- isdigit(*tokens[2]) && /* date */
- isdigit(*tokens[3]) /* time */
- )
- {
- lstyle = 'V';
- }
- if (lstyle == 'V')
- {
- /*
- * MultiNet FTP:
- * LOGIN.COM;2 1 4-NOV-1994 04:09 [ANONYMOUS] (RWE,RWE,,)
- * PUB.DIR;1 1 27-JAN-1994 14:46 [ANONYMOUS] (RWE,RWE,RE,RWE)
- * README.FTP;1 %RMS-E-PRV, insufficient privilege or file protection violation
- * ROUSSOS.DIR;1 1 27-JAN-1994 14:48 [CS,ROUSSOS] (RWE,RWE,RE,R)
- * S67-50903.JPG;1 328 22-SEP-1998 16:19 [ANONYMOUS] (RWED,RWED,,)
- * UCX FTP:
- * CII-MANUAL.TEX;1 213/216 29-JAN-1996 03:33:12 [ANONYMOU,ANONYMOUS] (RWED,RWED,,)
- * CMU/VMS-IP FTP
- * [VMSSERV.FILES]ALARM.DIR;1 1/3 5-MAR-1993 18:09
- * TCPware FTP
- * FOO.BAR;1 4 5-MAR-1993 18:09:01.12
- * Long filename example:
- * THIS-IS-A-LONG-VMS-FILENAME.AND-THIS-IS-A-LONG-VMS-FILETYPE\r\n
- * 213[/nnn] 29-JAN-1996 03:33[:nn] [ANONYMOU,ANONYMOUS] (RWED,RWED,,)
- */
- tokmarker = 0;
- p = tokens[0];
- pos = 0;
- if (*p == '[' && toklen[0] >= 4) /* CMU style */
- {
- if (p[1] != ']')
- {
- p++;
- pos++;
- }
- while (lstyle && pos < toklen[0] && *p != ']')
- {
- if (*p != '$' && *p != '.' && *p != '_' && *p != '-' &&
- *p != '~' && !isdigit(*p) && !isalpha(*p))
- lstyle = 0;
- pos++;
- p++;
- }
- if (lstyle && pos < (toklen[0]-1) && *p == ']')
- {
- pos++;
- p++;
- tokmarker = pos; /* length of leading "[DIR1.DIR2.etc]" */
- }
- }
- while (lstyle && pos < toklen[0] && *p != ';')
- {
- if (*p != '$' && *p != '.' && *p != '_' && *p != '-' &&
- *p != '~' && !isdigit(*p) && !isalpha(*p))
- lstyle = 0;
- else if (isalpha(*p) && *p != toupper(*p))
- lstyle = 0;
- p++;
- pos++;
- }
- if (lstyle && *p == ';')
- {
- if (pos == 0 || pos == (toklen[0]-1))
- lstyle = 0;
- for (pos++;lstyle && pos < toklen[0];pos++)
- {
- if (!isdigit(tokens[0][pos]))
- lstyle = 0;
- }
- }
- pos = (p - tokens[0]); /* => fnlength sans ";####" */
- pos -= tokmarker; /* => fnlength sans "[DIR1.DIR2.etc]" */
- p = &(tokens[0][tokmarker]); /* offset of basename */
-
- if (!lstyle || pos > 80) /* VMS filenames can't be longer than that */
- {
- lstyle = 0;
- }
- else if (numtoks == 1)
- {
- /* if VMS has been detected and there is only one token and that
- * token was a VMS filename then this is a multiline VMS LIST entry.
- */
- if (pos >= (sizeof(state->carry_buf)-1))
- pos = (sizeof(state->carry_buf)-1); /* shouldn't happen */
- memcpy( state->carry_buf, p, pos );
- state->carry_buf_len = pos;
- return '?'; /* tell caller to treat as junk */
- }
- else if (isdigit(*tokens[1])) /* not no-privs message */
- {
- for (pos = 0; lstyle && pos < (toklen[1]); pos++)
- {
- if (!isdigit((tokens[1][pos])) && (tokens[1][pos]) != '/')
- lstyle = 0;
- }
- if (lstyle && numtoks > 4) /* Multinet or UCX but not CMU */
- {
- for (pos = 1; lstyle && pos < (toklen[5]-1); pos++)
- {
- p = &(tokens[5][pos]);
- if (*p!='R' && *p!='W' && *p!='E' && *p!='D' && *p!=',')
- lstyle = 0;
- }
- }
- }
- } /* passed initial tests */
- } /* else if ((tokens[0][toklen[0]-1]) != ';') */
-
- if (lstyle == 'V')
- {
- state->parsed_one = 1;
- state->lstyle = lstyle;
-
- if (isdigit(*tokens[1])) /* not permission denied etc */
- {
- /* strip leading directory name */
- if (*tokens[0] == '[') /* CMU server */
- {
- pos = toklen[0]-1;
- p = tokens[0]+1;
- while (*p != ']')
- {
- p++;
- pos--;
- }
- toklen[0] = --pos;
- tokens[0] = ++p;
- }
- pos = 0;
- while (pos < toklen[0] && (tokens[0][pos]) != ';')
- pos++;
-
- result->fe_cinfs = 1;
- result->fe_type = 'f';
- result->fe_fname = tokens[0];
- result->fe_fnlen = pos;
-
- if (pos > 4)
- {
- p = &(tokens[0][pos-4]);
- if (p[0] == '.' && p[1] == 'D' && p[2] == 'I' && p[3] == 'R')
- {
- result->fe_fnlen -= 4;
- result->fe_type = 'd';
- }
- }
-
- if (result->fe_type != 'd')
- {
- /* #### or used/allocated form. If used/allocated form, then
- * 'used' is the size in bytes if and only if 'used'<=allocated.
- * If 'used' is size in bytes then it can be > 2^32
- * If 'used' is not size in bytes then it is size in blocks.
- */
- pos = 0;
- while (pos < toklen[1] && (tokens[1][pos]) != '/')
- pos++;
-
-/*
- * I've never seen size come back in bytes, its always in blocks, and
- * the following test fails. So, always perform the "size in blocks".
- * I'm leaving the "size in bytes" code if'd out in case we ever need
- * to re-instate it.
-*/
-#if 0
- if (pos < toklen[1] && ( (pos<<1) > (toklen[1]-1) ||
- (strtoul(tokens[1], (char **)0, 10) >
- strtoul(tokens[1]+pos+1, (char **)0, 10)) ))
- { /* size is in bytes */
- if (pos > (sizeof(result->fe_size)-1))
- pos = sizeof(result->fe_size)-1;
- memcpy( result->fe_size, tokens[1], pos );
- result->fe_size[pos] = '\0';
- }
- else /* size is in blocks */
-#endif
- {
- /* size requires multiplication by blocksize.
- *
- * We could assume blocksize is 512 (like Lynx does) and
- * shift by 9, but that might not be right. Even if it
- * were, doing that wouldn't reflect what the file's
- * real size was. The sanest thing to do is not use the
- * LISTing's filesize, so we won't (like ftpmirror).
- *
- * ulltoa(((unsigned long long)fsz)<<9, result->fe_size, 10);
- *
- * A block is always 512 bytes on OpenVMS, compute size.
- * So its rounded up to the next block, so what, its better
- * than not showing the size at all.
- * A block is always 512 bytes on OpenVMS, compute size.
- * So its rounded up to the next block, so what, its better
- * than not showing the size at all.
- */
- guint64 fsz;
- fsz = g_ascii_strtoull (tokens[1], (char **)0, 10);
- fsz *= 512;
- g_snprintf(result->fe_size, sizeof(result->fe_size),
- "%"G_GUINT64_FORMAT, fsz);
- }
-
- } /* if (result->fe_type != 'd') */
-
- p = tokens[2] + 2;
- if (*p == '-')
- p++;
- tbuf[0] = p[0];
- tbuf[1] = tolower(p[1]);
- tbuf[2] = tolower(p[2]);
- month_num = 0;
- for (pos = 0; pos < (12*3); pos+=3)
- {
- if (tbuf[0] == month_names[pos+0] &&
- tbuf[1] == month_names[pos+1] &&
- tbuf[2] == month_names[pos+2])
- break;
- month_num++;
- }
- if (month_num >= 12)
- month_num = 0;
- result->fe_time.tm_mon = month_num;
- result->fe_time.tm_mday = atoi(tokens[2]);
- result->fe_time.tm_year = atoi(p+4); // NSPR wants year as XXXX
-
- p = tokens[3] + 2;
- if (*p == ':')
- p++;
- if (p[2] == ':')
- result->fe_time.tm_sec = atoi(p+3);
- result->fe_time.tm_hour = atoi(tokens[3]);
- result->fe_time.tm_min = atoi(p);
-
- return result->fe_type;
-
- } /* if (isdigit(*tokens[1])) */
-
- return '?'; /* junk */
-
- } /* if (lstyle == 'V') */
- } /* if (!lstyle && (!state->lstyle || state->lstyle == 'V')) */
-#endif
-
- /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
-
-#if defined(SUPPORT_CMS)
- /* Virtual Machine/Conversational Monitor System (IBM Mainframe) */
- if (!lstyle && (!state->lstyle || state->lstyle == 'C')) /* VM/CMS */
- {
- /* LISTing according to mirror.pl
- * Filename FileType Fm Format Lrecl Records Blocks Date Time
- * LASTING GLOBALV A1 V 41 21 1 9/16/91 15:10:32
- * J43401 NETLOG A0 V 77 1 1 9/12/91 12:36:04
- * PROFILE EXEC A1 V 17 3 1 9/12/91 12:39:07
- * DIRUNIX SCRIPT A1 V 77 1216 17 1/04/93 20:30:47
- * MAIL PROFILE A2 F 80 1 1 10/14/92 16:12:27
- * BADY2K TEXT A0 V 1 1 1 1/03/102 10:11:12
- * AUTHORS A1 DIR - - - 9/20/99 10:31:11
- *
- * LISTing from vm.marist.edu and vm.sc.edu
- * 220-FTPSERVE IBM VM Level 420 at VM.MARIST.EDU, 04:58:12 EDT WEDNESDAY 2002-07-10
- * AUTHORS DIR - - - 1999-09-20 10:31:11 -
- * HARRINGTON DIR - - - 1997-02-12 15:33:28 -
- * PICS DIR - - - 2000-10-12 15:43:23 -
- * SYSFILE DIR - - - 2000-07-20 17:48:01 -
- * WELCNVT EXEC V 72 9 1 1999-09-20 17:16:18 -
- * WELCOME EREADME F 80 21 1 1999-12-27 16:19:00 -
- * WELCOME README V 82 21 1 1999-12-27 16:19:04 -
- * README ANONYMOU V 71 26 1 1997-04-02 12:33:20 TCP291
- * README ANONYOLD V 71 15 1 1995-08-25 16:04:27 TCP291
- */
- if (numtoks >= 7 && (toklen[0]+toklen[1]) <= 16)
- {
- for (pos = 1; !lstyle && (pos+5) < numtoks; pos++)
- {
- p = tokens[pos];
- if ((toklen[pos] == 1 && (*p == 'F' || *p == 'V')) ||
- (toklen[pos] == 3 && *p == 'D' && p[1] == 'I' && p[2] == 'R'))
- {
- if (toklen[pos+5] == 8 && (tokens[pos+5][2]) == ':' &&
- (tokens[pos+5][5]) == ':' )
- {
- p = tokens[pos+4];
- if ((toklen[pos+4] == 10 && p[4] == '-' && p[7] == '-') ||
- (toklen[pos+4] >= 7 && toklen[pos+4] <= 9 &&
- p[((p[1]!='/')?(2):(1))] == '/' &&
- p[((p[1]!='/')?(5):(4))] == '/'))
- /* Y2K bugs possible ("7/06/102" or "13/02/101") */
- {
- if ( (*tokens[pos+1] == '-' &&
- *tokens[pos+2] == '-' &&
- *tokens[pos+3] == '-') ||
- (isdigit(*tokens[pos+1]) &&
- isdigit(*tokens[pos+2]) &&
- isdigit(*tokens[pos+3])) )
- {
- lstyle = 'C';
- tokmarker = pos;
- }
- }
- }
- }
- } /* for (pos = 1; !lstyle && (pos+5) < numtoks; pos++) */
- } /* if (numtoks >= 7) */
-
- /* extra checking if first pass */
- if (lstyle && !state->lstyle)
- {
- for (pos = 0, p = tokens[0]; lstyle && pos < toklen[0]; pos++, p++)
- {
- if (isalpha(*p) && toupper(*p) != *p)
- lstyle = 0;
- }
- for (pos = tokmarker+1; pos <= tokmarker+3; pos++)
- {
- if (!(toklen[pos] == 1 && *tokens[pos] == '-'))
- {
- for (p = tokens[pos]; lstyle && p<(tokens[pos]+toklen[pos]); p++)
- {
- if (!isdigit(*p))
- lstyle = 0;
- }
- }
- }
- for (pos = 0, p = tokens[tokmarker+4];
- lstyle && pos < toklen[tokmarker+4]; pos++, p++)
- {
- if (*p == '/')
- {
- /* There may be Y2K bugs in the date. Don't simplify to
- * pos != (len-3) && pos != (len-6) like time is done.
- */
- if ((tokens[tokmarker+4][1]) == '/')
- {
- if (pos != 1 && pos != 4)
- lstyle = 0;
- }
- else if (pos != 2 && pos != 5)
- lstyle = 0;
- }
- else if (*p != '-' && !isdigit(*p))
- lstyle = 0;
- else if (*p == '-' && pos != 4 && pos != 7)
- lstyle = 0;
- }
- for (pos = 0, p = tokens[tokmarker+5];
- lstyle && pos < toklen[tokmarker+5]; pos++, p++)
- {
- if (*p != ':' && !isdigit(*p))
- lstyle = 0;
- else if (*p == ':' && pos != (toklen[tokmarker+5]-3)
- && pos != (toklen[tokmarker+5]-6))
- lstyle = 0;
- }
- } /* initial if() */
-
- if (lstyle == 'C')
- {
- state->parsed_one = 1;
- state->lstyle = lstyle;
-
- p = tokens[tokmarker+4];
- if (toklen[tokmarker+4] == 10) /* newstyle: YYYY-MM-DD format */
- {
- result->fe_time.tm_year = atoi(p+0) - 1900;
- result->fe_time.tm_mon = atoi(p+5) - 1;
- result->fe_time.tm_mday = atoi(p+8);
- }
- else /* oldstyle: [M]M/DD/YY format */
- {
- pos = toklen[tokmarker+4];
- result->fe_time.tm_mon = atoi(p) - 1;
- result->fe_time.tm_mday = atoi((p+pos)-5);
- result->fe_time.tm_year = atoi((p+pos)-2);
- if (result->fe_time.tm_year < 70)
- result->fe_time.tm_year += 100;
- }
-
- p = tokens[tokmarker+5];
- pos = toklen[tokmarker+5];
- result->fe_time.tm_hour = atoi(p);
- result->fe_time.tm_min = atoi((p+pos)-5);
- result->fe_time.tm_sec = atoi((p+pos)-2);
-
- result->fe_cinfs = 1;
- result->fe_fname = tokens[0];
- result->fe_fnlen = toklen[0];
- result->fe_type = 'f';
-
- p = tokens[tokmarker];
- if (toklen[tokmarker] == 3 && *p=='D' && p[1]=='I' && p[2]=='R')
- result->fe_type = 'd';
-
- if ((/*newstyle*/ toklen[tokmarker+4] == 10 && tokmarker > 1) ||
- (/*oldstyle*/ toklen[tokmarker+4] != 10 && tokmarker > 2))
- { /* have a filetype column */
- char *dot;
- p = &(tokens[0][toklen[0]]);
- memcpy( &dot, &p, sizeof(dot) ); /* NASTY! */
- *dot++ = '.';
- p = tokens[1];
- for (pos = 0; pos < toklen[1]; pos++)
- *dot++ = *p++;
- result->fe_fnlen += 1 + toklen[1];
- }
-
- /* oldstyle LISTING:
- * files/dirs not on the 'A' minidisk are not RETRievable/CHDIRable
- if (toklen[tokmarker+4] != 10 && *tokens[tokmarker-1] != 'A')
- return '?';
- */
-
- /* VM/CMS LISTings have no usable filesize field.
- * Have to use the 'SIZE' command for that.
- */
- return result->fe_type;
-
- } /* if (lstyle == 'C' && (!state->lstyle || state->lstyle == lstyle)) */
- } /* VM/CMS */
-#endif
-
- /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
-
-#if defined(SUPPORT_DOS) /* WinNT DOS dirstyle */
- if (!lstyle && (!state->lstyle || state->lstyle == 'W'))
- {
- /*
- * "10-23-00 01:27PM <DIR> veronist"
- * "06-15-00 07:37AM <DIR> zoe"
- * "07-14-00 01:35PM 2094926 canprankdesk.tif"
- * "07-21-00 01:19PM 95077 Jon Kauffman Enjoys the Good Life.jpg"
- * "07-21-00 01:19PM 52275 Name Plate.jpg"
- * "07-14-00 01:38PM 2250540 Valentineoffprank-HiRes.jpg"
- */
- if ((numtoks >= 4) && toklen[0] == 8 && toklen[1] == 7 &&
- (*tokens[2] == '<' || isdigit(*tokens[2])) )
- {
- p = tokens[0];
- if ( isdigit(p[0]) && isdigit(p[1]) && p[2]=='-' &&
- isdigit(p[3]) && isdigit(p[4]) && p[5]=='-' &&
- isdigit(p[6]) && isdigit(p[7]) )
- {
- p = tokens[1];
- if ( isdigit(p[0]) && isdigit(p[1]) && p[2]==':' &&
- isdigit(p[3]) && isdigit(p[4]) &&
- (p[5]=='A' || p[5]=='P') && p[6]=='M')
- {
- lstyle = 'W';
- if (!state->lstyle)
- {
- p = tokens[2];
- /* <DIR> or <JUNCTION> */
- if (*p != '<' || p[toklen[2]-1] != '>')
- {
- for (pos = 1; (lstyle && pos < toklen[2]); pos++)
- {
- if (!isdigit(*++p))
- lstyle = 0;
- }
- }
- }
- }
- }
- }
-
- if (lstyle == 'W')
- {
- state->parsed_one = 1;
- state->lstyle = lstyle;
-
- p = &(line[linelen_sans_wsp]); /* line end sans wsp */
- result->fe_cinfs = 1;
- result->fe_fname = tokens[3];
- result->fe_fnlen = p - tokens[3];
- result->fe_type = 'd';
-
- if (*tokens[2] != '<') /* not <DIR> or <JUNCTION> */
- {
- result->fe_type = 'f';
- pos = toklen[2];
- while (pos > (sizeof(result->fe_size)-1))
- pos = (sizeof(result->fe_size)-1);
- memcpy( result->fe_size, tokens[2], pos );
- result->fe_size[pos] = '\0';
- }
- else if ((tokens[2][1]) != 'D') /* not <DIR> */
- {
- result->fe_type = '?'; /* unknown until junc for sure */
- if (result->fe_fnlen > 4)
- {
- p = result->fe_fname;
- for (pos = result->fe_fnlen - 4; pos > 0; pos--)
- {
- if (p[0] == ' ' && p[3] == ' ' && p[2] == '>' &&
- (p[1] == '=' || p[1] == '-'))
- {
- result->fe_type = 'l';
- result->fe_fnlen = p - result->fe_fname;
- result->fe_lname = p + 4;
- result->fe_lnlen = &(line[linelen_sans_wsp])
- - result->fe_lname;
- break;
- }
- p++;
- }
- }
- }
-
- result->fe_time.tm_mon = atoi(tokens[0]+0);
- if (result->fe_time.tm_mon != 0)
- {
- result->fe_time.tm_mon--;
- result->fe_time.tm_mday = atoi(tokens[0]+3);
- result->fe_time.tm_year = atoi(tokens[0]+6);
- if (result->fe_time.tm_year < 80)
- result->fe_time.tm_year += 100;
- }
-
- result->fe_time.tm_hour = atoi(tokens[1]+0);
- result->fe_time.tm_min = atoi(tokens[1]+3);
- if ((tokens[1][5]) == 'P' && result->fe_time.tm_hour < 12)
- result->fe_time.tm_hour += 12;
-
- /* the caller should do this (if dropping "." and ".." is desired)
- if (result->fe_type == 'd' && result->fe_fname[0] == '.' &&
- (result->fe_fnlen == 1 || (result->fe_fnlen == 2 &&
- result->fe_fname[1] == '.')))
- return '?';
- */
-
- return result->fe_type;
- } /* if (lstyle == 'W' && (!state->lstyle || state->lstyle == lstyle)) */
- } /* if (!lstyle && (!state->lstyle || state->lstyle == 'W')) */
-#endif
-
- /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
-
-#if defined(SUPPORT_OS2)
- if (!lstyle && (!state->lstyle || state->lstyle == 'O')) /* OS/2 test */
- {
- /* 220 server IBM TCP/IP for OS/2 - FTP Server ver 23:04:36 on Jan 15 1997 ready.
- * fixed position, space padded columns. I have only a vague idea
- * of what the contents between col 18 and 34 might be: All I can infer
- * is that there may be attribute flags in there and there may be
- * a " DIR" in there.
- *
- * 1 2 3 4 5 6
- *0123456789012345678901234567890123456789012345678901234567890123456789
- *----- size -------|??????????????? MM-DD-YY| HH:MM| nnnnnnnnn....
- * 0 DIR 04-11-95 16:26 .
- * 0 DIR 04-11-95 16:26 ..
- * 0 DIR 04-11-95 16:26 ADDRESS
- * 612 RHSA 07-28-95 16:45 air_tra1.bag
- * 195 A 08-09-95 10:23 Alfa1.bag
- * 0 RHS DIR 04-11-95 16:26 ATTACH
- * 372 A 08-09-95 10:26 Aussie_1.bag
- * 310992 06-28-94 09:56 INSTALL.EXE
- * 1 2 3 4
- * 01234567890123456789012345678901234567890123456789
- * dirlist from the mirror.pl project, col positions from Mozilla.
- */
- p = &(line[toklen[0]]);
- /* \s(\d\d-\d\d-\d\d)\s+(\d\d:\d\d)\s */
- if (numtoks >= 4 && toklen[0] <= 18 && isdigit(*tokens[0]) &&
- (linelen - toklen[0]) >= (53-18) &&
- p[18-18] == ' ' && p[34-18] == ' ' &&
- p[37-18] == '-' && p[40-18] == '-' && p[43-18] == ' ' &&
- p[45-18] == ' ' && p[48-18] == ':' && p[51-18] == ' ' &&
- isdigit(p[35-18]) && isdigit(p[36-18]) &&
- isdigit(p[38-18]) && isdigit(p[39-18]) &&
- isdigit(p[41-18]) && isdigit(p[42-18]) &&
- isdigit(p[46-18]) && isdigit(p[47-18]) &&
- isdigit(p[49-18]) && isdigit(p[50-18])
- )
- {
- lstyle = 'O'; /* OS/2 */
- if (!state->lstyle)
- {
- for (pos = 1; lstyle && pos < toklen[0]; pos++)
- {
- if (!isdigit(tokens[0][pos]))
- lstyle = 0;
- }
- }
- }
-
- if (lstyle == 'O')
- {
- state->parsed_one = 1;
- state->lstyle = lstyle;
-
- p = &(line[toklen[0]]);
-
- result->fe_cinfs = 1;
- result->fe_fname = &p[53-18];
- result->fe_fnlen = (&(line[linelen_sans_wsp]))
- - (result->fe_fname);
- result->fe_type = 'f';
-
- /* I don't have a real listing to determine exact pos, so scan. */
- for (pos = (18-18); pos < ((35-18)-4); pos++)
- {
- if (p[pos+0] == ' ' && p[pos+1] == 'D' &&
- p[pos+2] == 'I' && p[pos+3] == 'R')
- {
- result->fe_type = 'd';
- break;
- }
- }
-
- if (result->fe_type != 'd')
- {
- pos = toklen[0];
- if (pos > (sizeof(result->fe_size)-1))
- pos = (sizeof(result->fe_size)-1);
- memcpy( result->fe_size, tokens[0], pos );
- result->fe_size[pos] = '\0';
- }
-
- result->fe_time.tm_mon = atoi(&p[35-18]) - 1;
- result->fe_time.tm_mday = atoi(&p[38-18]);
- result->fe_time.tm_year = atoi(&p[41-18]);
- if (result->fe_time.tm_year < 80)
- result->fe_time.tm_year += 100;
- result->fe_time.tm_hour = atoi(&p[46-18]);
- result->fe_time.tm_min = atoi(&p[49-18]);
-
- /* the caller should do this (if dropping "." and ".." is desired)
- if (result->fe_type == 'd' && result->fe_fname[0] == '.' &&
- (result->fe_fnlen == 1 || (result->fe_fnlen == 2 &&
- result->fe_fname[1] == '.')))
- return '?';
- */
-
- return result->fe_type;
- } /* if (lstyle == 'O') */
-
- } /* if (!lstyle && (!state->lstyle || state->lstyle == 'O')) */
-#endif
-
- /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
-
-#if defined(SUPPORT_LSL)
- if (!lstyle && (!state->lstyle || state->lstyle == 'U')) /* /bin/ls & co. */
- {
- /* UNIX-style listing, without inum and without blocks
- * "-rw-r--r-- 1 root other 531 Jan 29 03:26 README"
- * "dr-xr-xr-x 2 root other 512 Apr 8 1994 etc"
- * "dr-xr-xr-x 2 root 512 Apr 8 1994 etc"
- * "lrwxrwxrwx 1 root other 7 Jan 25 00:17 bin -> usr/bin"
- * Also produced by Microsoft's FTP servers for Windows:
- * "---------- 1 owner group 1803128 Jul 10 10:18 ls-lR.Z"
- * "d--------- 1 owner group 0 May 9 19:45 Softlib"
- * Also WFTPD for MSDOS:
- * "-rwxrwxrwx 1 noone nogroup 322 Aug 19 1996 message.ftp"
- * Hellsoft for NetWare:
- * "d[RWCEMFA] supervisor 512 Jan 16 18:53 login"
- * "-[RWCEMFA] rhesus 214059 Oct 20 15:27 cx.exe"
- * Newer Hellsoft for NetWare: (netlab2.usu.edu)
- * - [RWCEAFMS] NFAUUser 192 Apr 27 15:21 HEADER.html
- * d [RWCEAFMS] jrd 512 Jul 11 03:01 allupdates
- * Also NetPresenz for the Mac:
- * "-------r-- 326 1391972 1392298 Nov 22 1995 MegaPhone.sit"
- * "drwxrwxr-x folder 2 May 10 1996 network"
- * Protected directory:
- * "drwx-wx-wt 2 root wheel 512 Jul 1 02:15 incoming"
- * uid/gid instead of username/groupname:
- * "drwxr-xr-x 2 0 0 512 May 28 22:17 etc"
- */
-
- if (numtoks >= 6)
- {
- /* there are two perm formats (Hellsoft/NetWare and *IX strmode(3)).
- * Scan for size column only if the perm format is one or the other.
- */
- if (toklen[0] == 1 || (tokens[0][1]) == '[')
- {
- if (*tokens[0] == 'd' || *tokens[0] == '-')
- {
- pos = toklen[0]-1;
- p = tokens[0] + 1;
- if (pos == 0)
- {
- p = tokens[1];
- pos = toklen[1];
- }
- if ((pos == 9 || pos == 10) &&
- (*p == '[' && p[pos-1] == ']') &&
- (p[1] == 'R' || p[1] == '-') &&
- (p[2] == 'W' || p[2] == '-') &&
- (p[3] == 'C' || p[3] == '-') &&
- (p[4] == 'E' || p[4] == '-'))
- {
- /* rest is FMA[S] or AFM[S] */
- lstyle = 'U'; /* very likely one of the NetWare servers */
- }
- }
- }
- else if ((toklen[0] == 10 || toklen[0] == 11)
- && strchr("-bcdlpsw?DFam", *tokens[0]))
- {
- p = &(tokens[0][1]);
- if ((p[0] == 'r' || p[0] == '-') &&
- (p[1] == 'w' || p[1] == '-') &&
- (p[3] == 'r' || p[3] == '-') &&
- (p[4] == 'w' || p[4] == '-') &&
- (p[6] == 'r' || p[6] == '-') &&
- (p[7] == 'w' || p[7] == '-'))
- /* 'x'/p[9] can be S|s|x|-|T|t or implementation specific */
- {
- lstyle = 'U'; /* very likely /bin/ls */
- }
- }
- }
- if (lstyle == 'U') /* first token checks out */
- {
- lstyle = 0;
- for (pos = (numtoks-5); !lstyle && pos > 1; pos--)
- {
- /* scan for: (\d+)\s+([A-Z][a-z][a-z])\s+
- * (\d\d\d\d|\d\:\d\d|\d\d\:\d\d|\d\:\d\d\:\d\d|\d\d\:\d\d\:\d\d)
- * \s+(.+)$
- */
- if (isdigit(*tokens[pos]) /* size */
- /* (\w\w\w) */
- && toklen[pos+1] == 3 && isalpha(*tokens[pos+1]) &&
- isalpha(tokens[pos+1][1]) && isalpha(tokens[pos+1][2])
- /* (\d|\d\d) */
- && isdigit(*tokens[pos+2]) &&
- (toklen[pos+2] == 1 ||
- (toklen[pos+2] == 2 && isdigit(tokens[pos+2][1])))
- && toklen[pos+3] >= 4 && isdigit(*tokens[pos+3])
- /* (\d\:\d\d\:\d\d|\d\d\:\d\d\:\d\d) */
- && (toklen[pos+3] <= 5 || (
- (toklen[pos+3] == 7 || toklen[pos+3] == 8) &&
- (tokens[pos+3][toklen[pos+3]-3]) == ':'))
- && isdigit(tokens[pos+3][toklen[pos+3]-2])
- && isdigit(tokens[pos+3][toklen[pos+3]-1])
- && (
- /* (\d\d\d\d) */
- ((toklen[pos+3] == 4 || toklen[pos+3] == 5) &&
- isdigit(tokens[pos+3][1]) &&
- isdigit(tokens[pos+3][2]) )
- /* (\d\:\d\d|\d\:\d\d\:\d\d) */
- || ((toklen[pos+3] == 4 || toklen[pos+3] == 7) &&
- (tokens[pos+3][1]) == ':' &&
- isdigit(tokens[pos+3][2]) && isdigit(tokens[pos+3][3]))
- /* (\d\d\:\d\d|\d\d\:\d\d\:\d\d) */
- || ((toklen[pos+3] == 5 || toklen[pos+3] == 8) &&
- isdigit(tokens[pos+3][1]) && (tokens[pos+3][2]) == ':' &&
- isdigit(tokens[pos+3][3]) && isdigit(tokens[pos+3][4]))
- )
- )
- {
- unsigned int i;
- lstyle = 'U'; /* assume /bin/ls or variant format */
- tokmarker = pos;
-
- /* check that size is numeric */
- p = tokens[tokmarker];
- for (i = 0; i < toklen[tokmarker]; i++)
- {
- if (!isdigit(*p++))
- {
- lstyle = 0;
- break;
- }
- }
- if (lstyle)
- {
- month_num = 0;
- p = tokens[tokmarker+1];
- for (i = 0; i < (12*3); i+=3)
- {
- if (p[0] == month_names[i+0] &&
- p[1] == month_names[i+1] &&
- p[2] == month_names[i+2])
- break;
- month_num++;
- }
- if (month_num >= 12)
- lstyle = 0;
- }
- } /* relative position test */
- } /* for (pos = (numtoks-5); !lstyle && pos > 1; pos--) */
- } /* if (lstyle == 'U') */
-
- if (lstyle == 'U')
- {
- state->parsed_one = 1;
- state->lstyle = lstyle;
-
- result->fe_cinfs = 0;
- result->fe_type = '?';
- if (*tokens[0] == 'd' || *tokens[0] == 'l')
- result->fe_type = *tokens[0];
- else if (*tokens[0] == 'D')
- result->fe_type = 'd';
- else if (*tokens[0] == '-' || *tokens[0] == 'F')
- result->fe_type = 'f'; /* (hopefully a regular file) */
-
- if (result->fe_type != 'd')
- {
- pos = toklen[tokmarker];
- if (pos > (sizeof(result->fe_size)-1))
- pos = (sizeof(result->fe_size)-1);
- memcpy( result->fe_size, tokens[tokmarker], pos );
- result->fe_size[pos] = '\0';
- }
-
- result->fe_time.tm_mon = month_num;
- result->fe_time.tm_mday = atoi(tokens[tokmarker+2]);
- if (result->fe_time.tm_mday == 0)
- result->fe_time.tm_mday++;
-
- p = tokens[tokmarker+3];
- pos = (unsigned int)atoi(p);
- if (p[1] == ':') /* one digit hour */
- p--;
- if (p[2] != ':') /* year */
- {
- result->fe_time.tm_year = pos;
- }
- else
- {
- result->fe_time.tm_hour = pos;
- result->fe_time.tm_min = atoi(p+3);
- if (p[5] == ':')
- result->fe_time.tm_sec = atoi(p+6);
-
- if (!state->now_time)
- {
- state->now_time = time (NULL);
- state->now_tm = *localtime (&state->now_time);
- }
-
- result->fe_time.tm_year = state->now_tm.tm_year;
- if ( (( state->now_tm.tm_mon << 5) + state->now_tm.tm_mday) <
- ((result->fe_time.tm_mon << 5) + result->fe_time.tm_mday) )
- result->fe_time.tm_year--;
-
- } /* time/year */
-
- result->fe_fname = tokens[tokmarker+4];
- result->fe_fnlen = (&(line[linelen_sans_wsp]))
- - (result->fe_fname);
-
- if (result->fe_type == 'l' && result->fe_fnlen > 4)
- {
- p = result->fe_fname + 1;
- for (pos = 1; pos < (result->fe_fnlen - 4); pos++)
- {
- if (*p == ' ' && p[1] == '-' && p[2] == '>' && p[3] == ' ')
- {
- result->fe_lname = p + 4;
- result->fe_lnlen = (&(line[linelen_sans_wsp]))
- - (result->fe_lname);
- result->fe_fnlen = pos;
- break;
- }
- p++;
- }
- }
-
-#if defined(SUPPORT_LSLF) /* some (very rare) servers return ls -lF */
- if (result->fe_fnlen > 1)
- {
- p = result->fe_fname[result->fe_fnlen-1];
- pos = result->fe_type;
- if (pos == 'd') {
- if (*p == '/') result->fe_fnlen--; /* directory */
- } else if (pos == 'l') {
- if (*p == '@') result->fe_fnlen--; /* symlink */
- } else if (pos == 'f') {
- if (*p == '*') result->fe_fnlen--; /* executable */
- } else if (*p == '=' || *p == '%' || *p == '|') {
- result->fe_fnlen--; /* socket, whiteout, fifo */
- }
- }
-#endif
-
- /* the caller should do this (if dropping "." and ".." is desired)
- if (result->fe_type == 'd' && result->fe_fname[0] == '.' &&
- (result->fe_fnlen == 1 || (result->fe_fnlen == 2 &&
- result->fe_fname[1] == '.')))
- return '?';
- */
-
- return result->fe_type;
-
- } /* if (lstyle == 'U') */
-
- } /* if (!lstyle && (!state->lstyle || state->lstyle == 'U')) */
-#endif
-
- /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
-
-#if defined(SUPPORT_W16) /* 16bit Windows */
- if (!lstyle && (!state->lstyle || state->lstyle == 'w'))
- { /* old SuperTCP suite FTP server for Win3.1 */
- /* old NetManage Chameleon TCP/IP suite FTP server for Win3.1 */
- /*
- * SuperTCP dirlist from the mirror.pl project
- * mon/day/year separator may be '/' or '-'.
- * . <DIR> 11-16-94 17:16
- * .. <DIR> 11-16-94 17:16
- * INSTALL <DIR> 11-16-94 17:17
- * CMT <DIR> 11-21-94 10:17
- * DESIGN1.DOC 11264 05-11-95 14:20
- * README.TXT 1045 05-10-95 11:01
- * WPKIT1.EXE 960338 06-21-95 17:01
- * CMT.CSV 0 07-06-95 14:56
- *
- * Chameleon dirlist guessed from lynx
- * . <DIR> Nov 16 1994 17:16
- * .. <DIR> Nov 16 1994 17:16
- * INSTALL <DIR> Nov 16 1994 17:17
- * CMT <DIR> Nov 21 1994 10:17
- * DESIGN1.DOC 11264 May 11 1995 14:20 A
- * README.TXT 1045 May 10 1995 11:01
- * WPKIT1.EXE 960338 Jun 21 1995 17:01 R
- * CMT.CSV 0 Jul 06 1995 14:56 RHA
- */
- if (numtoks >= 4 && toklen[0] < 13 &&
- ((toklen[1] == 5 && *tokens[1] == '<') || isdigit(*tokens[1])) )
- {
- if (numtoks == 4
- && (toklen[2] == 8 || toklen[2] == 9)
- && (((tokens[2][2]) == '/' && (tokens[2][5]) == '/') ||
- ((tokens[2][2]) == '-' && (tokens[2][5]) == '-'))
- && (toklen[3] == 4 || toklen[3] == 5)
- && (tokens[3][toklen[3]-3]) == ':'
- && isdigit(tokens[2][0]) && isdigit(tokens[2][1])
- && isdigit(tokens[2][3]) && isdigit(tokens[2][4])
- && isdigit(tokens[2][6]) && isdigit(tokens[2][7])
- && (toklen[2] < 9 || isdigit(tokens[2][8]))
- && isdigit(tokens[3][toklen[3]-1]) && isdigit(tokens[3][toklen[3]-2])
- && isdigit(tokens[3][toklen[3]-4]) && isdigit(*tokens[3])
- )
- {
- lstyle = 'w';
- }
- else if ((numtoks == 6 || numtoks == 7)
- && toklen[2] == 3 && toklen[3] == 2
- && toklen[4] == 4 && toklen[5] == 5
- && (tokens[5][2]) == ':'
- && isalpha(tokens[2][0]) && isalpha(tokens[2][1])
- && isalpha(tokens[2][2])
- && isdigit(tokens[3][0]) && isdigit(tokens[3][1])
- && isdigit(tokens[4][0]) && isdigit(tokens[4][1])
- && isdigit(tokens[4][2]) && isdigit(tokens[4][3])
- && isdigit(tokens[5][0]) && isdigit(tokens[5][1])
- && isdigit(tokens[5][3]) && isdigit(tokens[5][4])
- /* could also check that (&(tokens[5][5]) - tokens[2]) == 17 */
- )
- {
- lstyle = 'w';
- }
- if (lstyle && state->lstyle != lstyle) /* first time */
- {
- p = tokens[1];
- if (toklen[1] != 5 || p[0] != '<' || p[1] != 'D' ||
- p[2] != 'I' || p[3] != 'R' || p[4] != '>')
- {
- for (pos = 0; lstyle && pos < toklen[1]; pos++)
- {
- if (!isdigit(*p++))
- lstyle = 0;
- }
- } /* not <DIR> */
- } /* if (first time) */
- } /* if (numtoks == ...) */
-
- if (lstyle == 'w')
- {
- state->parsed_one = 1;
- state->lstyle = lstyle;
-
- result->fe_cinfs = 1;
- result->fe_fname = tokens[0];
- result->fe_fnlen = toklen[0];
- result->fe_type = 'd';
-
- p = tokens[1];
- if (isdigit(*p))
- {
- result->fe_type = 'f';
- pos = toklen[1];
- if (pos > (sizeof(result->fe_size)-1))
- pos = sizeof(result->fe_size)-1;
- memcpy( result->fe_size, p, pos );
- result->fe_size[pos] = '\0';
- }
-
- p = tokens[2];
- if (toklen[2] == 3) /* Chameleon */
- {
- tbuf[0] = toupper(p[0]);
- tbuf[1] = tolower(p[1]);
- tbuf[2] = tolower(p[2]);
- for (pos = 0; pos < (12*3); pos+=3)
- {
- if (tbuf[0] == month_names[pos+0] &&
- tbuf[1] == month_names[pos+1] &&
- tbuf[2] == month_names[pos+2])
- {
- result->fe_time.tm_mon = pos/3;
- result->fe_time.tm_mday = atoi(tokens[3]);
- result->fe_time.tm_year = atoi(tokens[4]) - 1900;
- break;
- }
- }
- pos = 5; /* Chameleon toknum of date field */
- }
- else
- {
- result->fe_time.tm_mon = atoi(p+0)-1;
- result->fe_time.tm_mday = atoi(p+3);
- result->fe_time.tm_year = atoi(p+6);
- if (result->fe_time.tm_year < 80) /* SuperTCP */
- result->fe_time.tm_year += 100;
-
- pos = 3; /* SuperTCP toknum of date field */
- }
-
- result->fe_time.tm_hour = atoi(tokens[pos]);
- result->fe_time.tm_min = atoi(&(tokens[pos][toklen[pos]-2]));
-
- /* the caller should do this (if dropping "." and ".." is desired)
- if (result->fe_type == 'd' && result->fe_fname[0] == '.' &&
- (result->fe_fnlen == 1 || (result->fe_fnlen == 2 &&
- result->fe_fname[1] == '.')))
- return '?';
- */
-
- return result->fe_type;
- } /* (lstyle == 'w') */
-
- } /* if (!lstyle && (!state->lstyle || state->lstyle == 'w')) */
-#endif
-
- /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
-
-#if defined(SUPPORT_DLS) /* dls -dtR */
- if (!lstyle &&
- (state->lstyle == 'D' || (!state->lstyle && state->numlines == 1)))
- /* /bin/dls lines have to be immediately recognizable (first line) */
- {
- /* I haven't seen an FTP server that delivers a /bin/dls listing,
- * but can infer the format from the lynx and mirror.pl projects.
- * Both formats are supported.
- *
- * Lynx says:
- * README 763 Information about this server\0
- * bin/ - \0
- * etc/ = \0
- * ls-lR 0 \0
- * ls-lR.Z 3 \0
- * pub/ = Public area\0
- * usr/ - \0
- * morgan 14 -> ../real/morgan\0
- * TIMIT.mostlikely.Z\0
- * 79215 \0
- *
- * mirror.pl says:
- * filename: ^(\S*)\s+
- * size: (\-|\=|\d+)\s+
- * month/day: ((\w\w\w\s+\d+|\d+\s+\w\w\w)\s+
- * time/year: (\d+:\d+|\d\d\d\d))\s+
- * rest: (.+)
- *
- * README 763 Jul 11 21:05 Information about this server
- * bin/ - Apr 28 1994
- * etc/ = 11 Jul 21:04
- * ls-lR 0 6 Aug 17:14
- * ls-lR.Z 3 05 Sep 1994
- * pub/ = Jul 11 21:04 Public area
- * usr/ - Sep 7 09:39
- * morgan 14 Apr 18 09:39 -> ../real/morgan
- * TIMIT.mostlikely.Z
- * 79215 Jul 11 21:04
- */
- if (!state->lstyle && line[linelen-1] == ':' &&
- linelen >= 2 && toklen[numtoks-1] != 1)
- {
- /* code in mirror.pl suggests that a listing may be preceded
- * by a PWD line in the form "/some/dir/names/here:"
- * but does not necessarily begin with '/'. *sigh*
- */
- pos = 0;
- p = line;
- while (pos < (linelen-1))
- {
- /* illegal (or extremely unusual) chars in a dirspec */
- if (*p == '<' || *p == '|' || *p == '>' ||
- *p == '?' || *p == '*' || *p == '\\')
- break;
- if (*p == '/' && pos < (linelen-2) && p[1] == '/')
- break;
- pos++;
- p++;
- }
- if (pos == (linelen-1))
- {
- state->lstyle = 'D';
- return '?';
- }
- }
-
- if (!lstyle && numtoks >= 2)
- {
- pos = 22; /* pos of (\d+|-|=) if this is not part of a multiline */
- if (state->lstyle && carry_buf_len) /* first is from previous line */
- pos = toklen[1]-1; /* and is 'as-is' (may contain whitespace) */
-
- if (linelen > pos)
- {
- p = &line[pos];
- if ((*p == '-' || *p == '=' || isdigit(*p)) &&
- ((linelen == (pos+1)) ||
- (linelen >= (pos+3) && p[1] == ' ' && p[2] == ' ')) )
- {
- tokmarker = 1;
- if (!carry_buf_len)
- {
- pos = 1;
- while (pos < numtoks && (tokens[pos]+toklen[pos]) < (&line[23]))
- pos++;
- tokmarker = 0;
- if ((tokens[pos]+toklen[pos]) == (&line[23]))
- tokmarker = pos;
- }
- if (tokmarker)
- {
- lstyle = 'D';
- if (*tokens[tokmarker] == '-' || *tokens[tokmarker] == '=')
- {
- if (toklen[tokmarker] != 1 ||
- (tokens[tokmarker-1][toklen[tokmarker-1]-1]) != '/')
- lstyle = 0;
- }
- else
- {
- for (pos = 0; lstyle && pos < toklen[tokmarker]; pos++)
- {
- if (!isdigit(tokens[tokmarker][pos]))
- lstyle = 0;
- }
- }
- if (lstyle && !state->lstyle) /* first time */
- {
- /* scan for illegal (or incredibly unusual) chars in fname */
- for (p = tokens[0]; lstyle &&
- p < &(tokens[tokmarker-1][toklen[tokmarker-1]]); p++)
- {
- if (*p == '<' || *p == '|' || *p == '>' ||
- *p == '?' || *p == '*' || *p == '/' || *p == '\\')
- lstyle = 0;
- }
- }
-
- } /* size token found */
- } /* expected chars behind expected size token */
- } /* if (linelen > pos) */
- } /* if (!lstyle && numtoks >= 2) */
-
- if (!lstyle && state->lstyle == 'D' && !carry_buf_len)
- {
- /* the filename of a multi-line entry can be identified
- * correctly only if dls format had been previously established.
- * This should always be true because there should be entries
- * for '.' and/or '..' and/or CWD that precede the rest of the
- * listing.
- */
- pos = linelen;
- if (pos > (sizeof(state->carry_buf)-1))
- pos = sizeof(state->carry_buf)-1;
- memcpy( state->carry_buf, line, pos );
- state->carry_buf_len = pos;
- return '?';
- }
-
- if (lstyle == 'D')
- {
- state->parsed_one = 1;
- state->lstyle = lstyle;
-
- p = &(tokens[tokmarker-1][toklen[tokmarker-1]]);
- result->fe_fname = tokens[0];
- result->fe_fnlen = p - tokens[0];
- result->fe_type = 'f';
-
- if (result->fe_fname[result->fe_fnlen-1] == '/')
- {
- if (result->fe_lnlen == 1)
- result->fe_type = '?';
- else
- {
- result->fe_fnlen--;
- result->fe_type = 'd';
- }
- }
- else if (isdigit(*tokens[tokmarker]))
- {
- pos = toklen[tokmarker];
- if (pos > (sizeof(result->fe_size)-1))
- pos = sizeof(result->fe_size)-1;
- memcpy( result->fe_size, tokens[tokmarker], pos );
- result->fe_size[pos] = '\0';
- }
-
- if ((tokmarker+3) < numtoks &&
- (&(tokens[numtoks-1][toklen[numtoks-1]]) -
- tokens[tokmarker+1]) >= (1+1+3+1+4) )
- {
- pos = (tokmarker+3);
- p = tokens[pos];
- pos = toklen[pos];
-
- if ((pos == 4 || pos == 5)
- && isdigit(*p) && isdigit(p[pos-1]) && isdigit(p[pos-2])
- && ((pos == 5 && p[2] == ':') ||
- (pos == 4 && (isdigit(p[1]) || p[1] == ':')))
- )
- {
- month_num = tokmarker+1; /* assumed position of month field */
- pos = tokmarker+2; /* assumed position of mday field */
- if (isdigit(*tokens[month_num])) /* positions are reversed */
- {
- month_num++;
- pos--;
- }
- p = tokens[month_num];
- if (isdigit(*tokens[pos])
- && (toklen[pos] == 1 ||
- (toklen[pos] == 2 && isdigit(tokens[pos][1])))
- && toklen[month_num] == 3
- && isalpha(*p) && isalpha(p[1]) && isalpha(p[2]) )
- {
- pos = atoi(tokens[pos]);
- if (pos > 0 && pos <= 31)
- {
- result->fe_time.tm_mday = pos;
- month_num = 1;
- for (pos = 0; pos < (12*3); pos+=3)
- {
- if (p[0] == month_names[pos+0] &&
- p[1] == month_names[pos+1] &&
- p[2] == month_names[pos+2])
- break;
- month_num++;
- }
- if (month_num > 12)
- result->fe_time.tm_mday = 0;
- else
- result->fe_time.tm_mon = month_num - 1;
- }
- }
- if (result->fe_time.tm_mday)
- {
- tokmarker += 3; /* skip mday/mon/yrtime (to find " -> ") */
- p = tokens[tokmarker];
-
- pos = atoi(p);
- if (pos > 24)
- result->fe_time.tm_year = pos-1900;
- else
- {
- if (p[1] == ':')
- p--;
- result->fe_time.tm_hour = pos;
- result->fe_time.tm_min = atoi(p+3);
- if (!state->now_time)
- {
- state->now_time = time (NULL);
- state->now_tm = *localtime (&state->now_time);
- }
- result->fe_time.tm_year = state->now_tm.tm_year;
- if ( (( state->now_tm.tm_mon << 4) + state->now_tm.tm_mday) <
- ((result->fe_time.tm_mon << 4) + result->fe_time.tm_mday) )
- result->fe_time.tm_year--;
- } /* got year or time */
- } /* got month/mday */
- } /* may have year or time */
- } /* enough remaining to possibly have date/time */
-
- if (numtoks > (tokmarker+2))
- {
- pos = tokmarker+1;
- p = tokens[pos];
- if (toklen[pos] == 2 && *p == '-' && p[1] == '>')
- {
- p = &(tokens[numtoks-1][toklen[numtoks-1]]);
- result->fe_type = 'l';
- result->fe_lname = tokens[pos+1];
- result->fe_lnlen = p - result->fe_lname;
- if (result->fe_lnlen > 1 &&
- result->fe_lname[result->fe_lnlen-1] == '/')
- result->fe_lnlen--;
- }
- } /* if (numtoks > (tokmarker+2)) */
-
- /* the caller should do this (if dropping "." and ".." is desired)
- if (result->fe_type == 'd' && result->fe_fname[0] == '.' &&
- (result->fe_fnlen == 1 || (result->fe_fnlen == 2 &&
- result->fe_fname[1] == '.')))
- return '?';
- */
-
- return result->fe_type;
-
- } /* if (lstyle == 'D') */
- } /* if (!lstyle && (!state->lstyle || state->lstyle == 'D')) */
-#endif
-
- /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
-
- } /* if (linelen > 0) */
-
- if (state->parsed_one || state->lstyle) /* junk if we fail to parse */
- return '?'; /* this time but had previously parsed successfully */
- return '"'; /* its part of a comment or error message */
-}
-
-/* ==================================================================== */
-/* standalone testing */
-/* ==================================================================== */
-#if 0
-
-#include <stdio.h>
-
-static int do_it(FILE *outfile,
- char *line, size_t linelen, struct list_state *state,
- char **cmnt_buf, unsigned int *cmnt_buf_sz,
- char **list_buf, unsigned int *list_buf_sz )
-{
- struct list_result result;
- char *p;
- int rc;
-
- rc = ParseFTPLIST( line, state, &result );
-
- if (!outfile)
- {
- outfile = stdout;
- if (rc == '?')
- fprintf(outfile, "junk: %.*s\n", (int)linelen, line );
- else if (rc == '"')
- fprintf(outfile, "cmnt: %.*s\n", (int)linelen, line );
- else
- fprintf(outfile,
- "list: %02u-%02u-%02u %02u:%02u%cM %20s %.*s%s%.*s\n",
- (result.fe_time.tm_mday ? (result.fe_time.tm_mon + 1) : 0),
- result.fe_time.tm_mday,
- (result.fe_time.tm_mday ? (result.fe_time.tm_year % 100) : 0),
- result.fe_time.tm_hour -
- ((result.fe_time.tm_hour > 12)?(12):(0)),
- result.fe_time.tm_min,
- ((result.fe_time.tm_hour >= 12) ? 'P' : 'A'),
- (rc == 'd' ? "<DIR> " :
- (rc == 'l' ? "<JUNCTION> " : result.fe_size)),
- (int)result.fe_fnlen, result.fe_fname,
- ((rc == 'l' && result.fe_lnlen) ? " -> " : ""),
- (int)((rc == 'l' && result.fe_lnlen) ? result.fe_lnlen : 0),
- ((rc == 'l' && result.fe_lnlen) ? result.fe_lname : "") );
- }
- else if (rc != '?') /* NOT junk */
- {
- char **bufp = list_buf;
- unsigned int *bufz = list_buf_sz;
-
- if (rc == '"') /* comment - make it a 'result' */
- {
- memset( &result, 0, sizeof(result));
- result.fe_fname = line;
- result.fe_fnlen = linelen;
- result.fe_type = 'f';
- if (line[linelen-1] == '/')
- {
- result.fe_type = 'd';
- result.fe_fnlen--;
- }
- bufp = cmnt_buf;
- bufz = cmnt_buf_sz;
- rc = result.fe_type;
- }
-
- linelen = 80 + result.fe_fnlen + result.fe_lnlen;
- p = (char *)realloc( *bufp, *bufz + linelen );
- if (!p)
- return -1;
- sprintf( &p[*bufz],
- "%02u-%02u-%04u %02u:%02u:%02u %20s %.*s%s%.*s\n",
- (result.fe_time.tm_mday ? (result.fe_time.tm_mon + 1) : 0),
- result.fe_time.tm_mday,
- (result.fe_time.tm_mday ? (result.fe_time.tm_year + 1900) : 0),
- result.fe_time.tm_hour,
- result.fe_time.tm_min,
- result.fe_time.tm_sec,
- (rc == 'd' ? "<DIR> " :
- (rc == 'l' ? "<JUNCTION> " : result.fe_size)),
- (int)result.fe_fnlen, result.fe_fname,
- ((rc == 'l' && result.fe_lnlen) ? " -> " : ""),
- (int)((rc == 'l' && result.fe_lnlen) ? result.fe_lnlen : 0),
- ((rc == 'l' && result.fe_lnlen) ? result.fe_lname : "") );
- linelen = strlen(&p[*bufz]);
- *bufp = p;
- *bufz = *bufz + linelen;
- }
- return 0;
-}
-
-int main(int argc, char *argv[])
-{
- FILE *infile = (FILE *)0;
- FILE *outfile = (FILE *)0;
- int need_close_in = 0;
- int need_close_out = 0;
-
- if (argc > 1)
- {
- infile = stdin;
- if (strcmp(argv[1], "-") == 0)
- need_close_in = 0;
- else if ((infile = fopen(argv[1], "r")) != ((FILE *)0))
- need_close_in = 1;
- else
- fprintf(stderr, "Unable to open input file '%s'\n", argv[1]);
- }
- if (infile && argc > 2)
- {
- outfile = stdout;
- if (strcmp(argv[2], "-") == 0)
- need_close_out = 0;
- else if ((outfile = fopen(argv[2], "w")) != ((FILE *)0))
- need_close_out = 1;
- else
- {
- fprintf(stderr, "Unable to open output file '%s'\n", argv[2]);
- fclose(infile);
- infile = (FILE *)0;
- }
- }
-
- if (!infile)
- {
- char *appname = &(argv[0][strlen(argv[0])]);
- while (appname > argv[0])
- {
- appname--;
- if (*appname == '/' || *appname == '\\' || *appname == ':')
- {
- appname++;
- break;
- }
- }
- fprintf(stderr,
- "Usage: %s <inputfilename> [<outputfilename>]\n"
- "\nIf an outout file is specified the results will be"
- "\nbe post-processed, and only the file entries will appear"
- "\n(or all comments if there are no file entries)."
- "\nNot specifying an output file causes %s to run in \"debug\""
- "\nmode, ie results are printed as lines are parsed."
- "\nIf a filename is a single dash ('-'), stdin/stdout is used."
- "\n", appname, appname );
- }
- else
- {
- char *cmnt_buf = (char *)0;
- unsigned int cmnt_buf_sz = 0;
- char *list_buf = (char *)0;
- unsigned int list_buf_sz = 0;
-
- struct list_state state;
- char line[512];
-
- memset( &state, 0, sizeof(state) );
- while (fgets(line, sizeof(line), infile))
- {
- size_t linelen = strlen(line);
- if (linelen < (sizeof(line)-1))
- {
- if (linelen > 0 && line[linelen-1] == '\n')
- linelen--;
- if (do_it( outfile, line, linelen, &state,
- &cmnt_buf, &cmnt_buf_sz, &list_buf, &list_buf_sz) != 0)
- {
- fprintf(stderr, "Insufficient memory. Listing may be incomplete.\n");
- break;
- }
- }
- else
- {
- /* no '\n' found. drop this and everything up to the next '\n' */
- fprintf(stderr, "drop: %.*s", (int)linelen, line );
- while (linelen == sizeof(line))
- {
- if (!fgets(line, sizeof(line), infile))
- break;
- linelen = 0;
- while (linelen < sizeof(line) && line[linelen] != '\n')
- linelen++;
- fprintf(stderr, "%.*s", (int)linelen, line );
- }
- fprintf(stderr, "\n");
- }
- }
- if (outfile)
- {
- if (list_buf)
- fwrite( list_buf, 1, list_buf_sz, outfile );
- else if (cmnt_buf)
- fwrite( cmnt_buf, 1, cmnt_buf_sz, outfile );
- }
- if (list_buf)
- free(list_buf);
- if (cmnt_buf)
- free(cmnt_buf);
-
- if (need_close_in)
- fclose(infile);
- if (outfile && need_close_out)
- fclose(outfile);
- }
-
- return 0;
-}
-#endif
diff --git a/daemon/ParseFTPList.h b/daemon/ParseFTPList.h
deleted file mode 100644
index 5580657e..00000000
--- a/daemon/ParseFTPList.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org Code.
- *
- * The Initial Developer of the Original Code is
- * Cyrus Patel <cyp@fb14.uni-mainz.de>.
- * Portions created by the Initial Developer are Copyright (C) 2002
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Doug Turner <dougt@netscape.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include <glib.h>
-
-/* ParseFTPList() parses lines from an FTP LIST command.
-**
-** Written July 2002 by Cyrus Patel <cyp@fb14.uni-mainz.de>
-** with acknowledgements to squid, lynx, wget and ftpmirror.
-**
-** Arguments:
-** 'line': line of FTP data connection output. The line is assumed
-** to end at the first '\0' or '\n' or '\r\n'.
-** 'state': a structure used internally to track state between
-** lines. Needs to be bzero()'d at LIST begin.
-** 'result': where ParseFTPList will store the results of the parse
-** if 'line' is not a comment and is not junk.
-**
-** Returns one of the following:
-** 'd' - LIST line is a directory entry ('result' is valid)
-** 'f' - LIST line is a file's entry ('result' is valid)
-** 'l' - LIST line is a symlink's entry ('result' is valid)
-** '?' - LIST line is junk. (cwd, non-file/dir/link, etc)
-** '"' - its not a LIST line (its a "comment")
-**
-** It may be advisable to let the end-user see "comments" (particularly when
-** the listing results in ONLY such lines) because such a listing may be:
-** - an unknown LIST format (NLST or "custom" format for example)
-** - an error msg (EPERM,ENOENT,ENFILE,EMFILE,ENOTDIR,ENOTBLK,EEXDEV etc).
-** - an empty directory and the 'comment' is a "total 0" line or similar.
-** (warning: a "total 0" can also mean the total size is unknown).
-**
-** ParseFTPList() supports all known FTP LISTing formats:
-** - '/bin/ls -l' and all variants (including Hellsoft FTP for NetWare);
-** - EPLF (Easily Parsable List Format);
-** - Windows NT's default "DOS-dirstyle";
-** - OS/2 basic server format LIST format;
-** - VMS (MultiNet, UCX, and CMU) LIST format (including multi-line format);
-** - IBM VM/CMS, VM/ESA LIST format (two known variants);
-** - SuperTCP FTP Server for Win16 LIST format;
-** - NetManage Chameleon (NEWT) for Win16 LIST format;
-** - '/bin/dls' (two known variants, plus multi-line) LIST format;
-** If there are others, then I'd like to hear about them (send me a sample).
-**
-** NLSTings are not supported explicitely because they cannot be machine
-** parsed consistently: NLSTings do not have unique characteristics - even
-** the assumption that there won't be whitespace on the line does not hold
-** because some nlistings have more than one filename per line and/or
-** may have filenames that have spaces in them. Moreover, distinguishing
-** between an error message and an NLST line would require ParseList() to
-** recognize all the possible strerror() messages in the world.
-*/
-
-
-/* #undef anything you don't want to support */
-#define SUPPORT_LSL /* /bin/ls -l and dozens of variations therof */
-#define SUPPORT_DLS /* /bin/dls format (very, Very, VERY rare) */
-#define SUPPORT_EPLF /* Extraordinarily Pathetic List Format */
-#define SUPPORT_DOS /* WinNT server in 'site dirstyle' dos */
-#define SUPPORT_VMS /* VMS (all: MultiNet, UCX, CMU-IP) */
-#define SUPPORT_CMS /* IBM VM/CMS,VM/ESA (z/VM and LISTING forms) */
-#define SUPPORT_OS2 /* IBM TCP/IP for OS/2 - FTP Server */
-#define SUPPORT_W16 /* win16 hosts: SuperTCP or NetManage Chameleon */
-
-struct list_state
-{
- void *magic; /* to determine if previously initialized */
- time_t now_time; /* current date for year calculation */
- struct tm now_tm; /* current date for year calculation */
- gint32 lstyle; /* LISTing style */
- gint32 parsed_one; /* returned anything yet? */
- char carry_buf[84]; /* for VMS multiline */
- guint32 carry_buf_len; /* length of name in carry_buf */
- guint32 numlines; /* number of lines seen */
-};
-
-struct list_result
-{
- gint32 fe_type; /* 'd'(dir) or 'l'(link) or 'f'(file) */
- const char * fe_fname; /* pointer to filename */
- guint32 fe_fnlen; /* length of filename */
- const char * fe_lname; /* pointer to symlink name */
- guint32 fe_lnlen; /* length of symlink name */
- char fe_size[40]; /* size of file in bytes (<= (2^128 - 1)) */
- struct tm fe_time; /* last-modified time */
- gint32 fe_cinfs; /* file system is definitely case insensitive */
- /* (converting all-upcase names may be desirable) */
-};
-
-int ParseFTPList(const char *line,
- struct list_state *state,
- struct list_result *result );
-
diff --git a/daemon/archive.mount.in b/daemon/archive.mount.in
deleted file mode 100644
index 4c3237bd..00000000
--- a/daemon/archive.mount.in
+++ /dev/null
@@ -1,5 +0,0 @@
-[Mount]
-Type=archive
-Exec=@libexecdir@/gvfsd-archive
-AutoMount=false
-Scheme=archive
diff --git a/daemon/burn.mount.in b/daemon/burn.mount.in
deleted file mode 100644
index ef4fd798..00000000
--- a/daemon/burn.mount.in
+++ /dev/null
@@ -1,5 +0,0 @@
-[Mount]
-Type=burn
-Exec=@libexecdir@/gvfsd-burn
-AutoMount=true
-
diff --git a/daemon/cdda.mount.in b/daemon/cdda.mount.in
deleted file mode 100644
index 8541c208..00000000
--- a/daemon/cdda.mount.in
+++ /dev/null
@@ -1,4 +0,0 @@
-[Mount]
-Type=cdda
-Exec=@libexecdir@/gvfsd-cdda
-AutoMount=false
diff --git a/daemon/computer.mount.in b/daemon/computer.mount.in
deleted file mode 100644
index c021644b..00000000
--- a/daemon/computer.mount.in
+++ /dev/null
@@ -1,5 +0,0 @@
-[Mount]
-Type=computer
-Exec=@libexecdir@/gvfsd-computer
-AutoMount=true
-
diff --git a/daemon/daemon-main-generic.c b/daemon/daemon-main-generic.c
deleted file mode 100644
index 3de0133b..00000000
--- a/daemon/daemon-main-generic.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include "daemon-main.h"
-#include G_STRINGIFY(BACKEND_HEADER)
-
-int
-main (int argc, char *argv[])
-{
- daemon_init ();
-#ifdef BACKEND_SETUP_FUNC
- BACKEND_SETUP_FUNC ();
-#else
- daemon_setup ();
-#endif
- daemon_main (argc, argv,
-#ifdef MAX_JOB_THREADS
- MAX_JOB_THREADS,
-#else
- -1,
-#endif
-#ifdef DEFAULT_BACKEND_TYPE
- G_STRINGIFY(DEFAULT_BACKEND_TYPE),
-#else
- NULL,
-#endif
-#ifdef MOUNTABLE_DBUS_NAME
- G_STRINGIFY(MOUNTABLE_DBUS_NAME),
-#else
- NULL,
-#endif
- BACKEND_TYPES
- NULL);
-
- return 0;
-}
diff --git a/daemon/daemon-main.c b/daemon/daemon-main.c
deleted file mode 100644
index b3b2b477..00000000
--- a/daemon/daemon-main.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <locale.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include "daemon-main.h"
-#include <glib/gi18n.h>
-#include <gvfsdaemon.h>
-#include <gvfsdaemonprotocol.h>
-#include <gvfsbackend.h>
-
-static char *spawner_id = NULL;
-static char *spawner_path = NULL;
-
-
-
-void
-daemon_init (void)
-{
- DBusConnection *connection;
- DBusError derror;
-
- setlocale (LC_ALL, "");
-
- bindtextdomain (GETTEXT_PACKAGE, GVFS_LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- dbus_threads_init_default ();
- g_thread_init (NULL);
- g_type_init ();
-
- dbus_error_init (&derror);
- connection = dbus_bus_get (DBUS_BUS_SESSION, &derror);
- if (connection == NULL)
- {
- g_printerr (_("Error connecting to D-Bus: %s"), derror.message);
- g_printerr ("\n");
- dbus_error_free (&derror);
- exit (1);
- }
-}
-
-void
-daemon_setup (void)
-{
- char *name, *up;
-
- up = g_ascii_strup (G_STRINGIFY (DEFAULT_BACKEND_TYPE), -1);
- /* translators: This is the default daemon's application name,
- * the %s is the type of the backend, like "ftp" */
- name = g_strdup_printf (_("%s Filesystem Service"), up);
- g_set_application_name (name);
- g_free (name);
- g_free (up);
-}
-
-static void
-send_spawned (DBusConnection *connection, gboolean succeeded, char *error_message)
-{
- DBusMessage *message;
- dbus_bool_t dbus_succeeded;
-
- if (error_message == NULL)
- error_message = "";
-
- if (spawner_id == NULL || spawner_path == NULL)
- {
- if (!succeeded)
- {
- g_printerr (_("Error: %s"), error_message);
- g_printerr ("\n");
- }
- return;
- }
-
- message = dbus_message_new_method_call (spawner_id,
- spawner_path,
- G_VFS_DBUS_SPAWNER_INTERFACE,
- G_VFS_DBUS_OP_SPAWNED);
- dbus_message_set_no_reply (message, TRUE);
-
- dbus_succeeded = succeeded;
- if (!dbus_message_append_args (message,
- DBUS_TYPE_BOOLEAN, &dbus_succeeded,
- DBUS_TYPE_STRING, &error_message,
- DBUS_TYPE_INVALID))
- _g_dbus_oom ();
-
- dbus_connection_send (connection, message, NULL);
- /* Make sure the message is sent */
- dbus_connection_flush (connection);
-}
-
-GMountSpec *
-daemon_parse_args (int argc, char *argv[], const char *default_type)
-{
- GMountSpec *mount_spec;
-
- mount_spec = NULL;
- if (argc > 1 && strcmp (argv[1], "--spawner") == 0)
- {
- if (argc < 4)
- {
- g_printerr (_("Usage: %s --spawner dbus-id object_path"), argv[0]);
- g_printerr ("\n");
- exit (1);
- }
-
- spawner_id = argv[2];
- spawner_path = argv[3];
- }
- else if (argc > 1 || default_type != NULL)
- {
- gboolean found_type;
- int i;
-
- mount_spec = g_mount_spec_new (default_type);
- found_type = default_type != NULL;
-
- for (i = 1; i < argc; i++)
- {
- char *p;
- char *key;
-
- p = strchr (argv[i], '=');
- if (p == NULL || p[1] == 0 || p == argv[i])
- {
- g_printerr (_("Usage: %s key=value key=value ..."), argv[0]);
- g_printerr ("\n");
- exit (1);
- }
-
- key = g_strndup (argv[i], p - argv[i]);
- if (strcmp (key, "type") == 0)
- found_type = TRUE;
-
- g_mount_spec_set (mount_spec, key, p+1);
- g_print ("setting '%s' to '%s'\n", key, p+1);
- g_free (key);
- }
-
- if (!found_type)
- {
- g_printerr (_("No mount type specified"));
- g_printerr ("\n");
- g_printerr (_("Usage: %s key=value key=value ..."), argv[0]);
- g_printerr ("\n");
- exit (1);
- }
- }
-
- return mount_spec;
-}
-
-void
-daemon_main (int argc,
- char *argv[],
- int max_job_threads,
- const char *default_type,
- const char *mountable_name,
- const char *first_type_name,
- ...)
-{
- va_list var_args;
- DBusConnection *connection;
- GMainLoop *loop;
- GVfsDaemon *daemon;
- DBusError derror;
- GMountSpec *mount_spec;
- GMountSource *mount_source;
- GError *error;
- int res;
- const char *type;
-
- dbus_error_init (&derror);
- connection = dbus_bus_get (DBUS_BUS_SESSION, &derror);
- if (connection == NULL)
- {
- g_printerr (_("Error connecting to D-Bus: %s"), derror.message);
- g_printerr ("\n");
- dbus_error_free (&derror);
- exit (1);
- }
-
- mount_spec = daemon_parse_args (argc, argv, default_type);
-
- va_start (var_args, first_type_name);
-
- type = first_type_name;
-
- while (type != NULL)
- {
- GType backend_type = va_arg (var_args, GType);
-
- g_vfs_register_backend (backend_type, type);
-
- type = va_arg (var_args, char *);
- }
-
- error = NULL;
- if (mountable_name)
- {
-
- res = dbus_bus_request_name (connection,
- mountable_name,
- 0, &derror);
-
- if (res != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
- {
- if (res == -1)
- _g_error_from_dbus (&derror, &error);
- else
- g_set_error (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("mountpoint for %s already running"), mountable_name);
-
- send_spawned (connection, FALSE, error->message);
- g_error_free (error);
- exit (1);
- }
- }
-
- daemon = g_vfs_daemon_new (FALSE, FALSE);
- if (daemon == NULL)
- {
- send_spawned (connection, FALSE, _("error starting mount daemon"));
- exit (1);
- }
-
- g_vfs_daemon_set_max_threads (daemon, max_job_threads);
-
- send_spawned (connection, TRUE, NULL);
-
- if (mount_spec)
- {
- mount_source = g_mount_source_new_dummy ();
- g_vfs_daemon_initiate_mount (daemon, mount_spec, mount_source, FALSE, NULL);
- g_mount_spec_unref (mount_spec);
- g_object_unref (mount_source);
- }
-
- loop = g_main_loop_new (NULL, FALSE);
-
- g_main_loop_run (loop);
-}
-
diff --git a/daemon/daemon-main.h b/daemon/daemon-main.h
deleted file mode 100644
index 818940a5..00000000
--- a/daemon/daemon-main.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __MAIN_HELPER_H__
-#define __MAIN_HELPER_H__
-
-#include "gmountsource.h"
-
-G_BEGIN_DECLS
-
-void daemon_init (void);
-GMountSpec *daemon_parse_args (int argc,
- char *argv[],
- const char *default_type);
-void daemon_setup (void);
-void daemon_main (int argc,
- char *argv[],
- int max_job_threads,
- const char *default_type,
- const char *mountable_name,
- const char *first_type_name,
- ...);
-
-G_END_DECLS
-
-#endif /* __MAIN_HELPER__ */
diff --git a/daemon/dav.mount.in b/daemon/dav.mount.in
deleted file mode 100644
index 6e75bce7..00000000
--- a/daemon/dav.mount.in
+++ /dev/null
@@ -1,4 +0,0 @@
-[Mount]
-Type=dav
-Exec=@libexecdir@/gvfsd-dav
-AutoMount=false
diff --git a/daemon/dbus-gmain.c b/daemon/dbus-gmain.c
deleted file mode 100644
index 06f03682..00000000
--- a/daemon/dbus-gmain.c
+++ /dev/null
@@ -1,717 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-/* dbus-gmain.c GLib main loop integration
- *
- * Copyright (C) 2002, 2003 CodeFactory AB
- * Copyright (C) 2005 Red Hat, Inc.
- *
- * Licensed under the Academic Free License version 2.1
- *
- * This program 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.
- *
- * This program 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <config.h>
-#include <string.h>
-#include "dbus-gmain.h"
-
-#include <libintl.h>
-#define _(x) dgettext (GETTEXT_PACKAGE, x)
-#define N_(x) x
-
-/**
- * @defgroup DBusGLib GLib bindings
- * @brief API for using D-BUS with GLib
- *
- * libdbus proper is a low-level API, these GLib bindings wrap libdbus
- * with a much higher-level approach. The higher level approach is
- * possible because GLib defines a main loop, an object/type system,
- * and an out-of-memory handling policy (it exits the program).
- * See http://www.gtk.org for GLib information.
- *
- * To manipulate remote objects, use #DBusGProxy.
- */
-
-/**
- * @defgroup DBusGLibInternals GLib bindings implementation details
- * @ingroup DBusInternals
- * @brief Implementation details of GLib bindings
- *
- * @{
- */
-
-/**
- * A GSource subclass for dispatching DBusConnection messages.
- * We need this on top of the IO handlers, because sometimes
- * there are messages to dispatch queued up but no IO pending.
- */
-typedef struct
-{
- GSource source; /**< the parent GSource */
- DBusConnection *connection; /**< the connection to dispatch */
-} DBusGMessageQueue;
-
-static gboolean message_queue_prepare (GSource *source,
- gint *timeout);
-static gboolean message_queue_check (GSource *source);
-static gboolean message_queue_dispatch (GSource *source,
- GSourceFunc callback,
- gpointer user_data);
-
-static const GSourceFuncs message_queue_funcs = {
- message_queue_prepare,
- message_queue_check,
- message_queue_dispatch,
- NULL
-};
-
-static gboolean
-message_queue_prepare (GSource *source,
- gint *timeout)
-{
- DBusConnection *connection = ((DBusGMessageQueue *)source)->connection;
-
- *timeout = -1;
-
- return (dbus_connection_get_dispatch_status (connection) == DBUS_DISPATCH_DATA_REMAINS);
-}
-
-static gboolean
-message_queue_check (GSource *source)
-{
- return FALSE;
-}
-
-static gboolean
-message_queue_dispatch (GSource *source,
- GSourceFunc callback,
- gpointer user_data)
-{
- DBusConnection *connection = ((DBusGMessageQueue *)source)->connection;
-
- dbus_connection_ref (connection);
-
- /* Only dispatch once - we don't want to starve other GSource */
- dbus_connection_dispatch (connection);
-
- dbus_connection_unref (connection);
-
- return TRUE;
-}
-
-typedef struct
-{
- GMainContext *context; /**< the main context */
- GSList *ios; /**< all IOHandler */
- GSList *timeouts; /**< all TimeoutHandler */
- DBusConnection *connection; /**< NULL if this is really for a server not a connection */
- GSource *message_queue_source; /**< DBusGMessageQueue */
-} ConnectionSetup;
-
-
-typedef struct
-{
- ConnectionSetup *cs;
- GSource *source;
- DBusWatch *watch;
-} IOHandler;
-
-typedef struct
-{
- ConnectionSetup *cs;
- GSource *source;
- DBusTimeout *timeout;
-} TimeoutHandler;
-
-static dbus_int32_t connection_slot = -1;
-static dbus_int32_t server_slot = -1;
-
-static ConnectionSetup*
-connection_setup_new (GMainContext *context,
- DBusConnection *connection)
-{
- ConnectionSetup *cs;
-
- cs = g_new0 (ConnectionSetup, 1);
-
- g_assert (context != NULL);
-
- cs->context = context;
- g_main_context_ref (cs->context);
-
- if (connection)
- {
- cs->connection = connection;
-
- cs->message_queue_source = g_source_new ((GSourceFuncs*)&message_queue_funcs,
- sizeof (DBusGMessageQueue));
- ((DBusGMessageQueue*)cs->message_queue_source)->connection = connection;
- g_source_attach (cs->message_queue_source, cs->context);
- }
-
- return cs;
-}
-
-static void
-io_handler_source_finalized (gpointer data)
-{
- IOHandler *handler;
-
- handler = data;
-
- if (handler->watch)
- dbus_watch_set_data (handler->watch, NULL, NULL);
-
- g_free (handler);
-}
-
-static void
-io_handler_destroy_source (void *data)
-{
- IOHandler *handler;
-
- handler = data;
-
- if (handler->source)
- {
- GSource *source = handler->source;
- handler->source = NULL;
- handler->cs->ios = g_slist_remove (handler->cs->ios, handler);
- g_source_destroy (source);
- g_source_unref (source);
- }
-}
-
-static void
-io_handler_watch_freed (void *data)
-{
- IOHandler *handler;
-
- handler = data;
-
- handler->watch = NULL;
-
- io_handler_destroy_source (handler);
-}
-
-static gboolean
-io_handler_dispatch (GIOChannel *source,
- GIOCondition condition,
- gpointer data)
-{
- IOHandler *handler;
- guint dbus_condition = 0;
- DBusConnection *connection;
-
- handler = data;
-
- connection = handler->cs->connection;
-
- if (connection)
- dbus_connection_ref (connection);
-
- if (condition & G_IO_IN)
- dbus_condition |= DBUS_WATCH_READABLE;
- if (condition & G_IO_OUT)
- dbus_condition |= DBUS_WATCH_WRITABLE;
- if (condition & G_IO_ERR)
- dbus_condition |= DBUS_WATCH_ERROR;
- if (condition & G_IO_HUP)
- dbus_condition |= DBUS_WATCH_HANGUP;
-
- /* Note that we don't touch the handler after this, because
- * dbus may have disabled the watch and thus killed the
- * handler.
- */
- dbus_watch_handle (handler->watch, dbus_condition);
- handler = NULL;
-
- if (connection)
- dbus_connection_unref (connection);
-
- return TRUE;
-}
-
-static void
-connection_setup_add_watch (ConnectionSetup *cs,
- DBusWatch *watch)
-{
- guint flags;
- GIOCondition condition;
- GIOChannel *channel;
- IOHandler *handler;
- int fd;
-
- if (!dbus_watch_get_enabled (watch))
- return;
-
- g_assert (dbus_watch_get_data (watch) == NULL);
-
- flags = dbus_watch_get_flags (watch);
-
- condition = G_IO_ERR | G_IO_HUP;
- if (flags & DBUS_WATCH_READABLE)
- condition |= G_IO_IN;
- if (flags & DBUS_WATCH_WRITABLE)
- condition |= G_IO_OUT;
-
- handler = g_new0 (IOHandler, 1);
- handler->cs = cs;
- handler->watch = watch;
-
-#if (DBUS_MAJOR_VERSION == 1 && DBUS_MINOR_VERSION == 1 && DBUS_MICRO_VERSION >= 1) || (DBUS_MAJOR_VERSION == 1 && DBUS_MINOR_VERSION > 1) || (DBUS_MAJOR_VERSION > 1)
- fd = dbus_watch_get_unix_fd (watch);
-#else
- fd = dbus_watch_get_fd (watch);
-#endif
- channel = g_io_channel_unix_new (fd);
-
- handler->source = g_io_create_watch (channel, condition);
- g_source_set_callback (handler->source, (GSourceFunc) io_handler_dispatch, handler,
- io_handler_source_finalized);
- g_source_attach (handler->source, cs->context);
-
- cs->ios = g_slist_prepend (cs->ios, handler);
-
- dbus_watch_set_data (watch, handler, io_handler_watch_freed);
- g_io_channel_unref (channel);
-}
-
-static void
-connection_setup_remove_watch (ConnectionSetup *cs,
- DBusWatch *watch)
-{
- IOHandler *handler;
-
- handler = dbus_watch_get_data (watch);
-
- if (handler == NULL)
- return;
-
- io_handler_destroy_source (handler);
-}
-
-static void
-timeout_handler_source_finalized (gpointer data)
-{
- TimeoutHandler *handler;
-
- handler = data;
-
- if (handler->timeout)
- dbus_timeout_set_data (handler->timeout, NULL, NULL);
-
- g_free (handler);
-}
-
-static void
-timeout_handler_destroy_source (void *data)
-{
- TimeoutHandler *handler;
-
- handler = data;
-
- if (handler->source)
- {
- GSource *source = handler->source;
- handler->source = NULL;
- handler->cs->timeouts = g_slist_remove (handler->cs->timeouts, handler);
- g_source_destroy (source);
- g_source_unref (source);
- }
-}
-
-static void
-timeout_handler_timeout_freed (void *data)
-{
- TimeoutHandler *handler;
-
- handler = data;
-
- handler->timeout = NULL;
-
- timeout_handler_destroy_source (handler);
-}
-
-static gboolean
-timeout_handler_dispatch (gpointer data)
-{
- TimeoutHandler *handler;
-
- handler = data;
-
- dbus_timeout_handle (handler->timeout);
-
- return TRUE;
-}
-
-static void
-connection_setup_add_timeout (ConnectionSetup *cs,
- DBusTimeout *timeout)
-{
- TimeoutHandler *handler;
-
- if (!dbus_timeout_get_enabled (timeout))
- return;
-
- g_assert (dbus_timeout_get_data (timeout) == NULL);
-
- handler = g_new0 (TimeoutHandler, 1);
- handler->cs = cs;
- handler->timeout = timeout;
-
- handler->source = g_timeout_source_new (dbus_timeout_get_interval (timeout));
- g_source_set_callback (handler->source, timeout_handler_dispatch, handler,
- timeout_handler_source_finalized);
- g_source_attach (handler->source, handler->cs->context);
-
- cs->timeouts = g_slist_prepend (cs->timeouts, handler);
-
- dbus_timeout_set_data (timeout, handler, timeout_handler_timeout_freed);
-}
-
-static void
-connection_setup_remove_timeout (ConnectionSetup *cs,
- DBusTimeout *timeout)
-{
- TimeoutHandler *handler;
-
- handler = dbus_timeout_get_data (timeout);
-
- if (handler == NULL)
- return;
-
- timeout_handler_destroy_source (handler);
-}
-
-static void
-connection_setup_free (ConnectionSetup *cs)
-{
- while (cs->ios)
- io_handler_destroy_source (cs->ios->data);
-
- while (cs->timeouts)
- timeout_handler_destroy_source (cs->timeouts->data);
-
- if (cs->message_queue_source)
- {
- GSource *source;
-
- source = cs->message_queue_source;
- cs->message_queue_source = NULL;
-
- g_source_destroy (source);
- g_source_unref (source);
- }
-
- g_main_context_unref (cs->context);
- g_free (cs);
-}
-
-static dbus_bool_t
-add_watch (DBusWatch *watch,
- gpointer data)
-{
- ConnectionSetup *cs;
-
- cs = data;
-
- connection_setup_add_watch (cs, watch);
-
- return TRUE;
-}
-
-static void
-remove_watch (DBusWatch *watch,
- gpointer data)
-{
- ConnectionSetup *cs;
-
- cs = data;
-
- connection_setup_remove_watch (cs, watch);
-}
-
-static void
-watch_toggled (DBusWatch *watch,
- void *data)
-{
- /* Because we just exit on OOM, enable/disable is
- * no different from add/remove
- */
- if (dbus_watch_get_enabled (watch))
- add_watch (watch, data);
- else
- remove_watch (watch, data);
-}
-
-static dbus_bool_t
-add_timeout (DBusTimeout *timeout,
- void *data)
-{
- ConnectionSetup *cs;
-
- cs = data;
-
- if (!dbus_timeout_get_enabled (timeout))
- return TRUE;
-
- connection_setup_add_timeout (cs, timeout);
-
- return TRUE;
-}
-
-static void
-remove_timeout (DBusTimeout *timeout,
- void *data)
-{
- ConnectionSetup *cs;
-
- cs = data;
-
- connection_setup_remove_timeout (cs, timeout);
-}
-
-static void
-timeout_toggled (DBusTimeout *timeout,
- void *data)
-{
- /* Because we just exit on OOM, enable/disable is
- * no different from add/remove
- */
- if (dbus_timeout_get_enabled (timeout))
- add_timeout (timeout, data);
- else
- remove_timeout (timeout, data);
-}
-
-static void
-wakeup_main (void *data)
-{
- ConnectionSetup *cs = data;
-
- g_main_context_wakeup (cs->context);
-}
-
-
-/* Move to a new context */
-static ConnectionSetup*
-connection_setup_new_from_old (GMainContext *context,
- ConnectionSetup *old)
-{
- GSList *tmp;
- ConnectionSetup *cs;
-
- g_assert (old->context != context);
-
- cs = connection_setup_new (context, old->connection);
-
- tmp = old->ios;
- while (tmp != NULL)
- {
- IOHandler *handler = tmp->data;
-
- connection_setup_add_watch (cs, handler->watch);
-
- tmp = tmp->next;
- }
-
- tmp = old->timeouts;
- while (tmp != NULL)
- {
- TimeoutHandler *handler = tmp->data;
-
- connection_setup_add_timeout (cs, handler->timeout);
-
- tmp = tmp->next;
- }
-
- return cs;
-}
-
-/** @} */ /* End of GLib bindings internals */
-
-/** @addtogroup DBusGLib
- * @{
- */
-
-/**
- * Sets the watch and timeout functions of a #DBusConnection
- * to integrate the connection with the GLib main loop.
- * Pass in #NULL for the #GMainContext unless you're
- * doing something specialized.
- *
- * If called twice for the same context, does nothing the second
- * time. If called once with context A and once with context B,
- * context B replaces context A as the context monitoring the
- * connection.
- *
- * @param connection the connection
- * @param context the #GMainContext or #NULL for default context
- */
-void
-dbus_connection_setup_with_g_main (DBusConnection *connection,
- GMainContext *context)
-{
- ConnectionSetup *old_setup;
- ConnectionSetup *cs;
-
- /* FIXME we never free the slot, so its refcount just keeps growing,
- * which is kind of broken.
- */
- dbus_connection_allocate_data_slot (&connection_slot);
- if (connection_slot < 0)
- goto nomem;
-
- if (context == NULL)
- context = g_main_context_default ();
-
- cs = NULL;
-
- old_setup = dbus_connection_get_data (connection, connection_slot);
- if (old_setup != NULL)
- {
- if (old_setup->context == context)
- return; /* nothing to do */
-
- cs = connection_setup_new_from_old (context, old_setup);
-
- /* Nuke the old setup */
- dbus_connection_set_data (connection, connection_slot, NULL, NULL);
- old_setup = NULL;
- }
-
- if (cs == NULL)
- cs = connection_setup_new (context, connection);
-
- if (!dbus_connection_set_data (connection, connection_slot, cs,
- (DBusFreeFunction)connection_setup_free))
- goto nomem;
-
- if (!dbus_connection_set_watch_functions (connection,
- add_watch,
- remove_watch,
- watch_toggled,
- cs, NULL))
- goto nomem;
-
- if (!dbus_connection_set_timeout_functions (connection,
- add_timeout,
- remove_timeout,
- timeout_toggled,
- cs, NULL))
- goto nomem;
-
- dbus_connection_set_wakeup_main_function (connection,
- wakeup_main,
- cs, NULL);
-
- return;
-
- nomem:
- g_error ("Not enough memory to set up DBusConnection for use with GLib");
-}
-
-/**
- * Sets the watch and timeout functions of a #DBusServer
- * to integrate the server with the GLib main loop.
- * In most cases the context argument should be #NULL.
- *
- * If called twice for the same context, does nothing the second
- * time. If called once with context A and once with context B,
- * context B replaces context A as the context monitoring the
- * connection.
- *
- * @param server the server
- * @param context the #GMainContext or #NULL for default
- */
-void
-dbus_server_setup_with_g_main (DBusServer *server,
- GMainContext *context)
-{
- ConnectionSetup *old_setup;
- ConnectionSetup *cs;
-
- /* FIXME we never free the slot, so its refcount just keeps growing,
- * which is kind of broken.
- */
- dbus_server_allocate_data_slot (&server_slot);
- if (server_slot < 0)
- goto nomem;
-
- if (context == NULL)
- context = g_main_context_default ();
-
- cs = NULL;
-
- old_setup = dbus_server_get_data (server, server_slot);
- if (old_setup != NULL)
- {
- if (old_setup->context == context)
- return; /* nothing to do */
-
- cs = connection_setup_new_from_old (context, old_setup);
-
- /* Nuke the old setup */
- dbus_server_set_data (server, server_slot, NULL, NULL);
- old_setup = NULL;
- }
-
- if (cs == NULL)
- cs = connection_setup_new (context, NULL);
-
- if (!dbus_server_set_data (server, server_slot, cs,
- (DBusFreeFunction)connection_setup_free))
- goto nomem;
-
- if (!dbus_server_set_watch_functions (server,
- add_watch,
- remove_watch,
- watch_toggled,
- cs, NULL))
- goto nomem;
-
- if (!dbus_server_set_timeout_functions (server,
- add_timeout,
- remove_timeout,
- timeout_toggled,
- cs, NULL))
- goto nomem;
-
- return;
-
- nomem:
- g_error ("Not enough memory to set up DBusServer for use with GLib");
-}
diff --git a/daemon/dbus-gmain.h b/daemon/dbus-gmain.h
deleted file mode 100644
index 8f0d0871..00000000
--- a/daemon/dbus-gmain.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-/* dbus-glib-lowlevel.h GLib integration details that require dbus/dbus.h
- *
- * Copyright (C) 2002, 2003 CodeFactory AB
- * Copyright (C) 2003, 2004 Red Hat, Inc.
- *
- * Licensed under the Academic Free License version 2.1
- *
- * This program 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.
- *
- * This program 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-#ifndef DBUS_GLIB_LOWLEVEL_H
-#define DBUS_GLIB_LOWLEVEL_H
-
-#include <glib.h>
-#include <dbus/dbus.h>
-
-G_BEGIN_DECLS
-
-void dbus_connection_setup_with_g_main (DBusConnection *connection,
- GMainContext *context);
-void dbus_server_setup_with_g_main (DBusServer *server,
- GMainContext *context);
-
-G_END_DECLS
-
-#endif /* DBUS_GLIB_LOWLEVEL_H */
-
-
-
diff --git a/daemon/dns-sd.mount.in b/daemon/dns-sd.mount.in
deleted file mode 100644
index 1224ae69..00000000
--- a/daemon/dns-sd.mount.in
+++ /dev/null
@@ -1,4 +0,0 @@
-[Mount]
-Type=dns-sd
-Exec=@libexecdir@/gvfsd-dnssd
-AutoMount=true
diff --git a/daemon/ftp.mount.in b/daemon/ftp.mount.in
deleted file mode 100644
index e1133392..00000000
--- a/daemon/ftp.mount.in
+++ /dev/null
@@ -1,7 +0,0 @@
-[Mount]
-Type=ftp
-Exec=@libexecdir@/gvfsd-ftp
-AutoMount=false
-Scheme=ftp
-DefaultPort=21
-HostnameIsInetAddress=true
diff --git a/daemon/gphoto2.mount.in b/daemon/gphoto2.mount.in
deleted file mode 100644
index 2602afa3..00000000
--- a/daemon/gphoto2.mount.in
+++ /dev/null
@@ -1,4 +0,0 @@
-[Mount]
-Type=gphoto2
-Exec=@libexecdir@/gvfsd-gphoto2
-AutoMount=false
diff --git a/daemon/gvfs-daemon.service.in b/daemon/gvfs-daemon.service.in
deleted file mode 100644
index 00fe5315..00000000
--- a/daemon/gvfs-daemon.service.in
+++ /dev/null
@@ -1,3 +0,0 @@
-[D-BUS Service]
-Name=org.gtk.vfs.Daemon
-Exec=@libexecdir@/gvfsd
diff --git a/daemon/gvfsbackend.c b/daemon/gvfsbackend.c
deleted file mode 100644
index 4e6e9a53..00000000
--- a/daemon/gvfsbackend.c
+++ /dev/null
@@ -1,654 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsbackend.h"
-#include "gvfsjobsource.h"
-#include "gvfsdaemonprotocol.h"
-#include <gvfsjobopenforread.h>
-#include <gvfsjobopenforwrite.h>
-#include <gvfsjobqueryinfo.h>
-#include <gvfsjobqueryfsinfo.h>
-#include <gvfsjobsetdisplayname.h>
-#include <gvfsjobenumerate.h>
-#include <gvfsjobdelete.h>
-#include <gvfsjobtrash.h>
-#include <gvfsjobunmount.h>
-#include <gvfsjobmountmountable.h>
-#include <gvfsjobunmountmountable.h>
-#include <gvfsjobmakedirectory.h>
-#include <gvfsjobmakesymlink.h>
-#include <gvfsjobcreatemonitor.h>
-#include <gvfsjobcopy.h>
-#include <gvfsjobmove.h>
-#include <gvfsjobpush.h>
-#include <gvfsjobpull.h>
-#include <gvfsjobsetattribute.h>
-#include <gvfsjobqueryattributes.h>
-#include <gdbusutils.h>
-
-enum {
- PROP_0,
- PROP_OBJECT_PATH,
- PROP_DAEMON
-};
-
-struct _GVfsBackendPrivate
-{
- GVfsDaemon *daemon;
- char *object_path;
-
- char *display_name;
- char *stable_name;
- char **x_content_types;
- char *icon;
- char *prefered_filename_encoding;
- gboolean user_visible;
- GMountSpec *mount_spec;
-};
-
-
-/* TODO: Real P_() */
-#define P_(_x) (_x)
-
-static void g_vfs_backend_job_source_iface_init (GVfsJobSourceIface *iface);
-static void g_vfs_backend_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-static void g_vfs_backend_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static GObject* g_vfs_backend_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params);
-static DBusHandlerResult backend_dbus_handler (DBusConnection *connection,
- DBusMessage *message,
- void *user_data);
-
-
-G_DEFINE_TYPE_WITH_CODE (GVfsBackend, g_vfs_backend, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (G_VFS_TYPE_JOB_SOURCE,
- g_vfs_backend_job_source_iface_init))
-
-
-static GHashTable *registered_backends = NULL;
-
-void
-g_vfs_register_backend (GType backend_type,
- const char *type)
-{
- if (registered_backends == NULL)
- registered_backends = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, NULL);
-
- g_hash_table_insert (registered_backends,
- g_strdup (type), (void *)backend_type);
-}
-
-GType
-g_vfs_lookup_backend (const char *type)
-{
- gpointer res;
-
- if (registered_backends != NULL)
- {
- res = g_hash_table_lookup (registered_backends, type);
- if (res != NULL)
- return (GType)res;
- }
-
- return G_TYPE_INVALID;
-}
-
-static void
-g_vfs_backend_finalize (GObject *object)
-{
- GVfsBackend *backend;
-
- backend = G_VFS_BACKEND (object);
-
- g_vfs_daemon_unregister_path (backend->priv->daemon, backend->priv->object_path);
- g_object_unref (backend->priv->daemon);
- g_free (backend->priv->object_path);
-
- g_free (backend->priv->display_name);
- g_free (backend->priv->stable_name);
- g_strfreev (backend->priv->x_content_types);
- g_free (backend->priv->icon);
- g_free (backend->priv->prefered_filename_encoding);
- if (backend->priv->mount_spec)
- g_mount_spec_unref (backend->priv->mount_spec);
-
- if (G_OBJECT_CLASS (g_vfs_backend_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_job_source_iface_init (GVfsJobSourceIface *iface)
-{
-}
-
-static void
-g_vfs_backend_class_init (GVfsBackendClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (GVfsBackendPrivate));
-
- gobject_class->constructor = g_vfs_backend_constructor;
- gobject_class->finalize = g_vfs_backend_finalize;
- gobject_class->set_property = g_vfs_backend_set_property;
- gobject_class->get_property = g_vfs_backend_get_property;
-
- g_object_class_install_property (gobject_class,
- PROP_OBJECT_PATH,
- g_param_spec_string ("object-path",
- P_("Backend object path"),
- P_("The dbus object path for the backend object."),
- "",
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
- g_object_class_install_property (gobject_class,
- PROP_DAEMON,
- g_param_spec_object ("daemon",
- P_("Daemon"),
- P_("The daemon this backend is handled by."),
- G_VFS_TYPE_DAEMON,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
-}
-
-static void
-g_vfs_backend_init (GVfsBackend *backend)
-{
- backend->priv = G_TYPE_INSTANCE_GET_PRIVATE (backend, G_VFS_TYPE_BACKEND, GVfsBackendPrivate);
- backend->priv->icon = g_strdup ("");
- backend->priv->prefered_filename_encoding = g_strdup ("");
- backend->priv->display_name = g_strdup ("");
- backend->priv->stable_name = g_strdup ("");
- backend->priv->user_visible = TRUE;
-}
-
-static void
-g_vfs_backend_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GVfsBackend *backend = G_VFS_BACKEND (object);
-
- switch (prop_id)
- {
- case PROP_OBJECT_PATH:
- backend->priv->object_path = g_value_dup_string (value);
- break;
- case PROP_DAEMON:
- backend->priv->daemon = G_VFS_DAEMON (g_value_dup_object (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-g_vfs_backend_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GVfsBackend *backend = G_VFS_BACKEND (object);
-
- switch (prop_id)
- {
- case PROP_OBJECT_PATH:
- g_value_set_string (value, backend->priv->object_path);
- break;
- case PROP_DAEMON:
- g_value_set_object (value, backend->priv->daemon);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GObject*
-g_vfs_backend_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- GVfsBackend *backend;
-
- object = (* G_OBJECT_CLASS (g_vfs_backend_parent_class)->constructor) (type,
- n_construct_properties,
- construct_params);
- backend = G_VFS_BACKEND (object);
-
- g_vfs_daemon_register_path (backend->priv->daemon,
- backend->priv->object_path,
- backend_dbus_handler,
- backend);
-
- return object;
-}
-
-GVfsDaemon *
-g_vfs_backend_get_daemon (GVfsBackend *backend)
-{
- return backend->priv->daemon;
-}
-
-
-void
-g_vfs_backend_set_display_name (GVfsBackend *backend,
- const char *display_name)
-{
- g_free (backend->priv->display_name);
- backend->priv->display_name = g_strdup (display_name);
-}
-
-/**
- * g_vfs_backend_set_stable_name:
- * @backend: backend
- * @stable_name: the stable name
- *
- * For filesystems that can change the name during the lifetime
- * of the filesystem this can be uses to set a separate stable
- * name. This is used for instance as the directory representing
- * the mounted file system in the standard UNIX file system
- * namespace.
- *
- * If this function isn't called, the value passed to
- * g_vfs_backend_set_display_name() will be used instead.
- **/
-void
-g_vfs_backend_set_stable_name (GVfsBackend *backend,
- const char *stable_name)
-{
- g_free (backend->priv->stable_name);
- backend->priv->stable_name = g_strdup (stable_name);
-}
-
-/**
- * g_vfs_backend_set_x_content_types:
- * @backend: backend
- * @x_content_types: the x-content types
- *
- * For backends where the x-content type is known ahead of time and
- * won't change (such as a CDDA audio disc backend), this function
- * should be called when the backend is constructed with the given
- * types.
- *
- * See the <ulink url="http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec">shared-mime-info</ulink>
- * specification for more on x-content types.
- **/
-void
-g_vfs_backend_set_x_content_types (GVfsBackend *backend,
- char **x_content_types)
-{
- g_strfreev (backend->priv->x_content_types);
- backend->priv->x_content_types = g_strdupv (x_content_types);
-}
-
-void
-g_vfs_backend_set_icon_name (GVfsBackend *backend,
- const char *icon)
-{
- g_free (backend->priv->icon);
- backend->priv->icon = g_strdup (icon);
-}
-
-void
-g_vfs_backend_set_prefered_filename_encoding (GVfsBackend *backend,
- const char *prefered_filename_encoding)
-{
- g_free (backend->priv->prefered_filename_encoding);
- backend->priv->prefered_filename_encoding = g_strdup (prefered_filename_encoding);
-}
-
-void
-g_vfs_backend_set_user_visible (GVfsBackend *backend,
- gboolean user_visible)
-{
- backend->priv->user_visible = user_visible;
-}
-
-void
-g_vfs_backend_set_mount_spec (GVfsBackend *backend,
- GMountSpec *mount_spec)
-{
- if (backend->priv->mount_spec)
- g_mount_spec_unref (backend->priv->mount_spec);
- backend->priv->mount_spec = g_mount_spec_ref (mount_spec);
-}
-
-const char *
-g_vfs_backend_get_backend_type (GVfsBackend *backend)
-{
- if (backend->priv->mount_spec)
- return g_mount_spec_get_type (backend->priv->mount_spec);
- return NULL;
-}
-
-const char *
-g_vfs_backend_get_display_name (GVfsBackend *backend)
-{
- return backend->priv->display_name;
-}
-
-const char *
-g_vfs_backend_get_stable_name (GVfsBackend *backend)
-{
- return backend->priv->stable_name;
-}
-
-char **
-g_vfs_backend_get_x_content_types (GVfsBackend *backend)
-{
- return backend->priv->x_content_types;
-}
-
-const char *
-g_vfs_backend_get_icon_name (GVfsBackend *backend)
-{
- return backend->priv->icon;
-}
-
-GMountSpec *
-g_vfs_backend_get_mount_spec (GVfsBackend *backend)
-{
- return backend->priv->mount_spec;
-}
-
-static void
-get_thumbnail_attributes (const char *uri,
- GFileInfo *info)
-{
- GChecksum *checksum;
- char *filename;
- char *basename;
-
- checksum = g_checksum_new (G_CHECKSUM_MD5);
- g_checksum_update (checksum, (const guchar *) uri, strlen (uri));
-
- basename = g_strconcat (g_checksum_get_string (checksum), ".png", NULL);
- g_checksum_free (checksum);
-
- filename = g_build_filename (g_get_home_dir (),
- ".thumbnails", "normal", basename,
- NULL);
-
- if (g_file_test (filename, G_FILE_TEST_IS_REGULAR))
- g_file_info_set_attribute_byte_string (info, G_FILE_ATTRIBUTE_THUMBNAIL_PATH, filename);
- else
- {
- g_free (filename);
- filename = g_build_filename (g_get_home_dir (),
- ".thumbnails", "fail",
- "gnome-thumbnail-factory",
- basename,
- NULL);
-
- if (g_file_test (filename, G_FILE_TEST_IS_REGULAR))
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_THUMBNAILING_FAILED, TRUE);
- }
- g_free (basename);
- g_free (filename);
-}
-
-void
-g_vfs_backend_add_auto_info (GVfsBackend *backend,
- GFileAttributeMatcher *matcher,
- GFileInfo *info,
- const char *uri)
-{
- GMountSpec *spec;
- char *id;
-
- if (g_file_attribute_matcher_matches (matcher,
- G_FILE_ATTRIBUTE_ID_FILESYSTEM))
- {
- spec = g_vfs_backend_get_mount_spec (backend);
- if (spec)
- {
- id = g_mount_spec_to_string (spec);
- g_file_info_set_attribute_string (info,
- G_FILE_ATTRIBUTE_ID_FILESYSTEM,
- id);
- g_free (id);
- }
- }
-
- if (uri != NULL &&
- g_file_attribute_matcher_matches (matcher,
- G_FILE_ATTRIBUTE_THUMBNAIL_PATH))
- get_thumbnail_attributes (uri, info);
-
-}
-
-static DBusHandlerResult
-backend_dbus_handler (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
-{
- GVfsBackend *backend = user_data;
- GVfsJob *job;
-
- job = NULL;
-
- g_print ("backend_dbus_handler %s:%s\n",
- dbus_message_get_interface (message),
- dbus_message_get_member (message));
-
- if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_UNMOUNT))
- job = g_vfs_job_unmount_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_OPEN_FOR_READ))
- job = g_vfs_job_open_for_read_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_QUERY_INFO))
- job = g_vfs_job_query_info_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_QUERY_FILESYSTEM_INFO))
- job = g_vfs_job_query_fs_info_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_ENUMERATE))
- job = g_vfs_job_enumerate_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_OPEN_FOR_WRITE))
- job = g_vfs_job_open_for_write_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_MOUNT_MOUNTABLE))
- job = g_vfs_job_mount_mountable_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_UNMOUNT_MOUNTABLE))
- job = g_vfs_job_unmount_mountable_new (connection, message, backend, FALSE);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_EJECT_MOUNTABLE))
- job = g_vfs_job_unmount_mountable_new (connection, message, backend, TRUE);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_SET_DISPLAY_NAME))
- job = g_vfs_job_set_display_name_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_DELETE))
- job = g_vfs_job_delete_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_TRASH))
- job = g_vfs_job_trash_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_MAKE_DIRECTORY))
- job = g_vfs_job_make_directory_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_MAKE_SYMBOLIC_LINK))
- job = g_vfs_job_make_symlink_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_COPY))
- job = g_vfs_job_copy_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_PUSH))
- job = g_vfs_job_push_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_PULL))
- job = g_vfs_job_pull_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_MOVE))
- job = g_vfs_job_move_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_SET_ATTRIBUTE))
- job = g_vfs_job_set_attribute_new (connection, message, backend);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_QUERY_SETTABLE_ATTRIBUTES))
- job = g_vfs_job_query_attributes_new (connection, message, backend, FALSE);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_QUERY_WRITABLE_NAMESPACES))
- job = g_vfs_job_query_attributes_new (connection, message, backend, TRUE);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_CREATE_DIR_MONITOR))
- job = g_vfs_job_create_monitor_new (connection, message, backend, TRUE);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_CREATE_FILE_MONITOR))
- job = g_vfs_job_create_monitor_new (connection, message, backend, FALSE);
-
- if (job)
- {
- g_vfs_job_source_new_job (G_VFS_JOB_SOURCE (backend), job);
- g_object_unref (job);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-void
-g_vfs_backend_register_mount (GVfsBackend *backend,
- GAsyncDBusCallback callback,
- gpointer user_data)
-{
- const char *stable_name;
- DBusMessage *message;
- DBusMessageIter iter;
- dbus_bool_t user_visible;
- char *x_content_types_string;
-
- if (backend->priv->x_content_types != NULL && g_strv_length (backend->priv->x_content_types) > 0)
- x_content_types_string = g_strjoinv (" ", backend->priv->x_content_types);
- else
- x_content_types_string = g_strdup ("");
-
- message = dbus_message_new_method_call (G_VFS_DBUS_DAEMON_NAME,
- G_VFS_DBUS_MOUNTTRACKER_PATH,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_REGISTER_MOUNT);
- if (message == NULL)
- _g_dbus_oom ();
-
- if (backend->priv->stable_name != NULL &&
- *backend->priv->stable_name != 0)
- stable_name = backend->priv->stable_name;
- else
- stable_name = backend->priv->display_name;
-
- user_visible = backend->priv->user_visible;
- if (!dbus_message_append_args (message,
- DBUS_TYPE_OBJECT_PATH, &backend->priv->object_path,
- DBUS_TYPE_STRING, &backend->priv->display_name,
- DBUS_TYPE_STRING, &stable_name,
- DBUS_TYPE_STRING, &x_content_types_string,
- DBUS_TYPE_STRING, &backend->priv->icon,
- DBUS_TYPE_STRING, &backend->priv->prefered_filename_encoding,
- DBUS_TYPE_BOOLEAN, &user_visible,
- 0))
- _g_dbus_oom ();
-
- dbus_message_iter_init_append (message, &iter);
- g_mount_spec_to_dbus (&iter, backend->priv->mount_spec);
-
- dbus_message_set_auto_start (message, TRUE);
-
- _g_dbus_connection_call_async (NULL, message, -1,
- callback, user_data);
- dbus_message_unref (message);
-
- g_free (x_content_types_string);
-}
-
-void
-g_vfs_backend_unregister_mount (GVfsBackend *backend,
- GAsyncDBusCallback callback,
- gpointer user_data)
-{
- DBusMessage *message;
-
- message = dbus_message_new_method_call (G_VFS_DBUS_DAEMON_NAME,
- G_VFS_DBUS_MOUNTTRACKER_PATH,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_UNREGISTER_MOUNT);
- if (message == NULL)
- _g_dbus_oom ();
-
- if (!dbus_message_append_args (message,
- DBUS_TYPE_OBJECT_PATH, &backend->priv->object_path,
- 0))
- _g_dbus_oom ();
-
- _g_dbus_connection_call_async (NULL, message, -1,
- callback, user_data);
- dbus_message_unref (message);
-}
diff --git a/daemon/gvfsbackend.h b/daemon/gvfsbackend.h
deleted file mode 100644
index e47f3680..00000000
--- a/daemon/gvfsbackend.h
+++ /dev/null
@@ -1,432 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_H__
-#define __G_VFS_BACKEND_H__
-
-#include <dbus/dbus.h>
-#include <gio/gio.h>
-#include <gvfsdaemon.h>
-#include <gvfsjob.h>
-#include <gmountspec.h>
-#include <gdbusutils.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND (g_vfs_backend_get_type ())
-#define G_VFS_BACKEND(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND, GVfsBackend))
-#define G_VFS_BACKEND_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND, GVfsBackendClass))
-#define G_VFS_IS_BACKEND(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND))
-#define G_VFS_IS_BACKEND_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND))
-#define G_VFS_BACKEND_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND, GVfsBackendClass))
-
-typedef struct _GVfsBackend GVfsBackend;
-typedef struct _GVfsBackendPrivate GVfsBackendPrivate;
-typedef struct _GVfsBackendClass GVfsBackendClass;
-
-typedef struct _GVfsJobMount GVfsJobMount;
-typedef struct _GVfsJobUnmount GVfsJobUnmount;
-typedef struct _GVfsJobMountMountable GVfsJobMountMountable;
-typedef struct _GVfsJobUnmountMountable GVfsJobUnmountMountable;
-typedef struct _GVfsJobOpenForRead GVfsJobOpenForRead;
-typedef struct _GVfsJobSeekRead GVfsJobSeekRead;
-typedef struct _GVfsJobCloseRead GVfsJobCloseRead;
-typedef struct _GVfsJobRead GVfsJobRead;
-typedef struct _GVfsJobOpenForWrite GVfsJobOpenForWrite;
-typedef struct _GVfsJobWrite GVfsJobWrite;
-typedef struct _GVfsJobSeekWrite GVfsJobSeekWrite;
-typedef struct _GVfsJobCloseWrite GVfsJobCloseWrite;
-typedef struct _GVfsJobQueryInfo GVfsJobQueryInfo;
-typedef struct _GVfsJobQueryFsInfo GVfsJobQueryFsInfo;
-typedef struct _GVfsJobEnumerate GVfsJobEnumerate;
-typedef struct _GVfsJobSetDisplayName GVfsJobSetDisplayName;
-typedef struct _GVfsJobTrash GVfsJobTrash;
-typedef struct _GVfsJobDelete GVfsJobDelete;
-typedef struct _GVfsJobMakeDirectory GVfsJobMakeDirectory;
-typedef struct _GVfsJobMakeSymlink GVfsJobMakeSymlink;
-typedef struct _GVfsJobCopy GVfsJobCopy;
-typedef struct _GVfsJobMove GVfsJobMove;
-typedef struct _GVfsJobPush GVfsJobPush;
-typedef struct _GVfsJobPull GVfsJobPull;
-typedef struct _GVfsJobSetAttribute GVfsJobSetAttribute;
-typedef struct _GVfsJobQueryAttributes GVfsJobQueryAttributes;
-typedef struct _GVfsJobCreateMonitor GVfsJobCreateMonitor;
-
-typedef gpointer GVfsBackendHandle;
-
-struct _GVfsBackend
-{
- GObject parent_instance;
-
- GVfsBackendPrivate *priv;
-};
-
-struct _GVfsBackendClass
-{
- GObjectClass parent_class;
-
- /* vtable */
-
- /* These try_ calls should be fast and non-blocking, scheduling the i/o
- * operations async (or on a thread) or reading from cache.
- * Returning FALSE means "Can't do this now or async", which
- * means the non-try_ version will be scheduled in a worker
- * thread.
- * A NULL here means operation not supported
- */
-
- void (*unmount) (GVfsBackend *backend,
- GVfsJobUnmount *job);
- gboolean (*try_unmount) (GVfsBackend *backend,
- GVfsJobUnmount *job);
- void (*mount) (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount);
- gboolean (*try_mount) (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount);
- void (*mount_mountable) (GVfsBackend *backend,
- GVfsJobMountMountable *job,
- const char *filename,
- GMountSource *mount_source);
- gboolean (*try_mount_mountable)(GVfsBackend *backend,
- GVfsJobMountMountable *job,
- const char *filename,
- GMountSource *mount_source);
- void (*unmount_mountable) (GVfsBackend *backend,
- GVfsJobUnmountMountable *job,
- const char *filename,
- GMountUnmountFlags flags);
- gboolean (*try_unmount_mountable)(GVfsBackend *backend,
- GVfsJobUnmountMountable *job,
- const char *filename,
- GMountUnmountFlags flags);
- void (*eject_mountable) (GVfsBackend *backend,
- GVfsJobUnmountMountable *job,
- const char *filename,
- GMountUnmountFlags flags);
- gboolean (*try_eject_mountable)(GVfsBackend *backend,
- GVfsJobUnmountMountable *job,
- const char *filename,
- GMountUnmountFlags flags);
- void (*open_for_read) (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename);
- gboolean (*try_open_for_read) (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename);
- void (*close_read) (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle handle);
- gboolean (*try_close_read) (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle handle);
- void (*read) (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize bytes_requested);
- gboolean (*try_read) (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize bytes_requested);
- void (*seek_on_read) (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle handle,
- goffset offset,
- GSeekType type);
- gboolean (*try_seek_on_read) (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle handle,
- goffset offset,
- GSeekType type);
- gboolean (*try_create) (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags);
- void (*create) (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags);
- gboolean (*try_append_to) (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags);
- void (*append_to) (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags);
- gboolean (*try_replace) (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- const char *etag,
- gboolean make_backup,
- GFileCreateFlags flags);
- void (*replace) (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- const char *etag,
- gboolean make_backup,
- GFileCreateFlags flags);
- void (*close_write) (GVfsBackend *backend,
- GVfsJobCloseWrite *job,
- GVfsBackendHandle handle);
- gboolean (*try_close_write) (GVfsBackend *backend,
- GVfsJobCloseWrite *job,
- GVfsBackendHandle handle);
- void (*write) (GVfsBackend *backend,
- GVfsJobWrite *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize buffer_size);
- gboolean (*try_write) (GVfsBackend *backend,
- GVfsJobWrite *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize buffer_size);
- void (*seek_on_write) (GVfsBackend *backend,
- GVfsJobSeekWrite *job,
- GVfsBackendHandle handle,
- goffset offset,
- GSeekType type);
- gboolean (*try_seek_on_write) (GVfsBackend *backend,
- GVfsJobSeekWrite *job,
- GVfsBackendHandle handle,
- goffset offset,
- GSeekType type);
- void (*query_info) (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher);
- gboolean (*try_query_info) (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher);
- void (*query_fs_info) (GVfsBackend *backend,
- GVfsJobQueryFsInfo *job,
- const char *filename,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher);
- gboolean (*try_query_fs_info) (GVfsBackend *backend,
- GVfsJobQueryFsInfo *job,
- const char *filename,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher);
- void (*enumerate) (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *attribute_matcher,
- GFileQueryInfoFlags flags);
- gboolean (*try_enumerate) (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *attribute_matcher,
- GFileQueryInfoFlags flags);
- void (*set_display_name) (GVfsBackend *backend,
- GVfsJobSetDisplayName *job,
- const char *filename,
- const char *display_name);
- gboolean (*try_set_display_name) (GVfsBackend *backend,
- GVfsJobSetDisplayName *job,
- const char *filename,
- const char *display_name);
- void (*delete) (GVfsBackend *backend,
- GVfsJobDelete *job,
- const char *filename);
- gboolean (*try_delete) (GVfsBackend *backend,
- GVfsJobDelete *job,
- const char *filename);
- void (*trash) (GVfsBackend *backend,
- GVfsJobTrash *job,
- const char *filename);
- gboolean (*try_trash) (GVfsBackend *backend,
- GVfsJobTrash *job,
- const char *filename);
- void (*make_directory) (GVfsBackend *backend,
- GVfsJobMakeDirectory *job,
- const char *filename);
- gboolean (*try_make_directory)(GVfsBackend *backend,
- GVfsJobMakeDirectory *job,
- const char *filename);
- void (*make_symlink) (GVfsBackend *backend,
- GVfsJobMakeSymlink *make_symlink,
- const char *filename,
- const char *symlink_value);
- gboolean (*try_make_symlink) (GVfsBackend *backend,
- GVfsJobMakeSymlink *make_symlink,
- const char *filename,
- const char *symlink_value);
- void (*copy) (GVfsBackend *backend,
- GVfsJobCopy *job,
- const char *source,
- const char *destination,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data);
- gboolean (*try_copy) (GVfsBackend *backend,
- GVfsJobCopy *job,
- const char *source,
- const char *destination,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data);
- void (*move) (GVfsBackend *backend,
- GVfsJobMove *job,
- const char *source,
- const char *destination,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data);
- gboolean (*try_move) (GVfsBackend *backend,
- GVfsJobMove *job,
- const char *source,
- const char *destination,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data);
- void (*push) (GVfsBackend *backend,
- GVfsJobPush *job,
- const char *destination,
- const char *local_path,
- GFileCopyFlags flags,
- gboolean remove_source,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data);
- gboolean (*try_push) (GVfsBackend *backend,
- GVfsJobPush *job,
- const char *destination,
- const char *local_path,
- GFileCopyFlags flags,
- gboolean remove_source,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data);
- void (*pull) (GVfsBackend *backend,
- GVfsJobPull *job,
- const char *source,
- const char *local_path,
- GFileCopyFlags flags,
- gboolean remove_source,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data);
- gboolean (*try_pull) (GVfsBackend *backend,
- GVfsJobPull *job,
- const char *source,
- const char *local_path,
- GFileCopyFlags flags,
- gboolean remove_source,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data);
- void (*set_attribute) (GVfsBackend *backend,
- GVfsJobSetAttribute *set_attribute,
- const char *filename,
- const char *attribute,
- GFileAttributeType type,
- gpointer value_p,
- GFileQueryInfoFlags flags);
- gboolean (*try_set_attribute) (GVfsBackend *backend,
- GVfsJobSetAttribute *set_attribute,
- const char *filename,
- const char *attribute,
- GFileAttributeType type,
- gpointer value_p,
- GFileQueryInfoFlags flags);
- void (*create_dir_monitor)(GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags);
- gboolean (*try_create_dir_monitor) (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags);
- void (*create_file_monitor)(GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags);
- gboolean (*try_create_file_monitor) (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags);
- void (*query_settable_attributes) (GVfsBackend *backend,
- GVfsJobQueryAttributes *job,
- const char *filename);
- gboolean (*try_query_settable_attributes) (GVfsBackend *backend,
- GVfsJobQueryAttributes *job,
- const char *filename);
- void (*query_writable_namespaces) (GVfsBackend *backend,
- GVfsJobQueryAttributes *job,
- const char *filename);
- gboolean (*try_query_writable_namespaces) (GVfsBackend *backend,
- GVfsJobQueryAttributes *job,
- const char *filename);
-};
-
-GType g_vfs_backend_get_type (void) G_GNUC_CONST;
-
-void g_vfs_register_backend (GType backend_type,
- const char *type);
-GType g_vfs_lookup_backend (const char *type);
-
-void g_vfs_backend_set_display_name (GVfsBackend *backend,
- const char *display_name);
-void g_vfs_backend_set_stable_name (GVfsBackend *backend,
- const char *stable_name);
-void g_vfs_backend_set_x_content_types (GVfsBackend *backend,
- char **x_content_types);
-void g_vfs_backend_set_icon_name (GVfsBackend *backend,
- const char *icon);
-void g_vfs_backend_set_prefered_filename_encoding (GVfsBackend *backend,
- const char *prefered_filename_encoding);
-void g_vfs_backend_set_user_visible (GVfsBackend *backend,
- gboolean user_visible);
-void g_vfs_backend_set_mount_spec (GVfsBackend *backend,
- GMountSpec *mount_spec);
-void g_vfs_backend_register_mount (GVfsBackend *backend,
- GAsyncDBusCallback callback,
- gpointer user_data);
-void g_vfs_backend_unregister_mount (GVfsBackend *backend,
- GAsyncDBusCallback callback,
- gpointer user_data);
-const char *g_vfs_backend_get_backend_type (GVfsBackend *backend);
-const char *g_vfs_backend_get_display_name (GVfsBackend *backend);
-const char *g_vfs_backend_get_stable_name (GVfsBackend *backend);
-char **g_vfs_backend_get_x_content_types (GVfsBackend *backend);
-const char *g_vfs_backend_get_icon_name (GVfsBackend *backend);
-GMountSpec *g_vfs_backend_get_mount_spec (GVfsBackend *backend);
-GVfsDaemon *g_vfs_backend_get_daemon (GVfsBackend *backend);
-
-void g_vfs_backend_add_auto_info (GVfsBackend *backend,
- GFileAttributeMatcher *matcher,
- GFileInfo *info,
- const char *uri);
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_H__ */
diff --git a/daemon/gvfsbackendarchive.c b/daemon/gvfsbackendarchive.c
deleted file mode 100644
index a721bec2..00000000
--- a/daemon/gvfsbackendarchive.c
+++ /dev/null
@@ -1,771 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Benjamin Otte <otte@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Benjmain Otte <otte@gnome.org>
- */
-
-
-#include <config.h>
-
-#include <glib/gi18n.h>
-#include <string.h>
-#include <archive.h>
-#include <archive_entry.h>
-
-#include "gvfsbackendarchive.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobqueryfsinfo.h"
-#include "gvfsjobqueryattributes.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsdaemonprotocol.h"
-#include "gvfsdaemonutils.h"
-#include "gvfskeyring.h"
-
-#define MOUNT_ICON_NAME "drive-removable-media"
-
-/* #define PRINT_DEBUG */
-
-#ifdef PRINT_DEBUG
-#define DEBUG g_print
-#else
-#define DEBUG(...)
-#endif
-
-/*** TYPE DEFINITIONS ***/
-
-typedef struct _ArchiveFile ArchiveFile;
-struct _ArchiveFile {
- char * name; /* name of the file inside the archive */
- GFileInfo * info; /* file info created from archive_entry */
- GSList * children; /* (unordered) list of child files */
-};
-
-struct _GVfsBackendArchive
-{
- GVfsBackend backend;
-
- GFile * file;
- ArchiveFile * files; /* the tree of files */
-};
-
-G_DEFINE_TYPE (GVfsBackendArchive, g_vfs_backend_archive, G_VFS_TYPE_BACKEND)
-
-/*** AN ARCHIVE WE CAN OPERATE ON ***/
-
-typedef struct {
- struct archive * archive;
- GFile * file;
- GFileInputStream *stream;
- GVfsJob * job;
- GError * error;
- guchar data[4096];
-} GVfsArchive;
-
-#define gvfs_archive_return(d) ((d)->error ? ARCHIVE_FATAL : ARCHIVE_OK)
-
-static int
-gvfs_archive_open (struct archive *archive,
- void *data)
-{
- GVfsArchive *d = data;
-
- DEBUG ("OPEN\n");
- g_assert (d->stream == NULL);
- d->stream = g_file_read (d->file,
- d->job->cancellable,
- &d->error);
- return gvfs_archive_return (d);
-}
-
-static ssize_t
-gvfs_archive_read (struct archive *archive,
- void *data,
- const void **buffer)
-{
- GVfsArchive *d = data;
- gssize read_bytes;
-
- *buffer = d->data;
- read_bytes = g_input_stream_read (G_INPUT_STREAM (d->stream),
- d->data,
- sizeof (d->data),
- d->job->cancellable,
- &d->error);
-
- DEBUG ("READ %d\n", (int) read_bytes);
- return read_bytes;
-}
-
-static off_t
-gvfs_archive_skip (struct archive *archive,
- void *data,
- off_t request)
-{
- GVfsArchive *d = data;
-
- if (g_seekable_can_seek (G_SEEKABLE (d->stream)))
- g_seekable_seek (G_SEEKABLE (d->stream),
- request,
- G_SEEK_CUR,
- d->job->cancellable,
- &d->error);
- else
- return 0;
-
- if (d->error)
- {
- g_clear_error (&d->error);
- request = 0;
- }
- DEBUG ("SEEK %d (%d)\n", (int) request,
- (int) g_seekable_tell (G_SEEKABLE (d->stream)));
-
- return request;
-}
-
-static int
-gvfs_archive_close (struct archive *archive,
- void *data)
-{
- GVfsArchive *d = data;
-
- DEBUG ("CLOSE\n");
- g_object_unref (d->stream);
- d->stream = NULL;
- return ARCHIVE_OK;
-}
-
-#define gvfs_archive_in_error(archive) ((archive)->error != NULL)
-
-static void
-gvfs_archive_push_job (GVfsArchive *archive, GVfsJob *job)
-{
- archive->job = job;
-}
-
-static void
-gvfs_archive_pop_job (GVfsArchive *archive)
-{
- if (archive->job == NULL)
- return;
-
- DEBUG ("popping job %s\n", G_OBJECT_TYPE_NAME (archive->job));
- if (archive->error)
- {
- g_vfs_job_failed_from_error (archive->job, archive->error);
- g_clear_error (&archive->error);
- }
- else if (archive_errno (archive->archive))
- {
- g_vfs_job_failed_literal (archive->job,
- G_IO_ERROR,
- archive_errno (archive->archive),
- archive_error_string (archive->archive));
- }
- else
- g_vfs_job_succeeded (archive->job);
-
-
- archive->job = NULL;
-}
-
-static void
-gvfs_archive_finish (GVfsArchive *archive)
-{
- gvfs_archive_pop_job (archive);
-
- archive_read_finish (archive->archive);
- g_slice_free (GVfsArchive, archive);
-}
-
-/* NB: assumes an GVfsArchive initialized with ARCHIVE_DATA_INIT */
-static GVfsArchive *
-gvfs_archive_new (GVfsBackendArchive *ba, GVfsJob *job)
-{
- GVfsArchive *d;
-
- d = g_slice_new0 (GVfsArchive);
-
- d->file = ba->file;
- gvfs_archive_push_job (d, job);
-
- d->archive = archive_read_new ();
- archive_read_support_compression_all (d->archive);
- archive_read_support_format_all (d->archive);
- archive_read_open2 (d->archive,
- d,
- gvfs_archive_open,
- gvfs_archive_read,
- gvfs_archive_skip,
- gvfs_archive_close);
-
- return d;
-}
-
-/*** BACKEND ***/
-
-static void
-g_vfs_backend_archive_finalize (GObject *object)
-{
- GVfsBackendArchive *archive = G_VFS_BACKEND_ARCHIVE (object);
-
- g_assert (archive->file == NULL);
-}
-
-static void
-g_vfs_backend_archive_init (GVfsBackendArchive *archive)
-{
-}
-
-/*** FILE TREE HANDLING ***/
-
-/* NB: filename must NOT start with a slash */
-static ArchiveFile *
-archive_file_get_from_path (ArchiveFile *file, const char *filename, gboolean add)
-{
- char **names = g_strsplit (filename, "/", -1);
- ArchiveFile *cur;
- GSList *walk;
- guint i;
-
- DEBUG ("%s %s\n", add ? "add" : "find", filename);
- for (i = 0; file && names[i] != NULL; i++)
- {
- cur = NULL;
- for (walk = file->children; walk; walk = walk->next)
- {
- cur = walk->data;
- if (g_str_equal (cur->name, names[i]))
- break;
- cur = NULL;
- }
- if (cur == NULL && add != FALSE)
- {
- DEBUG ("adding node %s to %s\n", names[i], file->name);
- /* (hopefully) clever trick to avoid string copy */
- if (names[i][0] != 0 &&
- strcmp (names[i], ".") != 0)
- {
- cur = g_slice_new0 (ArchiveFile);
- cur->name = names[i];
- names[i] = NULL;
- file->children = g_slist_prepend (file->children, cur);
- }
- else
- {
- /* happens when adding directories, their path ends with a / */
- /* Can also happen with "." in e.g. iso files */
- g_assert (names[i + 1] == NULL);
- g_free (names[i]);
- names[i] = NULL;
- cur = file;
- }
- }
- file = cur;
- }
- g_strfreev (names);
- return file;
-}
-#define archive_file_find(ba, filename) archive_file_get_from_path((ba)->files, (filename) + 1, FALSE)
-
-static void
-create_root_file (GVfsBackendArchive *ba)
-{
- ArchiveFile *root = g_slice_new0 (ArchiveFile);
- GFileInfo *info;
- char *s, *display_name;
- GIcon *icon;
-
- root = g_slice_new0 (ArchiveFile);
- root->name = g_strdup ("/");
- ba->files = root;
-
- info = g_file_info_new ();
- root->info = info;
-
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
-
- g_file_info_set_name (info, "/");
- s = g_file_get_basename (ba->file);
- /* FIXME: this should really be "/ in %s", but can't change
- due to string freeze. */
- display_name = g_strdup_printf (_("/ on %s"), s);
- g_free (s);
- g_file_info_set_display_name (info, display_name);
- g_free (display_name);
- g_file_info_set_edit_name (info, "/");
-
- g_file_info_set_content_type (info, "inode/directory");
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE, "inode/directory");
-
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, TRUE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE, TRUE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME, FALSE);
-
- icon = g_themed_icon_new ("folder");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
-}
-
-static void
-archive_file_set_info_from_entry (ArchiveFile * file,
- struct archive_entry *entry)
-{
- GFileInfo *info = g_file_info_new ();
- GFileType type;
- file->info = info;
-
- DEBUG ("setting up %s (%s)\n", archive_entry_pathname (entry), file->name);
-
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_TIME_ACCESS,
- archive_entry_atime (entry));
- g_file_info_set_attribute_uint32 (info,
- G_FILE_ATTRIBUTE_TIME_ACCESS_USEC,
- archive_entry_atime_nsec (entry) / 1000);
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_TIME_CHANGED,
- archive_entry_ctime (entry));
- g_file_info_set_attribute_uint32 (info,
- G_FILE_ATTRIBUTE_TIME_CHANGED_USEC,
- archive_entry_ctime_nsec (entry) / 1000);
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_TIME_MODIFIED,
- archive_entry_mtime (entry));
- g_file_info_set_attribute_uint32 (info,
- G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC,
- archive_entry_mtime_nsec (entry) / 1000);
-
- switch (archive_entry_filetype (entry))
- {
- case AE_IFREG:
- type = G_FILE_TYPE_REGULAR;
- break;
- case AE_IFLNK:
- g_file_info_set_symlink_target (info,
- archive_entry_symlink (entry));
- type = G_FILE_TYPE_SYMBOLIC_LINK;
- break;
- case AE_IFDIR:
- type = G_FILE_TYPE_DIRECTORY;
- break;
- case AE_IFCHR:
- case AE_IFBLK:
- case AE_IFIFO:
- type = G_FILE_TYPE_SPECIAL;
- break;
- default:
- g_warning ("unknown file type %u", archive_entry_filetype (entry));
- type = G_FILE_TYPE_SPECIAL;
- break;
- }
- g_file_info_set_name (info, file->name);
- gvfs_file_info_populate_default (info,
- file->name,
- type);
-
- g_file_info_set_size (info,
- archive_entry_size (entry));
-
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, TRUE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE, type == G_FILE_TYPE_DIRECTORY);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME, FALSE);
-
- /* FIXME: add info for these
-dev_t archive_entry_dev(struct archive_entry *);
-dev_t archive_entry_devmajor(struct archive_entry *);
-dev_t archive_entry_devminor(struct archive_entry *);
-void archive_entry_fflags(struct archive_entry *,
- unsigned long *set, unsigned long *clear);
-const char *archive_entry_fflags_text(struct archive_entry *);
-gid_t archive_entry_gid(struct archive_entry *);
-const char *archive_entry_gname(struct archive_entry *);
-const char *archive_entry_hardlink(struct archive_entry *);
-ino_t archive_entry_ino(struct archive_entry *);
-mode_t archive_entry_mode(struct archive_entry *);
-unsigned int archive_entry_nlink(struct archive_entry *);
-dev_t archive_entry_rdev(struct archive_entry *);
-dev_t archive_entry_rdevmajor(struct archive_entry *);
-dev_t archive_entry_rdevminor(struct archive_entry *);
-uid_t archive_entry_uid(struct archive_entry *);
-const char *archive_entry_uname(struct archive_entry *);
- */
-
- /* FIXME: do ACLs */
-}
-
-static void
-fixup_dirs (ArchiveFile *file)
-{
- GSList *l;
-
- if (file->info == NULL)
- {
- GFileInfo *info = g_file_info_new ();
-
- file->info = info;
- g_file_info_set_name (info, file->name);
- gvfs_file_info_populate_default (info,
- file->name,
- G_FILE_TYPE_DIRECTORY);
- }
-
- for (l = file->children; l != NULL; l = l->next)
- fixup_dirs (l->data);
-}
-
-static void
-create_file_tree (GVfsBackendArchive *ba, GVfsJob *job)
-{
- GVfsArchive *archive;
- struct archive_entry *entry;
- int result;
-
- archive = gvfs_archive_new (ba, job);
-
- g_assert (ba->files != NULL);
-
- do
- {
- result = archive_read_next_header (archive->archive, &entry);
- if (result >= ARCHIVE_WARN && result <= ARCHIVE_OK)
- {
- if (result < ARCHIVE_OK) {
- DEBUG ("archive_read_next_header: result = %d, error = '%s'\n", result, archive_error_string (archive->archive));
- archive_set_error (archive->archive, ARCHIVE_OK, "No error");
- archive_clear_error (archive->archive);
- }
-
- ArchiveFile *file = archive_file_get_from_path (ba->files,
- archive_entry_pathname (entry),
- TRUE);
- /* Don't set info for root */
- if (file != ba->files)
- archive_file_set_info_from_entry (file, entry);
- archive_read_data_skip (archive->archive);
- }
- }
- while (result != ARCHIVE_FATAL && result != ARCHIVE_EOF);
-
- fixup_dirs (ba->files);
-
- gvfs_archive_finish (archive);
-}
-
-static void
-archive_file_free (ArchiveFile *file)
-{
- g_slist_foreach (file->children, (GFunc) archive_file_free, NULL);
- g_slist_free (file->children);
- if (file->info)
- g_object_unref (file->info);
- g_free (file->name);
-}
-
-static void
-do_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendArchive *archive = G_VFS_BACKEND_ARCHIVE (backend);
- const char *host, *file;
- GFileInfo *info;
- GIcon *icon;
- char *filename, *s;
- GError *error = NULL;
-
- host = g_mount_spec_get (mount_spec, "host");
- file = g_mount_spec_get (mount_spec, "file");
- if (host == NULL &&
- file == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("No hostname specified"));
- return;
- }
-
- if (host != NULL)
- {
- filename = g_uri_unescape_string (host, NULL);
- if (filename == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("Invalid mount spec"));
- return;
- }
-
- archive->file = g_file_new_for_commandline_arg (filename);
- g_free (filename);
- }
- else
- archive->file = g_file_new_for_commandline_arg (file);
-
- DEBUG ("Trying to mount %s\n", g_file_get_uri (archive->file));
-
- info = g_file_query_info (archive->file,
- "*",
- G_FILE_QUERY_INFO_NONE,
- G_VFS_JOB (job)->cancellable,
- &error);
- if (info == NULL)
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job),
- error);
- g_error_free (error);
- return;
- }
-
- if (g_file_info_get_file_type (info) != G_FILE_TYPE_REGULAR)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("Invalid mount spec"));
- return;
- }
-
- /* FIXME: check if this file is an archive */
-
- filename = g_file_get_uri (archive->file);
- DEBUG ("mounted %s\n", filename);
- s = g_uri_escape_string (filename, NULL, FALSE);
- mount_spec = g_mount_spec_new ("archive");
- g_mount_spec_set (mount_spec, "host", s);
- g_free (s);
- g_vfs_backend_set_mount_spec (backend, mount_spec);
- g_mount_spec_unref (mount_spec);
-
- g_vfs_backend_set_display_name (backend, g_file_info_get_display_name (info));
-
- icon = g_file_info_get_icon (info);
-
- g_vfs_backend_set_icon_name (backend, MOUNT_ICON_NAME);
-
- create_root_file (archive);
- create_file_tree (archive, G_VFS_JOB (job));
- g_object_unref (info);
-}
-
-static void
-do_unmount (GVfsBackend *backend,
- GVfsJobUnmount *job)
-{
- GVfsBackendArchive *ba = G_VFS_BACKEND_ARCHIVE (backend);
-
- g_object_unref (ba->file);
- archive_file_free (ba->files);
- ba->files = NULL;
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static void
-do_open_for_read (GVfsBackend * backend,
- GVfsJobOpenForRead *job,
- const char * filename)
-{
- GVfsBackendArchive *ba = G_VFS_BACKEND_ARCHIVE (backend);
- GVfsArchive *archive;
- struct archive_entry *entry;
- int result;
-
- archive = gvfs_archive_new (ba, G_VFS_JOB (job));
-
- do
- {
- result = archive_read_next_header (archive->archive, &entry);
- if (result >= ARCHIVE_WARN && result <= ARCHIVE_OK)
- {
- if (result < ARCHIVE_OK) {
- DEBUG ("do_open_for_read: result = %d, error = '%s'\n", result, archive_error_string (archive->archive));
- archive_set_error (archive->archive, ARCHIVE_OK, "No error");
- archive_clear_error (archive->archive);
- }
-
- if (g_str_equal (archive_entry_pathname (entry), filename + 1))
- {
- /* SUCCESS */
- g_vfs_job_open_for_read_set_handle (job, archive);
- g_vfs_job_open_for_read_set_can_seek (job, FALSE);
- gvfs_archive_pop_job (archive);
- return;
- }
- else
- archive_read_data_skip (archive->archive);
- }
- }
- while (result != ARCHIVE_FATAL && result != ARCHIVE_EOF);
-
- if (!gvfs_archive_in_error (archive))
- {
- g_set_error_literal (&archive->error,
- G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("File doesn't exist"));
- }
- gvfs_archive_finish (archive);
-}
-
-static void
-do_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle handle)
-{
- GVfsArchive *archive = handle;
-
- gvfs_archive_push_job (archive, G_VFS_JOB (job));
- gvfs_archive_finish (archive);
-}
-
-static void
-do_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize bytes_requested)
-{
- GVfsArchive *archive = handle;
- gssize bytes_read;
-
- gvfs_archive_push_job (archive, G_VFS_JOB (job));
- bytes_read = archive_read_data (archive->archive, buffer, bytes_requested);
- if (bytes_read >= 0)
- g_vfs_job_read_set_size (job, bytes_read);
- gvfs_archive_pop_job (archive);
-}
-
-static void
-do_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher)
-{
- GVfsBackendArchive *ba = G_VFS_BACKEND_ARCHIVE (backend);
- ArchiveFile *file;
-
- file = archive_file_find (ba, filename);
- if (file == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("File doesn't exist"));
- return;
- }
-
- if (!(flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS))
- g_warning ("FIXME: follow symlinks");
-
- g_file_info_copy_into (file->info, info);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static void
-do_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *attribute_matcher,
- GFileQueryInfoFlags flags)
-{
- GVfsBackendArchive *ba = G_VFS_BACKEND_ARCHIVE (backend);
- ArchiveFile *file;
- GSList *walk;
-
- file = archive_file_find (ba, filename);
- if (file == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("File doesn't exist"));
- return;
- }
-
- if (g_file_info_get_file_type (file->info) != G_FILE_TYPE_DIRECTORY)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_NOT_DIRECTORY,
- _("The file is not a directory"));
- return;
- }
-
- if (!(flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS))
- g_warning ("FIXME: follow symlinks");
-
- for (walk = file->children; walk; walk = walk->next)
- {
- GFileInfo *info = g_file_info_dup (((ArchiveFile *) walk->data)->info);
- g_vfs_job_enumerate_add_info (job, info);
- g_object_unref (info);
- }
- g_vfs_job_enumerate_done (job);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static gboolean
-try_query_fs_info (GVfsBackend *backend,
- GVfsJobQueryFsInfo *job,
- const char *filename,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher)
-{
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, TRUE);
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW, G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- return TRUE;
-}
-
-static void
-g_vfs_backend_archive_class_init (GVfsBackendArchiveClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_archive_finalize;
-
- backend_class->mount = do_mount;
- backend_class->unmount = do_unmount;
- backend_class->open_for_read = do_open_for_read;
- backend_class->close_read = do_close_read;
- backend_class->read = do_read;
- backend_class->enumerate = do_enumerate;
- backend_class->query_info = do_query_info;
- backend_class->try_query_fs_info = try_query_fs_info;
-}
diff --git a/daemon/gvfsbackendarchive.h b/daemon/gvfsbackendarchive.h
deleted file mode 100644
index 14526ffc..00000000
--- a/daemon/gvfsbackendarchive.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Benjamin Otte <otte@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Benjamin Otte <otte@gnome.org>
- */
-
-#ifndef __G_VFS_BACKEND_ARCHIVE_H__
-#define __G_VFS_BACKEND_ARCHIVE_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_ARCHIVE (g_vfs_backend_archive_get_type ())
-#define G_VFS_BACKEND_ARCHIVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_ARCHIVE, GVfsBackendArchive))
-#define G_VFS_BACKEND_ARCHIVE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_ARCHIVE, GVfsBackendArchiveClass))
-#define G_VFS_IS_BACKEND_ARCHIVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_ARCHIVE))
-#define G_VFS_IS_BACKEND_ARCHIVE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_ARCHIVE))
-#define G_VFS_BACKEND_ARCHIVE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_ARCHIVE, GVfsBackendArchiveClass))
-
-typedef struct _GVfsBackendArchive GVfsBackendArchive;
-typedef struct _GVfsBackendArchiveClass GVfsBackendArchiveClass;
-
-struct _GVfsBackendArchiveClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_archive_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_ARCHIVE_H__ */
diff --git a/daemon/gvfsbackendburn.c b/daemon/gvfsbackendburn.c
deleted file mode 100644
index e9ed3da5..00000000
--- a/daemon/gvfsbackendburn.c
+++ /dev/null
@@ -1,976 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-#include <gio/gunixmounts.h>
-#include <glib/gurifuncs.h>
-
-#include "gvfsbackendburn.h"
-#include "gvfsmonitor.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobclosewrite.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobmountmountable.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobdelete.h"
-#include "gvfsjobqueryfsinfo.h"
-#include "gvfsjobqueryattributes.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsjobcreatemonitor.h"
-#include "gvfsdaemonprotocol.h"
-
-/* TODO:
- * Change notification
- *
- */
-
-typedef enum {
- VIRTUAL_NODE_FILE,
- VIRTUAL_NODE_DIRECTORY
-} VirtualNodeType;
-
-typedef struct {
- char *filename;
- VirtualNodeType type;
-
- /* for files: */
- char *backing_file; /* local filename */
- gboolean owned_file;
-
- GList *subscriptions;
-
- /* for directories: */
- GList *children;
- volatile gint ref_count;
-} VirtualNode;
-
-struct _GVfsBackendBurn
-{
- GVfsBackend parent_instance;
-
- char *tempdir;
-
- VirtualNode *root_node;
-
- GMountSpec *mount_spec;
-};
-
-G_DEFINE_TYPE (GVfsBackendBurn, g_vfs_backend_burn, G_VFS_TYPE_BACKEND)
-
-
-static void virtual_node_unref (VirtualNode *node);
-
-static VirtualNode *
-virtual_node_new (const char *filename,
- VirtualNodeType type)
-{
- VirtualNode *node;
-
- node = g_slice_new0 (VirtualNode);
- node->filename = g_strdup (filename);
- node->type = type;
- node->ref_count = 1;
-
- return node;
-}
-
-static void
-virtual_node_free (VirtualNode *node,
- gboolean deep)
-{
- GList *l;
-
- g_free (node->filename);
-
- switch (node->type)
- {
- case VIRTUAL_NODE_FILE:
- if (node->backing_file != NULL)
- {
- if (node->owned_file)
- g_unlink (node->backing_file);
- g_free (node->backing_file);
- }
- break;
- case VIRTUAL_NODE_DIRECTORY:
- if (deep)
- {
- for (l = node->children; l != NULL; l = l->next)
- virtual_node_unref ((VirtualNode *)l->data);
- }
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- /*
- while ((l = g_list_first (node->subscriptions)) != NULL) {
- MappingSubscription *sub = l->data;
- virtual_node_remove_subscription (node, sub);
- }
- */
-
- g_slice_free (VirtualNode, node);
-}
-
-static void
-virtual_node_unref (VirtualNode *node)
-{
- g_return_if_fail (node != NULL);
- g_return_if_fail (node->ref_count > 0);
-
- if (g_atomic_int_dec_and_test (&node->ref_count))
- virtual_node_free (node, TRUE);
-}
-
-static G_GNUC_UNUSED VirtualNode *
-virtual_node_ref (VirtualNode *node)
-{
- g_return_val_if_fail (node != NULL, NULL);
- g_return_val_if_fail (node->ref_count > 0, NULL);
-
- g_atomic_int_inc (&node->ref_count);
- return node;
-}
-
-
-static VirtualNode *
-virtual_dir_lookup (VirtualNode *dir,
- const char *filename)
-{
- GList *l;
- VirtualNode *node;
-
- g_assert (dir->type == VIRTUAL_NODE_DIRECTORY);
-
- for (l = dir->children; l != NULL; l = l->next)
- {
- node = l->data;
-
- if (strcmp (node->filename, filename) == 0)
- return node;
- }
-
- return NULL;
-}
-
-static VirtualNode *
-virtual_node_lookup (VirtualNode *root_dir,
- const char *path,
- VirtualNode **parent)
-{
- char *copy, *next, *copy_orig;
- VirtualNode *node;
-
- copy_orig = g_strdup (path);
- copy = copy_orig;
-
- if (parent != NULL)
- *parent = NULL;
-
- node = root_dir;
-
- while (copy != NULL)
- {
- /* Skip initial/multiple slashes */
- while (G_IS_DIR_SEPARATOR (*copy))
- ++copy;
-
- if (*copy == 0)
- break;
-
- next = strchr (copy, G_DIR_SEPARATOR);
- if (next)
- {
- *next = 0;
- next++;
- }
-
- if (node->type != VIRTUAL_NODE_DIRECTORY)
- {
- /* Found a file in the middle of the path */
- node = NULL;
- break;
- }
-
- if (parent != NULL)
- *parent = node;
-
- node = virtual_dir_lookup (node, copy);
- if (node == NULL)
- break;
-
- copy = next;
- }
-
- g_free (copy_orig);
-
- return node;
-}
-
-static VirtualNode *
-virtual_mkdir (VirtualNode *node,
- const char *name)
-{
- VirtualNode *subdir;
-
- g_assert (node->type == VIRTUAL_NODE_DIRECTORY);
-
- if (virtual_dir_lookup (node, name) != NULL)
- return NULL;
-
- subdir = virtual_node_new (name, VIRTUAL_NODE_DIRECTORY);
-
- /* list takes ownership of ref */
- node->children = g_list_append (node->children, subdir);
-
- return subdir;
-}
-
-static void
-virtual_unlink (VirtualNode *dir,
- VirtualNode *node)
-{
- g_assert (dir->type == VIRTUAL_NODE_DIRECTORY);
-
- dir->children = g_list_remove (dir->children, node);
- virtual_node_unref (node);
-}
-
-static VirtualNode *
-virtual_create (GVfsBackendBurn *backend,
- VirtualNode *dir,
- const char *name,
- const char *backing_file)
-{
- VirtualNode *file;
- char *template;
- int fd;
-
- g_assert (dir->type == VIRTUAL_NODE_DIRECTORY);
-
- if (virtual_dir_lookup (dir, name) != NULL)
- return NULL;
-
- file = virtual_node_new (name, VIRTUAL_NODE_FILE);
-
- if (backing_file != NULL)
- {
- file->backing_file = g_strdup (backing_file);
- file->owned_file = FALSE;
- }
- else
- {
- template = g_build_filename (backend->tempdir, "file.XXXXXX", NULL);
-
- fd = g_mkstemp (template);
- if (fd < 0)
- {
- g_free (template);
- virtual_node_unref (file);
- return NULL;
-
- }
- close (fd);
- g_unlink (template);
-
- file->backing_file = template;
- file->owned_file = TRUE;
- }
-
- /* list takes ownership of ref */
- dir->children = g_list_append (dir->children, file);
-
- return file;
-}
-
-static void
-g_vfs_backend_burn_finalize (GObject *object)
-{
- GVfsBackendBurn *backend;
-
- backend = G_VFS_BACKEND_BURN (object);
-
- g_mount_spec_unref (backend->mount_spec);
-
- if (G_OBJECT_CLASS (g_vfs_backend_burn_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_burn_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_burn_init (GVfsBackendBurn *burn_backend)
-{
- GVfsBackend *backend = G_VFS_BACKEND (burn_backend);
- GMountSpec *mount_spec;
-
- /* Translators: This is the name of the backend */
- g_vfs_backend_set_display_name (backend, _("Burn"));
- g_vfs_backend_set_icon_name (backend, "computer");
- g_vfs_backend_set_user_visible (backend, FALSE);
-
- mount_spec = g_mount_spec_new ("burn");
- g_vfs_backend_set_mount_spec (backend, mount_spec);
- burn_backend->mount_spec = mount_spec;
-}
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendBurn *burn_backend = G_VFS_BACKEND_BURN (backend);
- char *tempdir, *filename;
- char *dir;
-
- filename = g_strdup_printf ("virtual-%s.XXXXXX", g_get_user_name ());
- tempdir = g_build_filename (g_get_tmp_dir (), filename, NULL);
- g_free (filename);
-
- dir = mkdtemp (tempdir);
- if (dir == NULL)
- {
- g_free (tempdir);
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Unable to create temporary directory"));
- return TRUE;
- }
-
- burn_backend->tempdir = dir;
- burn_backend->root_node =
- virtual_node_new (NULL, VIRTUAL_NODE_DIRECTORY);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- return TRUE;
-}
-
-static gboolean
-try_delete (GVfsBackend *backend,
- GVfsJobDelete *job,
- const char *filename)
-{
- char *dirname, *basename;
- VirtualNode *file, *dir;
-
- dirname = g_path_get_dirname (filename);
- dir = virtual_node_lookup (G_VFS_BACKEND_BURN (backend)->root_node, dirname, NULL);
- g_free (dirname);
-
- if (dir == NULL ||
- dir->type != VIRTUAL_NODE_DIRECTORY)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file or directory"));
- return TRUE;
- }
-
- basename = g_path_get_basename (filename);
- file = virtual_dir_lookup (dir, basename);
- g_free (basename);
- if (file == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file or directory"));
- return TRUE;
- }
-
- if (file->type == VIRTUAL_NODE_DIRECTORY &&
- file->children != NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_EMPTY,
- _("Directory not empty"));
- return TRUE;
- }
-
- virtual_unlink (dir, file);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- return TRUE;
-}
-
-
-static gboolean
-try_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- VirtualNode *node;
- GFileInputStream *stream;
- GFile *file;
- GError *error;
-
- node = virtual_node_lookup (G_VFS_BACKEND_BURN (backend)->root_node, filename, NULL);
- if (node == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file or directory"));
- return TRUE;
- }
-
- if (node->type == VIRTUAL_NODE_DIRECTORY)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_IS_DIRECTORY,
- _("Can't copy file over directory"));
- return TRUE;
- }
-
- file = g_file_new_for_path (node->backing_file);
-
- error = NULL;
- stream = g_file_read (file, G_VFS_JOB (job)->cancellable, &error);
- g_object_unref (file);
-
- if (stream)
- {
- g_vfs_job_open_for_read_set_can_seek (job, g_seekable_can_seek (G_SEEKABLE (stream)));
- g_vfs_job_open_for_read_set_handle (job, stream);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-
- return TRUE;
-}
-
-
-static void
-do_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle _handle,
- char *buffer,
- gsize bytes_requested)
-{
- GError *error;
- GFileInputStream *stream = _handle;
- gssize s;
-
- error = NULL;
- s = g_input_stream_read (G_INPUT_STREAM(stream),
- buffer, bytes_requested,
- G_VFS_JOB (job)->cancellable, &error);
- if (s >= 0)
- {
- g_vfs_job_read_set_size (job, s);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-}
-
-static void
-do_seek_on_read (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle _handle,
- goffset offset,
- GSeekType type)
-{
- GError *error;
- GFileInputStream *stream = _handle;
-
- error = NULL;
- if (g_seekable_seek (G_SEEKABLE (stream), offset, type,
- G_VFS_JOB (job)->cancellable, &error))
- {
- g_vfs_job_seek_read_set_offset (job, g_seekable_tell (G_SEEKABLE (stream)));
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-}
-
-
-static void
-do_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle _handle)
-{
- GError *error;
- GFileInputStream *stream = _handle;
-
- error = NULL;
- if (g_input_stream_close (G_INPUT_STREAM(stream),
- G_VFS_JOB (job)->cancellable, &error))
- {
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-
- g_object_unref (stream);
-}
-
-static char *
-make_valid_utf8 (const char *name)
-{
- GString *string;
- const gchar *remainder, *invalid;
- gint remaining_bytes, valid_bytes;
-
- string = NULL;
- remainder = name;
- remaining_bytes = strlen (name);
-
- while (remaining_bytes != 0)
- {
- if (g_utf8_validate (remainder, remaining_bytes, &invalid))
- break;
- valid_bytes = invalid - remainder;
-
- if (string == NULL)
- string = g_string_sized_new (remaining_bytes);
-
- g_string_append_len (string, remainder, valid_bytes);
- /* append U+FFFD REPLACEMENT CHARACTER */
- g_string_append (string, "\357\277\275");
-
- remaining_bytes -= valid_bytes + 1;
- remainder = invalid + 1;
- }
-
- if (string == NULL)
- return g_strdup (name);
-
- g_string_append (string, remainder);
-
- g_warn_if_fail (g_utf8_validate (string->str, -1, NULL));
-
- return g_string_free (string, FALSE);
-}
-
-
-static void
-file_info_from_node (VirtualNode *node,
- GFileInfo *info,
- const char *attributes)
-{
- GIcon *icon;
- GFile *file;
- GFileInfo *file_info;
-
- if (node->type == VIRTUAL_NODE_DIRECTORY)
- {
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
- icon = g_themed_icon_new ("folder");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, TRUE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, TRUE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_content_type (info, "inode/directory");
- }
- else
- {
- file = g_file_new_for_path (node->backing_file);
- file_info = g_file_query_info (file,
- attributes,
- 0, /* Always follow symlinks */
- NULL, NULL);
- if (file_info)
- {
- g_file_info_copy_into (file_info, info);
- g_object_unref (file_info);
- }
-
- g_file_info_set_attribute_byte_string (info,
- "burn::backing-file",
- node->backing_file);
- }
-
- if (node->filename != NULL)
- {
- char *utf8;
-
- g_file_info_set_name (info, node->filename);
- /* Ensure display name is utf8 */
- utf8 = make_valid_utf8 (node->filename);
- g_file_info_set_display_name (info, utf8);
- g_free (utf8);
- }
- else
- {
- g_file_info_set_name (info, "/");
- /* Translators: this is the display name of the backend */
- g_file_info_set_display_name (info, _("CD/DVD Creator"));
- }
-}
-
-static gboolean
-try_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *attribute_matcher,
- GFileQueryInfoFlags flags)
-{
- VirtualNode *node, *child;
- GFileInfo *info;
- GList *l;
-
- node = virtual_node_lookup (G_VFS_BACKEND_BURN (backend)->root_node, filename, NULL);
-
- if (node == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file or directory"));
- return TRUE;
- }
-
- if (node->type != VIRTUAL_NODE_DIRECTORY)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_DIRECTORY,
- _("The file is not a directory"));
- return TRUE;
- }
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- for (l = node->children; l != NULL; l = l->next)
- {
- child = l->data;
-
- info = g_file_info_new ();
- file_info_from_node (child, info, job->attributes);
- g_vfs_job_enumerate_add_info (job, info);
- g_object_unref (info);
- }
-
- g_vfs_job_enumerate_done (job);
-
- return TRUE;
-}
-
-static gboolean
-try_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- VirtualNode *node;
-
- g_print ("q_i: filename: %s\n", filename);
-
- node = virtual_node_lookup (G_VFS_BACKEND_BURN (backend)->root_node, filename, NULL);
-
- if (node == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file or directory"));
- return TRUE;
- }
-
- file_info_from_node (node, info, job->attributes);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- return TRUE;
-}
-
-static gboolean
-try_make_directory (GVfsBackend *backend,
- GVfsJobMakeDirectory *job,
- const char *filename)
-{
- char *dirname, *basename;
- VirtualNode *file, *dir;
-
- dirname = g_path_get_dirname (filename);
- dir = virtual_node_lookup (G_VFS_BACKEND_BURN (backend)->root_node, dirname, NULL);
- g_free (dirname);
-
- if (dir == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file or directory"));
- return TRUE;
- }
-
- basename = g_path_get_basename (filename);
- file = virtual_dir_lookup (dir, basename);
- if (file != NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_EXISTS,
- _("File exists"));
- g_free (basename);
- return TRUE;
- }
-
- file = virtual_mkdir (dir, basename);
- g_free (basename);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- return TRUE;
-}
-
-static gboolean
-try_set_display_name (GVfsBackend *backend,
- GVfsJobSetDisplayName *job,
- const char *filename,
- const char *display_name)
-{
- VirtualNode *node, *dir;
- char *target_path;
- char *dirname;
-
- node = virtual_node_lookup (G_VFS_BACKEND_BURN (backend)->root_node, filename, &dir);
- if (node == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file or directory"));
- return TRUE;
- }
-
- if (virtual_dir_lookup (dir, display_name) != NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_EXISTS,
- _("File exists"));
- return TRUE;
- }
-
- /* We use UTF8 for filenames */
- g_free (node->filename);
- node->filename = g_strdup (display_name);
-
- dirname = g_path_get_dirname (filename);
- target_path = g_build_filename (dirname, display_name, NULL);
- g_vfs_job_set_display_name_set_new_path (job, target_path);
- g_free (dirname);
- g_free (target_path);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- return TRUE;
-
-}
-
-static gboolean
-try_push (GVfsBackend *backend,
- GVfsJobPush *job,
- const char *destination,
- const char *local_path,
- GFileCopyFlags flags,
- gboolean remove_source,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data)
-{
- VirtualNode *file, *dir;
- struct stat stat_buf;
- char *dirname, *basename;
-
- if (remove_source)
- {
- /* Fallback to copy & delete for now, fix that up later */
- g_vfs_job_failed_literal (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return TRUE;
- }
-
- if (g_stat (local_path, &stat_buf) == -1)
- {
- int errsv = errno;
-
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- g_io_error_from_errno (errsv),
- "%s", g_strerror (errsv));
- return TRUE;
- }
-
- dirname = g_path_get_dirname (destination);
- dir = virtual_node_lookup (G_VFS_BACKEND_BURN (backend)->root_node, dirname, NULL);
- g_free (dirname);
- file = NULL;
-
- if (dir == NULL)
- {
- /* Parent of created file doesn't exist */
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file or directory in target path"));
- return TRUE;
- }
-
- basename = g_path_get_basename (destination);
- file = virtual_dir_lookup (dir, basename);
- g_free (basename);
-
- if (S_ISDIR (stat_buf.st_mode))
- {
- /* The source is a directory, don't fail with WOULD_RECURSE immediately,
- * as that is less useful to the app. Better check for errors on the
- * target instead.
- */
-
- if (file != NULL)
- {
- if (flags & G_FILE_COPY_OVERWRITE)
- {
- if (file->type == VIRTUAL_NODE_DIRECTORY)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_WOULD_MERGE,
- _("Can't copy directory over directory"));
- return TRUE;
- }
- /* continue to would_recurse error */
- }
- else
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_EXISTS,
- _("Target file exists"));
- return TRUE;
- }
- }
-
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_WOULD_RECURSE,
- _("Can't recursively copy directory"));
- return TRUE;
- }
-
- g_print ("file: %p, overwrite: %u\n", file, flags & G_FILE_COPY_OVERWRITE);
- if (file != NULL)
- {
- if (flags & G_FILE_COPY_OVERWRITE)
- {
- if (file->type == VIRTUAL_NODE_DIRECTORY)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_IS_DIRECTORY,
- _("Can't copy file over directory"));
- return TRUE;
- }
- else
- {
- g_assert (file->type == VIRTUAL_NODE_FILE);
- if (file->owned_file)
- g_unlink (file->backing_file);
- g_free (file->backing_file);
- file->owned_file = FALSE;
- file->backing_file = g_strdup (local_path);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- return TRUE;
- }
- }
- else
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_EXISTS,
- _("File exists"));
- return TRUE;
- }
- }
- else
- {
- basename = g_path_get_basename (destination);
- file = virtual_create (G_VFS_BACKEND_BURN (backend),
- dir,
- basename,
- local_path);
- g_free (basename);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- return TRUE;
- }
-}
-
-static gboolean
-try_create_dir_monitor (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags)
-{
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Not supported"));
- return TRUE;
-}
-
-static void
-g_vfs_backend_burn_class_init (GVfsBackendBurnClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_burn_finalize;
-
- backend_class->try_mount = try_mount;
- backend_class->try_open_for_read = try_open_for_read;
- backend_class->try_query_info = try_query_info;
- backend_class->try_enumerate = try_enumerate;
- backend_class->try_create_dir_monitor = try_create_dir_monitor;
- backend_class->try_make_directory = try_make_directory;
- backend_class->try_set_display_name = try_set_display_name;
- backend_class->try_push = try_push;
- backend_class->try_delete = try_delete;
- backend_class->read = do_read;
- backend_class->seek_on_read = do_seek_on_read;
- backend_class->close_read = do_close_read;
-}
diff --git a/daemon/gvfsbackendburn.h b/daemon/gvfsbackendburn.h
deleted file mode 100644
index 42b26f7d..00000000
--- a/daemon/gvfsbackendburn.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_BURN_H__
-#define __G_VFS_BACKEND_BURN_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_BURN (g_vfs_backend_burn_get_type ())
-#define G_VFS_BACKEND_BURN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_BURN, GVfsBackendBurn))
-#define G_VFS_BACKEND_BURN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_BURN, GVfsBackendBurnClass))
-#define G_VFS_IS_BACKEND_BURN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_BURN))
-#define G_VFS_IS_BACKEND_BURN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_BURN))
-#define G_VFS_BACKEND_BURN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_BURN, GVfsBackendBurnClass))
-
-typedef struct _GVfsBackendBurn GVfsBackendBurn;
-typedef struct _GVfsBackendBurnClass GVfsBackendBurnClass;
-
-struct _GVfsBackendBurnClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_burn_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_BURN_H__ */
diff --git a/daemon/gvfsbackendcdda.c b/daemon/gvfsbackendcdda.c
deleted file mode 100644
index 4768cd0a..00000000
--- a/daemon/gvfsbackendcdda.c
+++ /dev/null
@@ -1,936 +0,0 @@
-/* GVFS cdrom audio file system driver
- *
- * Copyright (C) 2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-/* NOTE: since we link the libcdio libs (GPLv2) into our process space
- * the combined work is GPLv2. This source file, however, is LGPLv2+.
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-#include <libhal.h>
-#include <dbus/dbus.h>
-
-#include "gvfsbackendcdda.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobenumerate.h"
-
-#define DO_NOT_WANT_PARANOIA_COMPATIBILITY
-#include <cdio/paranoia.h>
-
-/* TODO:
- *
- * - GVFS integration
- * - g_vfs_backend_set_display_name() needs to work post mount
- *
- * - Metadata
- * - Use CD-Text to read metadata from the physical disc
- * - http://en.wikipedia.org/wiki/CD-Text
- * - libcdio can do this
- * - Use Musicbrainz to read metadata from the net
- * - libmusicbrainz appear to be a dead-end: http://musicbrainz.org/doc/libmusicbrainz
- * - Need to provide some UI for configuring musicbrainz; think proxy, local server,
- * lockdown (secure facilities don't want us to randomly connect to the Interwebs)
- * - Ideally use libjuicer for all this
- * - however it is currently private to sound-juicer and brings in GTK+, gnome-vfs, gconf...
- * - Use metadata for file names and display_name of our Mount (using g_vfs_backend_set_display_name())
- * - Also encode metadata in the WAV header so transcoding to Vorbis or MP3 Just Works(tm)
- * - This is already done; see create_header() in this file
- * - see thread on gtk-devel-list for a plan
- *
- * - Scratched discs / error conditions from paranoia
- * - Need to handle this better... ideally caller passes a flag when opening the file to
- * specify whether he wants us to try hard to get the hard result (ripping) or whether
- * he's fine with some noise (playback)
- *
- * - Sector cache? Might be useful to maintain a cache of previously read sectors
- */
-
-/*--------------------------------------------------------------------------------------------------------------*/
-
-struct _GVfsBackendCdda
-{
- GVfsBackend parent_instance;
-
- DBusConnection *dbus_connection;
- LibHalContext *hal_ctx;
- char *hal_udi;
-
- guint64 size;
-
- char *device_path;
- cdrom_drive_t *drive;
- int num_open_files;
-};
-
-G_DEFINE_TYPE (GVfsBackendCdda, g_vfs_backend_cdda, G_VFS_TYPE_BACKEND)
-
-static void
-release_device (GVfsBackendCdda *cdda_backend)
-{
- g_free (cdda_backend->device_path);
- cdda_backend->device_path = NULL;
-
- if (cdda_backend->drive != NULL)
- {
- cdio_cddap_close (cdda_backend->drive);
- cdda_backend->drive = NULL;
- }
-}
-
-static void
-find_udi_for_device (GVfsBackendCdda *cdda_backend)
-{
- int num_devices;
- char **devices;
- int n;
-
- cdda_backend->hal_udi = NULL;
-
- devices = libhal_manager_find_device_string_match (cdda_backend->hal_ctx,
- "block.device",
- cdda_backend->device_path,
- &num_devices,
- NULL);
- if (devices != NULL)
- {
- for (n = 0; n < num_devices && cdda_backend->hal_udi == NULL; n++)
- {
- char *udi = devices[n];
- LibHalPropertySet *ps;
-
- ps = libhal_device_get_all_properties (cdda_backend->hal_ctx, udi, NULL);
- if (ps != NULL)
- {
- if (libhal_ps_get_bool (ps, "block.is_volume"))
- {
- cdda_backend->hal_udi = g_strdup (udi);
- cdda_backend->size = libhal_ps_get_uint64 (ps, "volume.size");
- }
- }
-
- libhal_free_property_set (ps);
- }
- }
- libhal_free_string_array (devices);
-
- /*g_warning ("found udi '%s'", cdda_backend->hal_udi);*/
-}
-
-static void
-_hal_device_removed (LibHalContext *hal_ctx, const char *udi)
-{
- GVfsBackendCdda *cdda_backend;
-
- cdda_backend = G_VFS_BACKEND_CDDA (libhal_ctx_get_user_data (hal_ctx));
-
- if (cdda_backend->hal_udi != NULL && strcmp (udi, cdda_backend->hal_udi) == 0)
- {
- /*g_warning ("we have been removed!");*/
- /* TODO: need a cleaner way to force unmount ourselves */
- exit (1);
- }
-}
-
-static void
-g_vfs_backend_cdda_finalize (GObject *object)
-{
- GVfsBackendCdda *cdda_backend = G_VFS_BACKEND_CDDA (object);
-
- //g_warning ("finalizing %p", object);
-
- release_device (cdda_backend);
-
- if (G_OBJECT_CLASS (g_vfs_backend_cdda_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_cdda_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_cdda_init (GVfsBackendCdda *cdda_backend)
-{
- GVfsBackend *backend = G_VFS_BACKEND (cdda_backend);
- GMountSpec *mount_spec;
- char *x_content_types[] = {"x-content/audio-cdda", NULL};
-
- //g_warning ("initing %p", cdda_backend);
-
- g_vfs_backend_set_display_name (backend, "cdda");
- g_vfs_backend_set_x_content_types (backend, x_content_types);
- // TODO: HMM: g_vfs_backend_set_user_visible (backend, FALSE);
-
- mount_spec = g_mount_spec_new ("cdda");
- g_vfs_backend_set_mount_spec (backend, mount_spec);
- g_mount_spec_unref (mount_spec);
-}
-
-static void
-do_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- char *fuse_name;
- char *display_name;
- const char *host;
- GVfsBackendCdda *cdda_backend = G_VFS_BACKEND_CDDA (backend);
- GError *error = NULL;
- GMountSpec *cdda_mount_spec;
- DBusError dbus_error;
-
- //g_warning ("do_mount %p", cdda_backend);
-
- /* setup libhal */
-
- dbus_error_init (&dbus_error);
- cdda_backend->dbus_connection = dbus_bus_get_private (DBUS_BUS_SYSTEM, &dbus_error);
- if (dbus_error_is_set (&dbus_error))
- {
- release_device (cdda_backend);
- dbus_error_free (&dbus_error);
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Cannot connect to the system bus"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- cdda_backend->hal_ctx = libhal_ctx_new ();
- if (cdda_backend->hal_ctx == NULL)
- {
- release_device (cdda_backend);
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Cannot create libhal context"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- _g_dbus_connection_integrate_with_main (cdda_backend->dbus_connection);
- libhal_ctx_set_dbus_connection (cdda_backend->hal_ctx, cdda_backend->dbus_connection);
-
- if (!libhal_ctx_init (cdda_backend->hal_ctx, &dbus_error))
- {
- release_device (cdda_backend);
- dbus_error_free (&dbus_error);
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Cannot initialize libhal"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- libhal_ctx_set_device_removed (cdda_backend->hal_ctx, _hal_device_removed);
- libhal_ctx_set_user_data (cdda_backend->hal_ctx, cdda_backend);
-
- /* setup libcdio */
-
- host = g_mount_spec_get (mount_spec, "host");
- //g_warning ("host=%s", host);
- if (host == NULL)
- {
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("No drive specified"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (cdda_backend);
- return;
- }
-
- cdda_backend->device_path = g_strdup_printf ("/dev/%s", host);
-
- find_udi_for_device (cdda_backend);
-
- cdda_backend->drive = cdio_cddap_identify (cdda_backend->device_path, 0, NULL);
- if (cdda_backend->drive == NULL)
- {
- g_set_error (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Cannot find drive %s"), cdda_backend->device_path);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (cdda_backend);
- return;
- }
-
- if (cdio_cddap_open (cdda_backend->drive) != 0)
- {
- g_set_error (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Drive %s does not contain audio files"), cdda_backend->device_path);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (cdda_backend);
- return;
- }
-
- /* Translator: %s is the device the disc is inserted into */
- fuse_name = g_strdup_printf (_("cdda mount on %s"), host);
- display_name = g_strdup_printf (_("Audio Disc"));
- g_vfs_backend_set_stable_name (backend, fuse_name);
- g_vfs_backend_set_display_name (backend, display_name);
- g_free (display_name);
- g_free (fuse_name);
- g_vfs_backend_set_icon_name (backend, "media-optical-audio");
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- cdda_mount_spec = g_mount_spec_new ("cdda");
- g_mount_spec_set (cdda_mount_spec, "host", host);
- g_vfs_backend_set_mount_spec (backend, cdda_mount_spec);
- g_mount_spec_unref (cdda_mount_spec);
-
- //g_warning ("mounted %p", cdda_backend);
-}
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- const char *host;
- GError *error = NULL;
- GMountSpec *cdda_mount_spec;
-
- //g_warning ("try_mount %p", backend);
-
- /* TODO: Hmm.. apparently we have to set the mount spec in
- * try_mount(); doing it in mount() won't work..
- */
- host = g_mount_spec_get (mount_spec, "host");
- //g_warning ("tm host=%s", host);
- if (host == NULL)
- {
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("No drive specified"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return TRUE;
- }
-
- cdda_mount_spec = g_mount_spec_new ("cdda");
- g_mount_spec_set (cdda_mount_spec, "host", host);
- g_vfs_backend_set_mount_spec (backend, cdda_mount_spec);
- g_mount_spec_unref (cdda_mount_spec);
- return FALSE;
-}
-
-
-static void
-do_unmount (GVfsBackend *backend,
- GVfsJobUnmount *job)
-{
- GError *error;
- GVfsBackendCdda *cdda_backend = G_VFS_BACKEND_CDDA (backend);
-
- if (cdda_backend->num_open_files > 0)
- {
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_BUSY,
- ngettext ("File system is busy: %d open file",
- "File system is busy: %d open files",
- cdda_backend->num_open_files),
- cdda_backend->num_open_files);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- return;
- }
-
- release_device (cdda_backend);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- //g_warning ("unmounted %p", backend);
-}
-
-/* returns -1 if we couldn't map */
-static int
-get_track_num_from_name (GVfsBackendCdda *cdda_backend, const char *filename)
-{
- int n;
- char *basename;
-
- basename = g_path_get_basename (filename);
- if (sscanf (basename, "Track %d.wav", &n) == 1)
- {
- g_free (basename);
- return n;
- }
-
- return -1;
-}
-
-typedef struct {
- cdrom_paranoia_t *paranoia;
-
- long size; /* size of file being read */
- long header_size; /* size of the header */
- long content_size; /* size of content after the header */
-
- long cursor; /* cursor into the file being read */
-
- long first_sector; /* first sector of raw PCM audio data */
- long last_sector; /* last sector of raw PCM audio data */
- long sector_cursor; /* sector we're currently at */
-
- char *header; /* header payload */
-
- /* These following two fields are used for caching the last read sector. This
- * is to avoid seeking back if fewer bytes than whole sector is requested.
- */
- long buf_at_sector_num; /* the sector that is cached */
- char buf_at_sector[CDIO_CD_FRAMESIZE_RAW]; /* the data of the sector */
-
-} ReadHandle;
-
-static void
-free_read_handle (ReadHandle *read_handle)
-{
- if (read_handle->paranoia != NULL)
- cdio_paranoia_free (read_handle->paranoia);
- g_free (read_handle->header);
- g_free (read_handle);
-}
-
-static char *
-create_header (GVfsBackendCdda *cdda_backend, long *header_size, long content_size)
-{
- char *artist;
- char *title;
- const char *software;
- size_t artist_len;
- size_t title_len;
- size_t software_len;
- char *header;
- char *ptr;
- int var;
-
- /* See http://www.saettler.com/RIFFMCI/riffmci.html for the spec.
- *
- * artist -> IART
- * title -> INAM
- * track_number -> ?? (TODO: work with GStreamer people on coordinate with the wavparse plugin)
- *
- * software -> ISFT
- */
-
-
- //artist = g_strdup ("Homer Simpson");
- //title = g_strdup ("Simpsons Jail House Rock");
-
- /* TODO: fill in from metadata */
- artist = NULL;
- title = NULL;
- software = "gvfs-cdda using libcdio " CDIO_VERSION;
-
- artist_len = 0;
- title_len = 0;
-
- /* ensure even length and include room for the chunk */
- if (artist != NULL)
- artist_len = 2 * ((strlen (artist) + 2) / 2) + 8;
- if (title != NULL)
- title_len = 2 * ((strlen (title) + 2) / 2) + 8;
- software_len = 2 * ((strlen (software) + 2) / 2) + 8;
-
- *header_size = 44;
- *header_size += 12; /* for LIST INFO */
- *header_size += artist_len;
- *header_size += title_len;
- *header_size += software_len;
- header = g_new0 (char, *header_size);
-
- ptr = header;
- memcpy (ptr, "RIFF", 4); ptr += 4;
- var = content_size + *header_size - 8;
- memcpy (ptr, &var, 4); ptr += 4;
- memcpy (ptr, "WAVE", 4); ptr += 4;
-
- memcpy (ptr, "fmt ", 4); ptr += 4;
- var = 16;
- memcpy (ptr, &var, 4); ptr += 4;
- var = 1;
- memcpy (ptr, &var, 2); ptr += 2;
- var = 2;
- memcpy (ptr, &var, 2); ptr += 2;
- var = 44100;
- memcpy (ptr, &var, 4); ptr += 4;
- var = 44100 * 2 * 2;
- memcpy (ptr, &var, 4); ptr += 4;
- var = 4;
- memcpy (ptr, &var, 2); ptr += 2;
- var = 16;
- memcpy (ptr, &var, 2); ptr += 2;
-
- memcpy (ptr, "LIST", 4); ptr += 4;
- var = 4 + artist_len + title_len + software_len;
- memcpy (ptr, &var, 4); ptr += 4;
- memcpy (ptr, "INFO", 4); ptr += 4;
-
- if (artist != NULL)
- {
- memcpy (ptr, "IART", 4);
- var = artist_len - 8;
- memcpy (ptr + 4, &var, 4);
- strncpy (ptr + 8, artist, artist_len);
- ptr += artist_len;
- }
-
- if (title != NULL)
- {
- memcpy (ptr, "INAM", 4);
- var = title_len - 8;
- memcpy (ptr + 4, &var, 4);
- strncpy (ptr + 8, title, title_len);
- ptr += title_len;
- }
-
- memcpy (ptr, "ISFT", 4);
- var = software_len - 8;
- memcpy (ptr + 4, &var, 4);
- strncpy (ptr + 8, software, software_len);
- ptr += software_len;
-
- memcpy (ptr, "data", 4); ptr += 4;
- memcpy (ptr, &content_size, 4); ptr += 4;
-
- g_free (artist);
- g_free (title);
-
- return header;
-}
-
-static void
-do_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- int track_num;
- GError *error;
- ReadHandle *read_handle;
- GVfsBackendCdda *cdda_backend = G_VFS_BACKEND_CDDA (backend);
-
- //g_warning ("open_for_read (%s)", filename);
-
- read_handle = g_new0 (ReadHandle, 1);
-
- track_num = get_track_num_from_name (cdda_backend, job->filename);
- if (track_num == -1)
- {
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
- _("No such file %s on drive %s"), job->filename, cdda_backend->device_path);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- free_read_handle (read_handle);
- return;
- }
-
-
- read_handle->first_sector = cdio_cddap_track_firstsector (cdda_backend->drive, track_num);
- read_handle->last_sector = cdio_cddap_track_lastsector (cdda_backend->drive, track_num);
- read_handle->sector_cursor = -1;
-
- read_handle->cursor = 0;
- read_handle->buf_at_sector_num = -1;
- read_handle->content_size = ((read_handle->last_sector - read_handle->first_sector) + 1) * CDIO_CD_FRAMESIZE_RAW;
-
- read_handle->header = create_header (cdda_backend, &(read_handle->header_size), read_handle->content_size);
- read_handle->size = read_handle->header_size + read_handle->content_size;
-
- read_handle->paranoia = cdio_paranoia_init (cdda_backend->drive);
- cdio_paranoia_modeset (read_handle->paranoia, PARANOIA_MODE_DISABLE);
-
- cdda_backend->num_open_files++;
-
- g_vfs_job_open_for_read_set_can_seek (job, TRUE);
- g_vfs_job_open_for_read_set_handle (job, GINT_TO_POINTER (read_handle));
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-/* We have to pass in a callback to paranoia_read, even though we don't use it */
-static void
-paranoia_callback (long int inpos, paranoia_cb_mode_t function)
-{
-}
-
-
-static void
-do_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize bytes_requested)
-{
- GVfsBackendCdda *cdda_backend = G_VFS_BACKEND_CDDA (backend);
- ReadHandle *read_handle = (ReadHandle *) handle;
- int bytes_read;
- long skip_bytes;
- char *readbuf;
- long desired_sector;
- int bytes_to_copy;
- long cursor_in_stream;
-
- //g_warning ("read (%"G_GSSIZE_FORMAT") (@ %ld)", bytes_requested, read_handle->cursor);
-
- /* header */
- if (read_handle->cursor < read_handle->header_size)
- {
- skip_bytes = read_handle->cursor;
- bytes_read = read_handle->header_size - read_handle->cursor;
- readbuf = read_handle->header + skip_bytes;
- goto read_data_done;
- }
-
- /* EOF */
- if (read_handle->cursor >= read_handle->size)
- {
- skip_bytes = 0;
- bytes_read = 0;
- readbuf = NULL;
- goto read_data_done;
- }
-
- cursor_in_stream = read_handle->cursor - read_handle->header_size;
-
- desired_sector = cursor_in_stream / CDIO_CD_FRAMESIZE_RAW + read_handle->first_sector;
-
- if (desired_sector == read_handle->buf_at_sector_num)
- {
- /* got it cached */
-
- /* skip some bytes */
- skip_bytes = cursor_in_stream - (desired_sector - read_handle->first_sector) * CDIO_CD_FRAMESIZE_RAW;
- readbuf = read_handle->buf_at_sector + skip_bytes;
- bytes_read = CDIO_CD_FRAMESIZE_RAW - skip_bytes;
-
- //g_warning ("read from cache for cursor @ %ld", read_handle->buf_at_sector_num);
- }
- else
- {
- /* first check that we're at the right sector */
- if (desired_sector != read_handle->sector_cursor)
- {
- cdio_paranoia_seek (read_handle->paranoia, desired_sector, SEEK_SET);
- read_handle->sector_cursor = desired_sector;
- //g_warning ("seeking cursor to %ld", read_handle->sector_cursor);
- }
-
- /* skip some bytes */
- skip_bytes = cursor_in_stream - (read_handle->sector_cursor - read_handle->first_sector) * CDIO_CD_FRAMESIZE_RAW;
- //g_warning ("advanced cursor to %ld", read_handle->sector_cursor);
-
- readbuf = (char *) cdio_paranoia_read (read_handle->paranoia, paranoia_callback);
-
- if (readbuf == NULL)
- {
- int errsv = errno;
-
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- g_io_error_from_errno (errsv),
- /* Translators: paranoia is the name of the cd audio reading library */
- _("Error from 'paranoia' on drive %s"), cdda_backend->device_path);
- return;
- }
-
- read_handle->buf_at_sector_num = read_handle->sector_cursor;
- memcpy (read_handle->buf_at_sector, readbuf, CDIO_CD_FRAMESIZE_RAW);
-
- read_handle->sector_cursor++;
-
- readbuf += skip_bytes;
- bytes_read = CDIO_CD_FRAMESIZE_RAW - skip_bytes;
-
-
- }
-
- read_data_done:
-
- bytes_to_copy = bytes_read;
- if (bytes_requested < bytes_read)
- bytes_to_copy = bytes_requested;
-
- read_handle->cursor += bytes_to_copy;
- cursor_in_stream = read_handle->cursor - read_handle->header_size;
-
-
- if (bytes_to_copy > 0 && readbuf != NULL)
- memcpy (buffer, readbuf, bytes_to_copy);
-
- g_vfs_job_read_set_size (job, bytes_to_copy);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static void
-do_seek_on_read (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle handle,
- goffset offset,
- GSeekType type)
-{
- GVfsBackendCdda *cdda_backend = G_VFS_BACKEND_CDDA (backend);
- ReadHandle *read_handle = (ReadHandle *) handle;
- long new_offset;
-
- //g_warning ("seek_on_read (%d, %d)", (int)offset, type);
-
- switch (type)
- {
- default:
- case G_SEEK_SET:
- new_offset = offset;
- break;
- case G_SEEK_CUR:
- new_offset = read_handle->cursor + offset;
- break;
- case G_SEEK_END:
- new_offset = read_handle->size + offset;
- break;
- }
-
- if (new_offset < 0 || new_offset >= read_handle->size)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_FAILED,
- _("Error seeking in stream on drive %s"), cdda_backend->device_path);
- }
- else
- {
- read_handle->cursor = new_offset;
-
- g_vfs_job_seek_read_set_offset (job, offset);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-
-}
-
-static void
-do_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle handle)
-{
- ReadHandle *read_handle = (ReadHandle *) handle;
- GVfsBackendCdda *cdda_backend = G_VFS_BACKEND_CDDA (backend);
-
- //g_warning ("close ()");
-
- free_read_handle (read_handle);
-
- cdda_backend->num_open_files--;
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static void
-set_info_for_track (GVfsBackendCdda *cdda_backend, GFileInfo *info, int track_num)
-{
- char *header;
- long first;
- long last;
- long header_size;
- long content_size;
- GIcon *icon;
-
- first = cdio_cddap_track_firstsector (cdda_backend->drive, track_num);
- last = cdio_cddap_track_lastsector (cdda_backend->drive, track_num);
- content_size = (last - first + 1) * CDIO_CD_FRAMESIZE_RAW;
-
- header = create_header (cdda_backend, &header_size, content_size);
- g_free (header);
-
- //g_warning ("size=%ld for track %d", size, track_num);
-
- g_file_info_set_file_type (info, G_FILE_TYPE_REGULAR);
- g_file_info_set_content_type (info, "audio/x-wav");
- g_file_info_set_size (info, header_size + content_size);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, TRUE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME, FALSE);
-
- icon = g_themed_icon_new ("audio-x-generic");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
-
-}
-
-static void
-do_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- GVfsBackendCdda *cdda_backend = G_VFS_BACKEND_CDDA (backend);
- int track_num;
- GError *error;
-
- //g_warning ("get_file_info (%s)", filename);
-
- if (strcmp (filename, "/") == 0)
- {
- GIcon *icon;
- g_file_info_set_display_name (info, _("Audio Disc")); /* TODO: fill in from metadata */
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
- g_file_info_set_content_type (info, "inode/directory");
- g_file_info_set_size (info, 0);
- icon = g_themed_icon_new ("folder");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- }
- else
- {
- g_file_info_set_name (info, filename);
- g_file_info_set_display_name (info, filename);
-
- track_num = get_track_num_from_name (cdda_backend, filename);
- if (track_num == -1)
- {
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("No such file"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- return;
- }
-
- if (track_num > cdda_backend->drive->tracks)
- {
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("File doesn't exist"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- return;
- }
-
- if (! cdio_cddap_track_audiop (cdda_backend->drive, track_num))
- {
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("The file does not exist or isn't an audio track"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- return;
- }
-
- set_info_for_track (cdda_backend, info, track_num);
- }
-
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static void
-do_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *matcher,
- GFileQueryInfoFlags flags)
-{
- GVfsBackendCdda *cdda_backend = G_VFS_BACKEND_CDDA (backend);
- GFileInfo *info;
- GList *l;
- int n;
-
- //g_warning ("enumerate (%s)", filename);
-
- l = NULL;
- for (n = 1; n <= cdda_backend->drive->tracks; n++)
- {
- char *name;
-
- /* not audio track */
- if (! cdio_cddap_track_audiop (cdda_backend->drive, n))
- continue;
-
- info = g_file_info_new ();
-
- name = g_strdup_printf ("Track %d.wav", n);
- g_file_info_set_name (info, name);
- g_file_info_set_display_name (info, name);
- g_free (name);
-
- set_info_for_track (cdda_backend, info, n);
-
- l = g_list_append (l, info);
- }
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- g_vfs_job_enumerate_add_infos (job, l);
- g_list_foreach (l, (GFunc) g_object_unref, NULL);
- g_list_free (l);
-
- g_vfs_job_enumerate_done (job);
-}
-
-static void
-do_query_fs_info (GVfsBackend *backend,
- GVfsJobQueryFsInfo *job,
- const char *filename,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher)
-{
- GVfsBackendCdda *cdda_backend = G_VFS_BACKEND_CDDA (backend);
-
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE, "cdda");
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, TRUE);
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW, G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL);
-
- if (cdda_backend->size > 0)
- {
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_FILESYSTEM_SIZE,
- cdda_backend->size);
- }
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_FILESYSTEM_FREE,
- 0);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-
-static void
-g_vfs_backend_cdda_class_init (GVfsBackendCddaClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_cdda_finalize;
-
- backend_class->try_mount = try_mount;
- backend_class->mount = do_mount;
- backend_class->unmount = do_unmount;
- backend_class->open_for_read = do_open_for_read;
- backend_class->read = do_read;
- backend_class->seek_on_read = do_seek_on_read;
- backend_class->close_read = do_close_read;
- backend_class->query_info = do_query_info;
- backend_class->query_fs_info = do_query_fs_info;
- backend_class->enumerate = do_enumerate;
-}
-
-void
-g_vfs_cdda_daemon_init (void)
-{
- g_set_application_name (_("Audio CD Filesystem Service"));
-}
diff --git a/daemon/gvfsbackendcdda.h b/daemon/gvfsbackendcdda.h
deleted file mode 100644
index 4abba370..00000000
--- a/daemon/gvfsbackendcdda.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_CDDA_H__
-#define __G_VFS_BACKEND_CDDA_H__
-
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_CDDA (g_vfs_backend_cdda_get_type ())
-#define G_VFS_BACKEND_CDDA(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_CDDA, GVfsBackendCdda))
-#define G_VFS_BACKEND_CDDA_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_CDDA, GVfsBackendCddaClass))
-#define G_VFS_IS_BACKEND_CDDA(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_CDDA))
-#define G_VFS_IS_BACKEND_CDDA_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_CDDA))
-#define G_VFS_BACKEND_CDDA_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_CDDA, GVfsBackendCddaClass))
-
-typedef struct _GVfsBackendCdda GVfsBackendCdda;
-typedef struct _GVfsBackendCddaClass GVfsBackendCddaClass;
-
-struct _GVfsBackendCddaClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_cdda_get_type (void) G_GNUC_CONST;
-
-GVfsBackendCdda *g_vfs_backend_cdda_new (void);
-
-#define BACKEND_SETUP_FUNC g_vfs_cdda_daemon_init
-void g_vfs_cdda_daemon_init (void);
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_CDDA_H__ */
diff --git a/daemon/gvfsbackendcomputer.c b/daemon/gvfsbackendcomputer.c
deleted file mode 100644
index e9cb4927..00000000
--- a/daemon/gvfsbackendcomputer.c
+++ /dev/null
@@ -1,1126 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Alexander Larsson <alexl@redhat.com>
- * Cosimo Cecchi <cosimoc@gnome.org>
- */
-
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-#include <gio/gunixmounts.h>
-#include <glib/gurifuncs.h>
-
-#include "gvfsbackendcomputer.h"
-#include "gvfsmonitor.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobclosewrite.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobmountmountable.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobdelete.h"
-#include "gvfsjobqueryfsinfo.h"
-#include "gvfsjobqueryattributes.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsjobcreatemonitor.h"
-#include "gvfsdaemonprotocol.h"
-
-typedef struct {
- char *filename;
- char *display_name;
- GIcon *icon;
- GFile *root;
- int prio;
- gboolean can_mount;
- gboolean can_unmount;
- gboolean can_eject;
-
- GDrive *drive;
- GVolume *volume;
- GMount *mount;
-} ComputerFile;
-
-static ComputerFile root = { "/" };
-
-struct _GVfsBackendComputer
-{
- GVfsBackend parent_instance;
-
- GVolumeMonitor *volume_monitor;
-
- GVfsMonitor *root_monitor;
-
- GList *files;
-
- guint recompute_idle_tag;
-
- GMountSpec *mount_spec;
-};
-
-G_DEFINE_TYPE (GVfsBackendComputer, g_vfs_backend_computer, G_VFS_TYPE_BACKEND)
-
-static void
-computer_file_free (ComputerFile *file)
-{
- g_free (file->filename);
- g_free (file->display_name);
- if (file->icon)
- g_object_unref (file->icon);
- if (file->root)
- g_object_unref (file->root);
-
- if (file->drive)
- g_object_unref (file->drive);
- if (file->volume)
- g_object_unref (file->volume);
- if (file->mount)
- g_object_unref (file->mount);
-
- g_slice_free (ComputerFile, file);
-}
-
-/* Assumes filename equal */
-static gboolean
-computer_file_equal (ComputerFile *a,
- ComputerFile *b)
-{
- if (strcmp (a->display_name, b->display_name) != 0)
- return FALSE;
-
- if (!g_icon_equal (a->icon, b->icon))
- return FALSE;
-
- if ((a->root != NULL && b->root != NULL &&
- !g_file_equal (a->root, b->root)) ||
- (a->root != NULL && b->root == NULL) ||
- (a->root == NULL && b->root != NULL))
- return FALSE;
-
- if (a->prio != b->prio)
- return FALSE;
-
- if (a->can_mount != b->can_mount ||
- a->can_unmount != b->can_unmount ||
- a->can_eject != b->can_eject)
- return FALSE;
-
- return TRUE;
-}
-
-static void object_changed (GVolumeMonitor *monitor,
- gpointer object,
- GVfsBackendComputer *backend);
-
-static void
-g_vfs_backend_computer_finalize (GObject *object)
-{
- GVfsBackendComputer *backend;
-
- backend = G_VFS_BACKEND_COMPUTER (object);
-
- if (backend->volume_monitor)
- {
- g_signal_handlers_disconnect_by_func(backend->volume_monitor, object_changed, backend);
- g_object_unref (backend->volume_monitor);
- }
-
- g_mount_spec_unref (backend->mount_spec);
-
- if (backend->recompute_idle_tag)
- {
- g_source_remove (backend->recompute_idle_tag);
- backend->recompute_idle_tag = 0;
- }
-
- g_object_unref (backend->root_monitor);
-
- if (G_OBJECT_CLASS (g_vfs_backend_computer_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_computer_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_computer_init (GVfsBackendComputer *computer_backend)
-{
- GVfsBackend *backend = G_VFS_BACKEND (computer_backend);
- GMountSpec *mount_spec;
-
- g_vfs_backend_set_display_name (backend, _("Computer"));
- g_vfs_backend_set_icon_name (backend, "computer");
- g_vfs_backend_set_user_visible (backend, FALSE);
-
- mount_spec = g_mount_spec_new ("computer");
- g_vfs_backend_set_mount_spec (backend, mount_spec);
- computer_backend->mount_spec = mount_spec;
-}
-
-static gboolean
-filename_is_used (GList *files, const char *filename)
-{
- ComputerFile *file;
-
- while (files != NULL)
- {
- file = files->data;
-
- if (file->filename == NULL)
- return FALSE;
-
- if (strcmp (file->filename, filename) == 0)
- return TRUE;
-
- files = files->next;
- }
- return FALSE;
-}
-
-static int
-sort_file_by_filename (ComputerFile *a, ComputerFile *b)
-{
- return strcmp (a->filename, b->filename);
-}
-
-static void
-convert_slashes (char *str)
-{
- char *s;
-
- while ((s = strchr (str, '/')) != NULL)
- *s = '\\';
-}
-
-static void
-update_from_files (GVfsBackendComputer *backend,
- GList *files)
-{
- GList *old_files;
- GList *oldl, *newl;
- char *filename;
- ComputerFile *old, *new;
- int cmp;
-
- old_files = backend->files;
- backend->files = files;
-
- /* Generate change events */
- oldl = old_files;
- newl = files;
- while (oldl != NULL || newl != NULL)
- {
- if (oldl == NULL)
- {
- cmp = 1;
- new = newl->data;
- old = NULL;
- }
- else if (newl == NULL)
- {
- cmp = -1;
- new = NULL;
- old = oldl->data;
- }
- else
- {
- new = newl->data;
- old = oldl->data;
- cmp = strcmp (old->filename, new->filename);
- }
-
- if (cmp == 0)
- {
- if (!computer_file_equal (old, new))
- {
- filename = g_strconcat ("/", new->filename, NULL);
- g_vfs_monitor_emit_event (backend->root_monitor,
- G_FILE_MONITOR_EVENT_CHANGED,
- filename,
- NULL);
- g_free (filename);
- }
-
- oldl = oldl->next;
- newl = newl->next;
- }
- else if (cmp < 0)
- {
- filename = g_strconcat ("/", old->filename, NULL);
- g_vfs_monitor_emit_event (backend->root_monitor,
- G_FILE_MONITOR_EVENT_DELETED,
- filename,
- NULL);
- g_free (filename);
- oldl = oldl->next;
- }
- else
- {
- filename = g_strconcat ("/", new->filename, NULL);
- g_vfs_monitor_emit_event (backend->root_monitor,
- G_FILE_MONITOR_EVENT_CREATED,
- filename,
- NULL);
- g_free (filename);
- newl = newl->next;
- }
- }
-
- g_list_foreach (old_files, (GFunc)computer_file_free, NULL);
-}
-
-static void
-recompute_files (GVfsBackendComputer *backend)
-{
- GVolumeMonitor *volume_monitor;
- GList *drives, *volumes, *mounts, *l, *ll;
- GDrive *drive;
- GVolume *volume;
- GMount *mount;
- ComputerFile *file;
- GList *files;
- char *basename, *filename;
- const char *extension;
- int uniq;
-
- volume_monitor = backend->volume_monitor;
-
- files = NULL;
-
- /* first go through all connected drives */
- drives = g_volume_monitor_get_connected_drives (volume_monitor);
- for (l = drives; l != NULL; l = l->next)
- {
- drive = l->data;
-
- volumes = g_drive_get_volumes (drive);
- if (volumes != NULL)
- {
- for (ll = volumes; ll != NULL; ll = ll->next)
- {
- volume = ll->data;
-
- file = g_slice_new0 (ComputerFile);
- file->drive = g_object_ref (drive);
- file->volume = volume; /* Takes ref */
- file->mount = g_volume_get_mount (volume);
- file->prio = -3;
- files = g_list_prepend (files, file);
- }
- }
- else
- {
- /* No volume, single drive */
-
- file = g_slice_new0 (ComputerFile);
- file->drive = g_object_ref (drive);
- file->volume = NULL;
- file->mount = NULL;
- file->prio = -3;
-
- files = g_list_prepend (files, file);
- }
-
- g_object_unref (drive);
- }
- g_list_free (drives);
-
- /* add all volumes that is not associated with a drive */
- volumes = g_volume_monitor_get_volumes (volume_monitor);
- for (l = volumes; l != NULL; l = l->next)
- {
- volume = l->data;
- drive = g_volume_get_drive (volume);
- if (drive == NULL)
- {
- file = g_slice_new0 (ComputerFile);
- file->drive = NULL;
- file->volume = g_object_ref (volume);
- file->mount = g_volume_get_mount (volume);
- file->prio = -2;
-
- files = g_list_prepend (files, file);
- }
- else
- g_object_unref (drive);
-
- g_object_unref (volume);
- }
- g_list_free (volumes);
-
- /* add mounts that has no volume (/etc/mtab mounts, ftp, sftp,...) */
- mounts = g_volume_monitor_get_mounts (volume_monitor);
- for (l = mounts; l != NULL; l = l->next)
- {
- mount = l->data;
- volume = g_mount_get_volume (mount);
- if (volume == NULL)
- {
- file = g_slice_new0 (ComputerFile);
- file->drive = NULL;
- file->volume = NULL;
- file->mount = g_object_ref (mount);
- file->prio = -1;
-
- files = g_list_prepend (files, file);
- }
- else
- g_object_unref (volume);
-
- g_object_unref (mount);
- }
- g_list_free (mounts);
-
- files = g_list_reverse (files);
-
- for (l = files; l != NULL; l = l->next)
- {
- file = l->data;
-
- if (file->mount)
- {
- file->icon = g_mount_get_icon (file->mount);
- file->display_name = g_mount_get_name (file->mount);
- file->root = g_mount_get_root (file->mount);
- file->can_unmount = g_mount_can_unmount (file->mount);
- file->can_eject = g_mount_can_eject (file->mount);
- }
- else if (file->volume)
- {
- file->icon = g_volume_get_icon (file->volume);
- file->display_name = g_volume_get_name (file->volume);
- file->can_mount = g_volume_can_mount (file->volume);
- file->root = NULL;
- file->can_eject = g_volume_can_eject (file->volume);
- }
- else /* drive */
- {
- file->icon = g_drive_get_icon (file->drive);
- file->display_name = g_drive_get_name (file->drive);
- file->can_eject = g_drive_can_eject (file->drive);
- file->can_mount = TRUE;
- }
-
- if (file->drive)
- {
- basename = g_drive_get_name (file->drive);
- extension = ".drive";
- }
- else if (file->volume)
- {
- basename = g_volume_get_name (file->volume);
- extension = ".volume";
- }
- else /* mount */
- {
- basename = g_mount_get_name (file->mount);
- extension = ".mount";
- }
-
- convert_slashes (basename); /* No slashes in filenames */
- uniq = 1;
- filename = g_strconcat (basename, extension, NULL);
- while (filename_is_used (files, filename))
- {
- g_free (filename);
- filename = g_strdup_printf ("%s-%d%s",
- basename,
- uniq++,
- extension);
- }
-
- g_free (basename);
- file->filename = filename;
- }
-
- file = g_slice_new0 (ComputerFile);
- file->filename = g_strdup ("root.link");
- file->display_name = g_strdup (_("Filesystem"));
- file->icon = g_themed_icon_new ("drive-harddisk");
- file->root = g_file_new_for_path ("/");
- file->prio = 0;
-
- files = g_list_prepend (files, file);
-
- files = g_list_sort (files, (GCompareFunc)sort_file_by_filename);
-
- update_from_files (backend, files);
-}
-
-static gboolean
-recompute_files_in_idle (GVfsBackendComputer *backend)
-{
- backend->recompute_idle_tag = 0;
-
- recompute_files (backend);
-
- return FALSE;
-}
-
-static void
-object_changed (GVolumeMonitor *monitor,
- gpointer object,
- GVfsBackendComputer *backend)
-{
- if (backend->recompute_idle_tag == 0)
- backend->recompute_idle_tag =
- g_idle_add ((GSourceFunc)recompute_files_in_idle,
- backend);
-}
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendComputer *computer_backend = G_VFS_BACKEND_COMPUTER (backend);
- int i;
- char *signals[] = {
- "volume-added",
- "volume-removed",
- "volume-changed",
- "mount-added",
- "mount-removed",
- "mount-changed",
- "drive-connected",
- "drive-disconnected",
- "drive-changed",
- NULL
- };
-
- computer_backend->volume_monitor = g_volume_monitor_get ();
-
- /* TODO: connect all signals to object_changed */
-
- for (i = 0; signals[i] != NULL; i++)
- g_signal_connect_data (computer_backend->volume_monitor,
- signals[i],
- (GCallback)object_changed,
- backend,
- NULL, 0);
-
- computer_backend->root_monitor = g_vfs_monitor_new (backend);
-
- recompute_files (computer_backend);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- return TRUE;
-}
-
-static ComputerFile *
-lookup (GVfsBackendComputer *backend,
- GVfsJob *job,
- const char *filename)
-{
- GList *l;
- ComputerFile *file;
-
- if (*filename != '/')
- goto out;
-
- while (*filename == '/')
- filename++;
-
- if (*filename == 0)
- return &root;
-
- if (strchr (filename, '/') != NULL)
- goto out;
-
- for (l = backend->files; l != NULL; l = l->next)
- {
- file = l->data;
-
- if (strcmp (file->filename, filename) == 0)
- return file;
- }
-
- out:
- g_vfs_job_failed (job, G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("File doesn't exist"));
- return NULL;
-}
-
-
-static gboolean
-try_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- ComputerFile *file;
-
- file = lookup (G_VFS_BACKEND_COMPUTER (backend),
- G_VFS_JOB (job), filename);
-
- if (file == &root)
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_IS_DIRECTORY,
- _("Can't open directory"));
- else if (file != NULL)
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Can't open mountable file"));
- return TRUE;
-}
-
-static void
-file_info_from_file (ComputerFile *file,
- GFileInfo *info)
-{
- char *uri;
-
- g_file_info_set_name (info, file->filename);
- g_file_info_set_display_name (info, file->display_name);
-
- if (file->icon)
- g_file_info_set_icon (info, file->icon);
-
- if (file->root)
- {
- uri = g_file_get_uri (file->root);
-
- g_file_info_set_attribute_string (info,
- G_FILE_ATTRIBUTE_STANDARD_TARGET_URI,
- uri);
- g_free (uri);
- }
-
- g_file_info_set_sort_order (info, file->prio);
-
- g_file_info_set_file_type (info, G_FILE_TYPE_MOUNTABLE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT, file->can_mount);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT, file->can_unmount);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT, file->can_eject);
-
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
-}
-
-static gboolean
-try_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *attribute_matcher,
- GFileQueryInfoFlags flags)
-{
- ComputerFile *file;
- GList *l;
- GFileInfo *info;
-
- file = lookup (G_VFS_BACKEND_COMPUTER (backend),
- G_VFS_JOB (job), filename);
-
- if (file != &root)
- {
- if (file != NULL)
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_DIRECTORY,
- _("The file is not a directory"));
- return TRUE;
- }
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- /* Enumerate root */
- for (l = G_VFS_BACKEND_COMPUTER (backend)->files; l != NULL; l = l->next)
- {
- file = l->data;
-
- info = g_file_info_new ();
-
- file_info_from_file (file, info);
- g_vfs_job_enumerate_add_info (job, info);
- g_object_unref (info);
- }
-
- g_vfs_job_enumerate_done (job);
-
- return TRUE;
-}
-
-static gboolean
-try_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- ComputerFile *file;
-
- file = lookup (G_VFS_BACKEND_COMPUTER (backend),
- G_VFS_JOB (job), filename);
-
- if (file == &root)
- {
- GIcon *icon;
-
- g_file_info_set_name (info, "/");
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
- g_file_info_set_display_name (info, _("Computer"));
- icon = g_themed_icon_new ("computer");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_content_type (info, "inode/directory");
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else if (file != NULL)
- {
- file_info_from_file (file, info);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-
- return TRUE;
-}
-
-static gboolean
-try_create_dir_monitor (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags)
-{
- ComputerFile *file;
- GVfsBackendComputer *computer_backend;
-
- computer_backend = G_VFS_BACKEND_COMPUTER (backend);
-
- file = lookup (computer_backend,
- G_VFS_JOB (job), filename);
-
- if (file != &root)
- {
- if (file != NULL)
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Can't open mountable file"));
-
- return TRUE;
- }
-
- g_vfs_job_create_monitor_set_monitor (job,
- computer_backend->root_monitor);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- return TRUE;
-}
-
-static void
-mount_volume_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GVfsJobMountMountable *job = user_data;
- GError *error;
- GMount *mount;
- GVolume *volume;
- GFile *root;
- char *uri;
-
- volume = G_VOLUME (source_object);
-
- /* TODO: We're leaking the GMountOperation here */
-
- error = NULL;
- if (g_volume_mount_finish (volume, res, &error))
- {
- mount = g_volume_get_mount (volume);
-
- if (mount)
- {
- root = g_mount_get_root (mount);
- uri = g_file_get_uri (root);
- g_vfs_job_mount_mountable_set_target_uri (job,
- uri,
- FALSE);
- g_free (uri);
- g_object_unref (root);
- g_object_unref (mount);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_FAILED,
- _("Internal error: %s"), "No mount object for mounted volume");
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-}
-
-static void
-mount_volume_from_drive (GDrive *drive,
- GVfsJob *job,
- GMountOperation *mount_op)
-{
- GList *volumes;
- GVolume *volume;
-
- volumes = g_drive_get_volumes (drive);
- if (volumes)
- {
- volume = G_VOLUME (volumes->data);
- g_volume_mount (volume,
- 0,
- mount_op,
- G_VFS_JOB (job)->cancellable,
- mount_volume_cb,
- job);
- }
- else
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Can't mount file"));
- }
-
- g_list_foreach (volumes, (GFunc)g_object_unref, NULL);
- g_list_free (volumes);
-}
-
-static void
-report_no_media_error (GVfsJob *job)
-{
- g_vfs_job_failed (job, G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("No media in the drive"));
-}
-
-typedef struct {
- GVfsJobMountMountable *job;
- GMountOperation *mount_op;
-} PollForMediaData;
-
-static void
-poll_for_media_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- PollForMediaData *data = user_data;
- GDrive *drive;
- GError *error;
-
- drive = G_DRIVE (source_object);
- error = NULL;
-
- if (g_drive_poll_for_media_finish (drive, res, &error))
- {
- gboolean has_media;
- has_media = g_drive_has_media (drive);
-
- if (!has_media)
- {
- report_no_media_error (G_VFS_JOB (data->job));
- }
- else
- {
- mount_volume_from_drive (drive, G_VFS_JOB (data->job), data->mount_op);
- g_slice_free (PollForMediaData, data);
- }
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (data->job), error);
- g_error_free (error);
- }
-}
-
-static gboolean
-try_mount_mountable (GVfsBackend *backend,
- GVfsJobMountMountable *job,
- const char *filename,
- GMountSource *mount_source)
-{
- ComputerFile *file;
- GMountOperation *mount_op;
-
- file = lookup (G_VFS_BACKEND_COMPUTER (backend),
- G_VFS_JOB (job), filename);
-
- if (file == &root)
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_MOUNTABLE_FILE,
- _("Not a mountable file"));
- else if (file != NULL)
- {
- if (file->volume)
- {
- mount_op = g_mount_source_get_operation (mount_source);
- g_volume_mount (file->volume,
- 0,
- mount_op,
- G_VFS_JOB (job)->cancellable,
- mount_volume_cb,
- job);
- }
-
- else if (file->drive)
- {
- if (!g_drive_has_media (file->drive))
- {
- if (!g_drive_can_poll_for_media (file->drive))
- report_no_media_error (G_VFS_JOB (job));
- else
- {
- PollForMediaData *data;
-
- data = g_slice_new0 (PollForMediaData);
- mount_op = g_mount_source_get_operation (mount_source);
- data->job = job;
- data->mount_op = mount_op;
- if (!g_drive_is_media_check_automatic (file->drive))
- g_drive_poll_for_media (file->drive,
- G_VFS_JOB (job)->cancellable,
- poll_for_media_cb,
- data);
- else
- report_no_media_error (G_VFS_JOB (job));
- }
- }
- else
- {
- mount_op = g_mount_source_get_operation (mount_source);
- mount_volume_from_drive (file->drive, G_VFS_JOB (job), mount_op);
- }
- }
-
- else
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Can't mount file"));
- }
- }
-
- return TRUE;
-}
-
-static void
-unmount_mount_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GVfsJobMountMountable *job = user_data;
- GError *error;
- GMount *mount;
-
- mount = G_MOUNT (source_object);
-
- error = NULL;
- if (g_mount_unmount_finish (mount, res, &error))
- g_vfs_job_succeeded (G_VFS_JOB (job));
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-}
-
-
-static gboolean
-try_unmount_mountable (GVfsBackend *backend,
- GVfsJobUnmountMountable *job,
- const char *filename,
- GMountUnmountFlags flags)
-{
- ComputerFile *file;
-
- file = lookup (G_VFS_BACKEND_COMPUTER (backend),
- G_VFS_JOB (job), filename);
-
- if (file == &root)
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_MOUNTABLE_FILE,
- _("Not a mountable file"));
- else if (file != NULL)
- {
- if (file->mount)
- {
- g_mount_unmount (file->mount,
- flags,
- G_VFS_JOB (job)->cancellable,
- unmount_mount_cb,
- job);
- }
- else
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Can't unmount file"));
- }
- }
-
- return TRUE;
-}
-
-static void
-eject_mount_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GVfsJobMountMountable *job = user_data;
- GError *error;
- GMount *mount;
-
- mount = G_MOUNT (source_object);
-
- error = NULL;
- if (g_mount_eject_finish (mount, res, &error))
- g_vfs_job_succeeded (G_VFS_JOB (job));
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-}
-
-static void
-eject_volume_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GVfsJobMountMountable *job = user_data;
- GError *error;
- GVolume *volume;
-
- volume = G_VOLUME (source_object);
-
- error = NULL;
- if (g_volume_eject_finish (volume, res, &error))
- g_vfs_job_succeeded (G_VFS_JOB (job));
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-}
-
-
-static void
-eject_drive_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GVfsJobMountMountable *job = user_data;
- GError *error;
- GDrive *drive;
-
- drive = G_DRIVE (source_object);
-
- error = NULL;
- if (g_drive_eject_finish (drive, res, &error))
- g_vfs_job_succeeded (G_VFS_JOB (job));
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-}
-
-static gboolean
-try_eject_mountable (GVfsBackend *backend,
- GVfsJobUnmountMountable *job,
- const char *filename,
- GMountUnmountFlags flags)
-{
- ComputerFile *file;
-
- file = lookup (G_VFS_BACKEND_COMPUTER (backend),
- G_VFS_JOB (job), filename);
-
- if (file == &root)
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_MOUNTABLE_FILE,
- _("Not a mountable file"));
- else if (file != NULL)
- {
- if (file->mount)
- {
- g_mount_eject (file->mount,
- flags,
- G_VFS_JOB (job)->cancellable,
- eject_mount_cb,
- job);
- }
- else if (file->volume)
- {
- g_volume_eject (file->volume,
- flags,
- G_VFS_JOB (job)->cancellable,
- eject_volume_cb,
- job);
- }
- else if (file->drive)
- {
- g_drive_eject (file->drive,
- flags,
- G_VFS_JOB (job)->cancellable,
- eject_drive_cb,
- job);
- }
- else
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Can't eject file"));
- }
- }
-
- return TRUE;
-}
-
-static void
-g_vfs_backend_computer_class_init (GVfsBackendComputerClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_computer_finalize;
-
- backend_class->try_mount = try_mount;
- backend_class->try_open_for_read = try_open_for_read;
- backend_class->try_query_info = try_query_info;
- backend_class->try_enumerate = try_enumerate;
- backend_class->try_create_dir_monitor = try_create_dir_monitor;
- backend_class->try_mount_mountable = try_mount_mountable;
- backend_class->try_unmount_mountable = try_unmount_mountable;
- backend_class->try_eject_mountable = try_eject_mountable;
-}
diff --git a/daemon/gvfsbackendcomputer.h b/daemon/gvfsbackendcomputer.h
deleted file mode 100644
index 03d781df..00000000
--- a/daemon/gvfsbackendcomputer.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_COMPUTER_H__
-#define __G_VFS_BACKEND_COMPUTER_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_COMPUTER (g_vfs_backend_computer_get_type ())
-#define G_VFS_BACKEND_COMPUTER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_COMPUTER, GVfsBackendComputer))
-#define G_VFS_BACKEND_COMPUTER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_COMPUTER, GVfsBackendComputerClass))
-#define G_VFS_IS_BACKEND_COMPUTER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_COMPUTER))
-#define G_VFS_IS_BACKEND_COMPUTER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_COMPUTER))
-#define G_VFS_BACKEND_COMPUTER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_COMPUTER, GVfsBackendComputerClass))
-
-typedef struct _GVfsBackendComputer GVfsBackendComputer;
-typedef struct _GVfsBackendComputerClass GVfsBackendComputerClass;
-
-struct _GVfsBackendComputerClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_computer_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_COMPUTER_H__ */
diff --git a/daemon/gvfsbackenddav.c b/daemon/gvfsbackenddav.c
deleted file mode 100644
index 24c2b34c..00000000
--- a/daemon/gvfsbackenddav.c
+++ /dev/null
@@ -1,2160 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Christian Kellner <gicmo@gnome.org>
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include <libsoup/soup.h>
-
-/* LibXML2 includes */
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-
-#include "gvfsbackenddav.h"
-#include "gvfskeyring.h"
-
-#include "gvfsjobmount.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobqueryfsinfo.h"
-#include "gvfsjobqueryattributes.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsdaemonprotocol.h"
-
-#include "soup-input-stream.h"
-#include "soup-output-stream.h"
-
-typedef struct _MountAuthData MountAuthData;
-
-static void mount_auth_info_free (MountAuthData *info);
-
-typedef struct _AuthInfo {
-
- /* for server authentication */
- char *username;
- char *password;
- char *realm;
-
- GPasswordSave pw_save;
-
-} AuthInfo;
-
-struct _MountAuthData {
-
- SoupSession *session;
- GMountSource *mount_source;
-
- AuthInfo server_auth;
- AuthInfo proxy_auth;
-
-};
-
-struct _GVfsBackendDav
-{
- GVfsBackendHttp parent_instance;
-
- MountAuthData auth_info;
-};
-
-G_DEFINE_TYPE (GVfsBackendDav, g_vfs_backend_dav, G_VFS_TYPE_BACKEND_HTTP);
-
-static void
-g_vfs_backend_dav_finalize (GObject *object)
-{
- GVfsBackendDav *dav_backend;
-
- dav_backend = G_VFS_BACKEND_DAV (object);
-
- mount_auth_info_free (&(dav_backend->auth_info));
-
- if (G_OBJECT_CLASS (g_vfs_backend_dav_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_dav_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_dav_init (GVfsBackendDav *backend)
-{
- g_vfs_backend_set_user_visible (G_VFS_BACKEND (backend), TRUE);
-}
-
-/* ************************************************************************* */
-/* Small utility functions */
-
-static inline gboolean
-sm_has_header (SoupMessage *msg, const char *header)
-{
- return soup_message_headers_get (msg->response_headers, header) != NULL;
-}
-
-static char *
-path_get_parent_dir (const char *path)
-{
- char *parent;
- size_t len;
-
- len = strlen (path);
-
- while (len > 0 && path[len - 1] == '/')
- len--;
-
- if (len == 0)
- return NULL;
-
- parent = g_strrstr_len (path, len, "/");
-
- if (parent == NULL)
- return NULL;
-
- return g_strndup (path, (parent - path) + 1);
-}
-
-/* message utility functions */
-
-static void
-message_add_destination_header (SoupMessage *msg,
- SoupURI *uri)
-{
- char *string;
-
- string = soup_uri_to_string (uri, FALSE);
- soup_message_headers_append (msg->request_headers,
- "Destination",
- string);
- g_free (string);
-}
-static void
-message_add_overwrite_header (SoupMessage *msg,
- gboolean overwrite)
-{
- soup_message_headers_append (msg->request_headers,
- "Overwrite",
- overwrite ? "T" : "F");
-}
-
-static void
-message_add_redirect_header (SoupMessage *msg,
- GFileQueryInfoFlags flags)
-{
- const char *header_redirect;
-
- /* RFC 4437 */
- if (flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS)
- header_redirect = "F";
- else
- header_redirect = "T";
-
- soup_message_headers_append (msg->request_headers,
- "Apply-To-Redirect-Ref",
- header_redirect);
-}
-
-static inline gboolean
-str_equal (const char *a, const char *b, gboolean insensitive)
-{
- if (a == NULL || b == NULL)
- return a == b;
-
- return insensitive ? !g_ascii_strcasecmp (a, b) : !strcmp (a, b);
-}
-
-static gboolean
-path_equal (const char *a, const char *b, gboolean relax)
-{
- gboolean res;
- size_t a_len, b_len;
-
- if (relax == FALSE)
- return str_equal (a, b, FALSE);
-
- if (a == NULL || b == NULL)
- return a == b;
-
- a_len = strlen (a);
- b_len = strlen (b);
-
- while (a[a_len - 1] == '/')
- a_len--;
-
- while (b[b_len - 1] == '/')
- b_len--;
-
- if (a_len == b_len)
- res = ! strncmp (a, b, a_len);
- else
- res = FALSE;
-
- return res;
-}
-
-/* Like soup_uri_equal */
-static gboolean
-dav_uri_match (SoupURI *a, SoupURI *b, gboolean relax)
-{
- if (a->scheme != b->scheme ||
- a->port != b->port ||
- ! str_equal (a->user, b->user, FALSE) ||
- ! str_equal (a->password, b->password, FALSE) ||
- ! str_equal (a->host, b->host, TRUE) ||
- ! path_equal (a->path, b->path, relax) ||
- ! str_equal (a->query, b->query, FALSE) ||
- ! str_equal (a->fragment, b->fragment, FALSE))
- return FALSE;
- return TRUE;
-}
-
-static gboolean
-message_should_apply_redir_ref (SoupMessage *msg)
-{
- const char *header;
-
- header = soup_message_headers_get (msg->request_headers,
- "Apply-To-Redirect-Ref");
-
- if (header == NULL || g_ascii_strcasecmp (header, "T"))
- return FALSE;
-
- return TRUE;
-}
-
-/* redirection */
-static void
-redirect_handler (SoupMessage *msg, gpointer user_data)
-{
- SoupSession *session = user_data;
- const char *new_loc;
- SoupURI *new_uri;
- SoupURI *old_uri;
- guint status;
- gboolean redirect;
-
- status = msg->status_code;
- new_loc = soup_message_headers_get (msg->response_headers, "Location");
-
- /* If we don't have a location to redirect to, just fail */
- if (new_loc == NULL)
- return;
-
- new_uri = soup_uri_new_with_base (soup_message_get_uri (msg), new_loc);
- if (new_uri == NULL)
- {
- soup_message_set_status_full (msg,
- SOUP_STATUS_MALFORMED,
- "Invalid Redirect URL");
- return;
- }
-
- old_uri = soup_message_get_uri (msg);
-
- /* Check if this is a trailing slash redirect (i.e. /a/b to /a/b/),
- * redirect it right away
- */
- redirect = dav_uri_match (new_uri, old_uri, TRUE);
-
- if (redirect == TRUE)
- {
- const char *dest;
-
- dest = soup_message_headers_get (msg->request_headers,
- "Destination");
-
- if (dest && g_str_has_suffix (dest, "/") == FALSE)
- {
- char *new_dest = g_strconcat (dest, "/", NULL);
- soup_message_headers_replace (msg->request_headers,
- "Destination",
- new_dest);
- g_free (new_dest);
- }
- }
- else if (message_should_apply_redir_ref (msg))
- {
-
-
- if (status == SOUP_STATUS_MOVED_PERMANENTLY ||
- status == SOUP_STATUS_TEMPORARY_REDIRECT)
- {
-
- /* Only corss-site redirect safe methods */
- if (msg->method == SOUP_METHOD_GET &&
- msg->method == SOUP_METHOD_HEAD &&
- msg->method == SOUP_METHOD_OPTIONS &&
- msg->method == SOUP_METHOD_PROPFIND)
- redirect = TRUE;
- }
-
-#if 0
- else if (msg->status_code == SOUP_STATUS_SEE_OTHER ||
- msg->status_code == SOUP_STATUS_FOUND)
- {
- /* Redirect using a GET */
- g_object_set (msg,
- SOUP_MESSAGE_METHOD, SOUP_METHOD_GET,
- NULL);
- soup_message_set_request (msg, NULL,
- SOUP_MEMORY_STATIC, NULL, 0);
- soup_message_headers_set_encoding (msg->request_headers,
- SOUP_ENCODING_NONE);
- }
-#endif
- /* ELSE:
- *
- * Three possibilities:
- *
- * 1) This was a non-3xx response that happened to
- * have a "Location" header
- * 2) It's a non-redirecty 3xx response (300, 304,
- * 305, 306)
- * 3) It's some newly-defined 3xx response (308+)
- *
- * We ignore all of these cases. In the first two,
- * redirecting would be explicitly wrong, and in the
- * last case, we have no clue if the 3xx response is
- * supposed to be redirecty or non-redirecty. Plus,
- * 2616 says unrecognized status codes should be
- * treated as the equivalent to the x00 code, and we
- * don't redirect on 300, so therefore we shouldn't
- * redirect on 308+ either.
- */
- }
-
- if (redirect)
- {
- soup_message_set_uri (msg, new_uri);
- soup_session_requeue_message (session, msg);
- }
-
- soup_uri_free (new_uri);
-}
-
-static guint
-g_vfs_backend_dav_send_message (GVfsBackend *backend, SoupMessage *message)
-{
- GVfsBackendHttp *http_backend;
- SoupSession *session;
-
- http_backend = G_VFS_BACKEND_HTTP (backend);
- session = http_backend->session;
-
- /* We have our own custom redirect handler */
- soup_message_set_flags (message, SOUP_MESSAGE_NO_REDIRECT);
-
- soup_message_add_header_handler (message, "got_body", "Location",
- G_CALLBACK (redirect_handler), session);
-
- return http_backend_send_message (backend, message);
-}
-
-/* ************************************************************************* */
-/* generic xml parsing functions */
-
-static inline gboolean
-node_has_name (xmlNodePtr node, const char *name)
-{
- g_return_val_if_fail (node != NULL, FALSE);
-
- return ! strcmp ((char *) node->name, name);
-}
-
-static inline gboolean
-node_has_name_ns (xmlNodePtr node, const char *name, const char *ns_href)
-{
- gboolean has_name;
- gboolean has_ns;
-
- g_return_val_if_fail (node != NULL, FALSE);
-
- has_name = has_ns = TRUE;
-
- if (name)
- has_name = node->name && ! strcmp ((char *) node->name, name);
-
- if (ns_href)
- has_ns = node->ns && node->ns->href &&
- ! g_ascii_strcasecmp ((char *) node->ns->href, ns_href);
-
- return has_name && has_ns;
-}
-
-static inline gboolean
-node_is_element (xmlNodePtr node)
-{
- return node->type == XML_ELEMENT_NODE && node->name != NULL;
-}
-
-
-static inline gboolean
-node_is_element_with_name (xmlNodePtr node, const char *name)
-{
- return node->type == XML_ELEMENT_NODE &&
- node->name != NULL &&
- ! strcmp ((char *) node->name, name);
-}
-
-static const char *
-node_get_content (xmlNodePtr node)
-{
- if (node == NULL)
- return NULL;
-
- switch (node->type)
- {
- case XML_ELEMENT_NODE:
- return node_get_content (node->children);
- break;
- case XML_TEXT_NODE:
- return (const char *) node->content;
- break;
- default:
- return NULL;
- }
-}
-
-typedef struct _xmlNodeIter {
-
- xmlNodePtr cur_node;
- xmlNodePtr next_node;
-
- const char *name;
- const char *ns_href;
-
- void *user_data;
-
-} xmlNodeIter;
-
-static xmlNodePtr
-xml_node_iter_next (xmlNodeIter *iter)
-{
- xmlNodePtr node;
-
- while ((node = iter->next_node))
- {
- iter->next_node = node->next;
-
- if (node->type == XML_ELEMENT_NODE) {
- if (node_has_name_ns (node, iter->name, iter->ns_href))
- break;
- }
- }
-
- iter->cur_node = node;
- return node;
-}
-
-static void *
-xml_node_iter_get_user_data (xmlNodeIter *iter)
-{
- return iter->user_data;
-}
-
-static xmlNodePtr
-xml_node_iter_get_current (xmlNodeIter *iter)
-{
- return iter->cur_node;
-}
-
-static xmlDocPtr
-parse_xml (SoupMessage *msg,
- xmlNodePtr *root,
- const char *name,
- GError **error)
-{
- xmlDocPtr doc;
-
- if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("HTTP Error: %s"), msg->reason_phrase);
- return NULL;
- }
-
- doc = xmlReadMemory (msg->response_body->data,
- msg->response_body->length,
- "response.xml",
- NULL,
- XML_PARSE_NONET |
- XML_PARSE_NOWARNING |
- XML_PARSE_NOBLANKS |
- XML_PARSE_NSCLEAN |
- XML_PARSE_NOCDATA |
- XML_PARSE_COMPACT);
- if (doc == NULL)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Could not parse response"));
- return NULL;
- }
-
- *root = xmlDocGetRootElement (doc);
-
- if (*root == NULL || (*root)->children == NULL)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Empty response"));
- xmlFreeDoc (doc);
- return NULL;
- }
-
- if (strcmp ((char *) (*root)->name, name))
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Unexpected reply from server"));
- xmlFreeDoc (doc);
- return NULL;
- }
-
- return doc;
-}
-
-/* ************************************************************************* */
-/* Multistatus parsing code */
-
-typedef struct _Multistatus Multistatus;
-typedef struct _MsResponse MsResponse;
-typedef struct _MsPropstat MsPropstat;
-
-struct _Multistatus {
-
- xmlDocPtr doc;
- xmlNodePtr root;
-
- SoupURI *target;
-
-};
-
-struct _MsResponse {
-
- Multistatus *multistatus;
-
- xmlNodePtr href;
- xmlNodePtr first_propstat;
-};
-
-struct _MsPropstat {
-
- Multistatus *multistatus;
-
- xmlNodePtr prop_node;
- guint status_code;
-
-};
-
-
-static gboolean
-multistatus_parse (SoupMessage *msg, Multistatus *multistatus, GError **error)
-{
- xmlDocPtr doc;
- xmlNodePtr root;
-
- doc = parse_xml (msg, &root, "multistatus", error);
-
- if (doc == NULL)
- return FALSE;
-
- multistatus->doc = doc;
- multistatus->root = root;
- multistatus->target = soup_message_get_uri (msg);
-
- return TRUE;
-}
-
-static void
-multistatus_free (Multistatus *multistatus)
-{
- xmlFreeDoc (multistatus->doc);
-}
-
-static void
-multistatus_get_response_iter (Multistatus *multistatus, xmlNodeIter *iter)
-{
- iter->cur_node = multistatus->root->children;
- iter->next_node = multistatus->root->children;
- iter->name = "response";
- iter->ns_href = "DAV:";
- iter->user_data = multistatus;
-}
-
-static gboolean
-multistatus_get_response (xmlNodeIter *resp_iter, MsResponse *response)
-{
- Multistatus *multistatus;
- xmlNodePtr resp_node;
- xmlNodePtr iter;
- xmlNodePtr href;
- xmlNodePtr propstat;
-
- multistatus = xml_node_iter_get_user_data (resp_iter);
- resp_node = xml_node_iter_get_current (resp_iter);
-
- if (resp_node == NULL)
- return FALSE;
-
- propstat = NULL;
- href = NULL;
-
- for (iter = resp_node->children; iter; iter = iter->next)
- {
- if (! node_is_element (iter))
- {
- continue;
- }
- else if (node_has_name_ns (iter, "href", "DAV:"))
- {
- href = iter;
- }
- else if (node_has_name_ns (iter, "propstat", "DAV:"))
- {
- if (propstat == NULL)
- propstat = iter;
- }
-
- if (href && propstat)
- break;
- }
-
- if (href == NULL)
- return FALSE;
-
- response->href = href;
- response->multistatus = multistatus;
- response->first_propstat = propstat;
-
- return resp_node != NULL;
-}
-
-static char *
-ms_response_get_basename (MsResponse *response)
-{
- const char *text;
- text = node_get_content (response->href);
-
- return http_uri_get_basename (text);
-
-}
-
-static gboolean
-ms_response_is_target (MsResponse *response)
-{
- const char *text;
- const char *path;
- SoupURI *target;
- SoupURI *uri;
- gboolean res;
-
- uri = NULL;
- path = NULL;
- target = response->multistatus->target;
- text = node_get_content (response->href);
-
- if (text == NULL)
- return FALSE;
-
- uri = soup_uri_new_with_base (target, text);
-
- if (uri == NULL)
- return FALSE;
-
- res = dav_uri_match (uri, target, TRUE);
-
- soup_uri_free (uri);
-
- return res;
-}
-
-static void
-ms_response_get_propstat_iter (MsResponse *response, xmlNodeIter *iter)
-{
- iter->cur_node = response->first_propstat;
- iter->next_node = response->first_propstat;
- iter->name = "propstat";
- iter->ns_href = "DAV:";
- iter->user_data = response;
-}
-
-static guint
-ms_response_get_propstat (xmlNodeIter *cur_node, MsPropstat *propstat)
-{
- MsResponse *response;
- xmlNodePtr pstat_node;
- xmlNodePtr iter;
- xmlNodePtr prop;
- xmlNodePtr status;
- const char *status_text;
- gboolean res;
- guint code;
-
- response = xml_node_iter_get_user_data (cur_node);
- pstat_node = xml_node_iter_get_current (cur_node);
-
- if (pstat_node == NULL)
- return 0;
-
- status = NULL;
- prop = NULL;
-
- for (iter = pstat_node->children; iter; iter = iter->next)
- {
- if (!node_is_element (iter))
- {
- continue;
- }
- else if (node_has_name_ns (iter, "status", "DAV:"))
- {
- status = iter;
- }
- else if (node_has_name_ns (iter, "prop", "DAV:"))
- {
- prop = iter;
- }
-
- if (status && prop)
- break;
- }
-
- status_text = node_get_content (status);
-
- if (status_text == NULL || prop == NULL)
- return 0;
-
- res = soup_headers_parse_status_line ((char *) status_text,
- NULL,
- &code,
- NULL);
-
- if (res == FALSE)
- return 0;
-
- propstat->prop_node = prop;
- propstat->status_code = code;
- propstat->multistatus = response->multistatus;
-
- return code;
-}
-
-static GFileType
-parse_resourcetype (xmlNodePtr rt)
-{
- xmlNodePtr node;
- GFileType type;
-
- for (node = rt->children; node; node = node->next)
- {
- if (node_is_element (node))
- break;
- }
-
- if (node == NULL)
- return G_FILE_TYPE_REGULAR;
-
- if (! strcmp ((char *) node->name, "collection"))
- type = G_FILE_TYPE_DIRECTORY;
- else if (! strcmp ((char *) node->name, "redirectref"))
- type = G_FILE_TYPE_SYMBOLIC_LINK;
- else
- type = G_FILE_TYPE_UNKNOWN;
-
- return type;
-}
-
-static inline void
-file_info_set_content_type (GFileInfo *info, const char *type)
-{
- g_file_info_set_content_type (info, type);
- g_file_info_set_attribute_string (info,
- G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE,
- type);
-
-}
-
-static void
-ms_response_to_file_info (MsResponse *response,
- GFileInfo *info)
-{
- xmlNodeIter iter;
- MsPropstat propstat;
- xmlNodePtr node;
- guint status;
- char *basename;
- const char *text;
- GTimeVal tv;
- GFileType file_type;
- char *mime_type;
- GIcon *icon;
- gboolean have_display_name;
-
- basename = ms_response_get_basename (response);
- g_file_info_set_name (info, basename);
- g_file_info_set_edit_name (info, basename);
-
- file_type = G_FILE_TYPE_UNKNOWN;
- mime_type = NULL;
-
- have_display_name = FALSE;
- ms_response_get_propstat_iter (response, &iter);
- while (xml_node_iter_next (&iter))
- {
- status = ms_response_get_propstat (&iter, &propstat);
-
- if (! SOUP_STATUS_IS_SUCCESSFUL (status))
- continue;
-
- for (node = propstat.prop_node->children; node; node = node->next)
- {
- if (! node_is_element (node))
- continue; /* TODO: check namespace, parse user data nodes*/
-
- text = node_get_content (node);
-
- if (node_has_name (node, "resourcetype"))
- {
- file_type = parse_resourcetype (node);
- g_file_info_set_file_type (info, file_type);
- }
- else if (node_has_name (node, "displayname"))
- {
- g_file_info_set_display_name (info, text);
- have_display_name = TRUE;
- }
- else if (node_has_name (node, "getetag"))
- {
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_ETAG_VALUE,
- text);
- }
- else if (node_has_name (node, "creationdate"))
- {
- if (! g_time_val_from_iso8601 (text, &tv))
- continue;
-
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_TIME_CREATED,
- tv.tv_sec);
- }
- else if (node_has_name (node, "getcontenttype"))
- {
- mime_type = g_strdup (text);
- }
- else if (node_has_name (node, "getcontentlength"))
- {
- gint64 size;
- size = g_ascii_strtoll (text, NULL, 10);
- g_file_info_set_size (info, size);
- }
- else if (node_has_name (node, "getlastmodified"))
- {
- SoupDate *sd;
- GTimeVal tv;
- sd = soup_date_new_from_string(text);
- if (sd)
- {
- soup_date_to_timeval (sd, &tv);
- g_file_info_set_modification_time (info, &tv);
- soup_date_free (sd);
- }
- }
- }
- }
-
- if (file_type == G_FILE_TYPE_DIRECTORY)
- {
- icon = g_themed_icon_new ("folder");
- file_info_set_content_type (info, "inode/directory");
- }
- else
- {
- if (mime_type == NULL)
- mime_type = g_content_type_guess (basename, NULL, 0, NULL);
-
- icon = g_content_type_get_icon (mime_type);
-
- if (G_IS_THEMED_ICON (icon))
- g_themed_icon_append_name (G_THEMED_ICON (icon), "text-x-generic");
-
- file_info_set_content_type (info, mime_type);
- }
-
- if (have_display_name == FALSE)
- g_file_info_set_display_name (info, basename);
-
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- g_free (mime_type);
- g_free (basename);
-
-}
-
-static GFileType
-ms_response_to_file_type (MsResponse *response)
-{
- xmlNodeIter prop_iter;
- MsPropstat propstat;
- GFileType file_type;
- guint status;
-
- file_type = G_FILE_TYPE_UNKNOWN;
-
- ms_response_get_propstat_iter (response, &prop_iter);
- while (xml_node_iter_next (&prop_iter))
- {
- xmlNodePtr iter;
-
- status = ms_response_get_propstat (&prop_iter, &propstat);
-
- if (! SOUP_STATUS_IS_SUCCESSFUL (status))
- continue;
-
- for (iter = propstat.prop_node->children; iter; iter = iter->next)
- {
- if (node_is_element (iter) &&
- node_has_name_ns (iter, "resourcetype", "DAV:"))
- break;
- }
-
- if (iter)
- {
- file_type = parse_resourcetype (iter);
- break;
- }
- }
-
- return file_type;
-}
-
-#define PROPSTAT_XML_BEGIN \
- "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" \
- " <D:propfind xmlns:D=\"DAV:\">\n"
-
-#define PROPSTAT_XML_ALLPROP " <D:allprop/>\n"
-#define PROPSTAT_XML_PROP_BEGIN " <D:prop>\n"
-#define PROPSTAT_XML_PROP_END " </D:prop>\n"
-
-#define PROPSTAT_XML_END \
- " </D:propfind>"
-
-typedef struct _PropName {
-
- const char *name;
- const char *namespace;
-
-} PropName;
-
-
-static SoupMessage *
-propfind_request_new (GVfsBackend *backend,
- const char *filename,
- guint depth,
- const PropName *properties)
-{
- SoupMessage *msg;
- SoupURI *uri;
- const char *header_depth;
- GString *body;
-
- uri = http_backend_uri_for_filename (backend, filename, depth > 0);
- msg = soup_message_new_from_uri (SOUP_METHOD_PROPFIND, uri);
- soup_uri_free (uri);
-
- if (msg == NULL)
- return NULL;
-
- if (depth == 0)
- header_depth = "0";
- else if (depth == 1)
- header_depth = "1";
- else
- header_depth = "infinity";
-
- soup_message_headers_append (msg->request_headers, "Depth", header_depth);
-
- body = g_string_new (PROPSTAT_XML_BEGIN);
-
- if (properties != NULL)
- {
- const PropName *prop;
- g_string_append (body, PROPSTAT_XML_PROP_BEGIN);
-
- for (prop = properties; prop->name; prop++)
- {
- if (prop->namespace != NULL)
- g_string_append_printf (body, "<%s xmlns=\"%s\"/>\n",
- prop->name,
- prop->namespace);
- else
- g_string_append_printf (body, "<D:%s/>\n", prop->name);
- }
- g_string_append (body, PROPSTAT_XML_PROP_END);
- }
- else
- g_string_append (body, PROPSTAT_XML_ALLPROP);
-
-
- g_string_append (body, PROPSTAT_XML_END);
-
- soup_message_set_request (msg, "application/xml",
- SOUP_MEMORY_TAKE,
- body->str,
- body->len);
-
- g_string_free (body, FALSE);
-
- return msg;
-}
-
-static SoupMessage *
-stat_location_begin (SoupURI *uri,
- gboolean count_children)
-{
- SoupMessage *msg;
- const char *depth;
- static const char *stat_profind_body =
- PROPSTAT_XML_BEGIN
- PROPSTAT_XML_PROP_BEGIN
- "<D:resourcetype/>\n"
- PROPSTAT_XML_PROP_END
- PROPSTAT_XML_END;
-
- msg = soup_message_new_from_uri (SOUP_METHOD_PROPFIND, uri);
-
- if (count_children)
- depth = "1";
- else
- depth = "0";
-
- soup_message_headers_append (msg->request_headers, "Depth", depth);
-
- soup_message_set_request (msg, "application/xml",
- SOUP_MEMORY_STATIC,
- stat_profind_body,
- strlen (stat_profind_body));
- return msg;
-}
-
-static gboolean
-stat_location_finish (SoupMessage *msg,
- GFileType *target_type,
- guint *num_children)
-{
- Multistatus ms;
- xmlNodeIter iter;
- gboolean res;
- GError *error;
- guint child_count;
- GFileType file_type;
-
- if (msg->status_code != 207)
- return FALSE;
-
- res = multistatus_parse (msg, &ms, &error);
-
- if (res == FALSE)
- return FALSE;
-
- res = FALSE;
- child_count = 0;
- file_type = G_FILE_TYPE_UNKNOWN;
-
- multistatus_get_response_iter (&ms, &iter);
- while (xml_node_iter_next (&iter))
- {
- MsResponse response;
-
- if (! multistatus_get_response (&iter, &response))
- continue;
-
- if (ms_response_is_target (&response))
- {
- file_type = ms_response_to_file_type (&response);
- res = TRUE;
- }
- else
- child_count++;
- }
-
- if (res)
- {
- if (target_type)
- *target_type = file_type;
-
- if (num_children)
- *num_children = child_count;
- }
-
- multistatus_free (&ms);
- return res;
-}
-
-static gboolean
-stat_location (GVfsBackend *backend,
- SoupURI *uri,
- GFileType *target_type,
- guint *num_children,
- GError **error)
-{
- SoupMessage *msg;
- guint status;
- gboolean count_children;
- gboolean res;
-
- count_children = num_children != NULL;
- msg = stat_location_begin (uri, count_children);
-
- if (msg == NULL)
- return FALSE;
-
- status = g_vfs_backend_dav_send_message (backend, msg);
-
- if (status != 207)
- {
- g_set_error_literal (error,
- G_IO_ERROR,
- http_error_code_from_status (status),
- msg->reason_phrase);
-
- return FALSE;
- }
-
- res = stat_location_finish (msg, target_type, num_children);
-
- if (res == FALSE)
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Response invalid"));
-
- return res;
-}
-
-
-/* ************************************************************************* */
-/* Authentication */
-
-static void
-mount_auth_info_free (MountAuthData *data)
-{
- if (data->mount_source)
- g_object_unref (data->mount_source);
-
- g_free (data->server_auth.username);
- g_free (data->server_auth.password);
- g_free (data->server_auth.realm);
-
- g_free (data->proxy_auth.username);
- g_free (data->proxy_auth.password);
-
-}
-
-static void
-soup_authenticate_from_data (SoupSession *session,
- SoupMessage *msg,
- SoupAuth *auth,
- gboolean retrying,
- gpointer user_data)
-{
- MountAuthData *data;
- AuthInfo *info;
-
- g_print ("+ soup_authenticate_from_data (%s) \n",
- retrying ? "retrying" : "first auth");
-
- if (retrying)
- return;
-
- data = (MountAuthData *) user_data;
-
- if (soup_auth_is_for_proxy (auth))
- info = &data->proxy_auth;
- else
- info = &data->server_auth;
-
- soup_auth_authenticate (auth, info->username, info->password);
-}
-
-static void
-soup_authenticate_interactive (SoupSession *session,
- SoupMessage *msg,
- SoupAuth *auth,
- gboolean retrying,
- gpointer user_data)
-{
- MountAuthData *data;
- AuthInfo *info;
- GAskPasswordFlags pw_ask_flags;
- GPasswordSave pw_save;
- const char *realm;
- gboolean res;
- gboolean aborted;
- gboolean is_proxy;
- gboolean have_auth;
- char *new_username;
- char *new_password;
- char *prompt;
-
- g_print ("+ soup_authenticate_interactive (%s) \n",
- retrying ? "retrying" : "first auth");
-
- data = (MountAuthData *) user_data;
-
- new_username = NULL;
- new_password = NULL;
- realm = NULL;
- pw_ask_flags = G_ASK_PASSWORD_NEED_PASSWORD;
-
- is_proxy = soup_auth_is_for_proxy (auth);
- realm = soup_auth_get_realm (auth);
-
- if (is_proxy)
- info = &(data->proxy_auth);
- else
- info = &(data->server_auth);
-
- if (realm && info->realm == NULL)
- info->realm = g_strdup (realm);
- else if (realm && info->realm && !g_str_equal (realm, info->realm))
- return;
-
- have_auth = info->username && info->password;
-
- if (have_auth == FALSE && g_vfs_keyring_is_available ())
- {
- SoupURI *uri;
- SoupURI *uri_free = NULL;
-
- pw_ask_flags |= G_ASK_PASSWORD_SAVING_SUPPORTED;
-
- if (is_proxy)
- {
- g_object_get (session, SOUP_SESSION_PROXY_URI, &uri_free, NULL);
- uri = uri_free;
- }
- else
- uri = soup_message_get_uri (msg);
-
- res = g_vfs_keyring_lookup_password (info->username,
- uri->host,
- NULL,
- "http",
- realm,
- is_proxy ? "proxy" : "basic",
- uri->port,
- &new_username,
- NULL,
- &new_password);
-
- if (res == TRUE)
- {
- have_auth = TRUE;
- g_free (info->username);
- g_free (info->password);
- info->username = new_username;
- info->password = new_password;
- }
-
- if (uri_free)
- soup_uri_free (uri_free);
- }
-
- if (retrying == FALSE && have_auth)
- {
- soup_auth_authenticate (auth, info->username, info->password);
- return;
- }
-
- if (is_proxy == FALSE)
- {
- if (realm == NULL)
- realm = _("WebDAV share");
-
- prompt = g_strdup_printf (_("Enter password for %s"), realm);
- }
- else
- prompt = g_strdup (_("Please enter proxy password"));
-
- if (info->username == NULL)
- pw_ask_flags |= G_ASK_PASSWORD_NEED_USERNAME;
-
- res = g_mount_source_ask_password (data->mount_source,
- prompt,
- info->username,
- NULL,
- pw_ask_flags,
- &aborted,
- &new_password,
- &new_username,
- NULL,
- NULL,
- &pw_save);
-
- if (res && !aborted)
- {
- soup_auth_authenticate (auth, new_username, new_password);
-
- g_free (info->username);
- g_free (info->password);
- info->username = new_username;
- info->password = new_password;
- info->pw_save = pw_save;
- }
- else
- soup_session_cancel_message (session, msg, SOUP_STATUS_CANCELLED);
-
- g_print ("- soup_authenticate \n");
- g_free (prompt);
-}
-
-static void
-keyring_save_authinfo (AuthInfo *info,
- SoupURI *uri,
- gboolean is_proxy)
-{
- const char *type = is_proxy ? "proxy" : "basic";
-
- g_vfs_keyring_save_password (info->username,
- uri->host,
- NULL,
- "http",
- info->realm,
- type,
- uri->port,
- info->password,
- info->pw_save);
-}
-
-/* ************************************************************************* */
-
-static SoupURI *
-g_mount_spec_to_dav_uri (GMountSpec *spec)
-{
- SoupURI *uri;
- const char *host;
- const char *user;
- const char *port;
- const char *ssl;
- gint port_num;
-
- host = g_mount_spec_get (spec, "host");
- user = g_mount_spec_get (spec, "user");
- port = g_mount_spec_get (spec, "port");
- ssl = g_mount_spec_get (spec, "ssl");
-
- if (host == NULL || *host == 0)
- return NULL;
-
- uri = soup_uri_new (NULL);
-
- if (ssl != NULL && (strcmp (ssl, "true") == 0))
- soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTPS);
- else
- soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTP);
-
- soup_uri_set_user (uri, user);
-
- if (port && (port_num = atoi (port)))
- soup_uri_set_port (uri, port_num);
-
- soup_uri_set_host (uri, host);
- soup_uri_set_path (uri, spec->mount_prefix);
-
- return uri;
-}
-
-static GMountSpec *
-g_mount_spec_from_dav_uri (SoupURI *uri)
-{
- GMountSpec *spec;
- const char *ssl;
-
- spec = g_mount_spec_new ("dav");
-
- g_mount_spec_set (spec, "host", uri->host);
-
- if (uri->scheme == SOUP_URI_SCHEME_HTTPS)
- ssl = "true";
- else
- ssl = "false";
-
- g_mount_spec_set (spec, "ssl", ssl);
-
- if (uri->user)
- g_mount_spec_set (spec, "user", uri->user);
-
- if (! soup_uri_uses_default_port (uri))
- {
- char *port = g_strdup_printf ("%u", uri->port);
- g_mount_spec_set (spec, "port", port);
- g_free (port);
- }
-
- g_mount_spec_set_mount_prefix (spec, uri->path);
-
- return spec;
-}
-
-/* ************************************************************************* */
-/* Backend Functions */
-static void
-do_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- MountAuthData *data;
- SoupSession *session;
- SoupMessage *msg_opts;
- SoupMessage *msg_stat;
- SoupURI *mount_base;
- gulong signal_id;
- guint status;
- gboolean is_success;
- gboolean is_webdav;
- gboolean res;
- char *last_good_path;
- char *display_name;
-
- g_print ("+ mount\n");
-
- mount_base = g_mount_spec_to_dav_uri (mount_spec);
-
- if (mount_base == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_INVALID_ARGUMENT,
- _("Invalid mount spec"));
- return;
- }
-
- session = G_VFS_BACKEND_HTTP (backend)->session;
- G_VFS_BACKEND_HTTP (backend)->mount_base = mount_base;
-
- data = &(G_VFS_BACKEND_DAV (backend)->auth_info);
- data->mount_source = g_object_ref (mount_source);
- data->server_auth.username = g_strdup (mount_base->user);
- data->server_auth.pw_save = G_PASSWORD_SAVE_NEVER;
- data->proxy_auth.pw_save = G_PASSWORD_SAVE_NEVER;
-
- signal_id = g_signal_connect (session, "authenticate",
- G_CALLBACK (soup_authenticate_interactive),
- data);
-
- last_good_path = NULL;
- msg_opts = soup_message_new_from_uri (SOUP_METHOD_OPTIONS, mount_base);
- msg_stat = stat_location_begin (mount_base, FALSE);
-
- do {
- status = g_vfs_backend_dav_send_message (backend, msg_opts);
-
- is_success = SOUP_STATUS_IS_SUCCESSFUL (status);
- is_webdav = is_success && sm_has_header (msg_opts, "DAV");
-
- soup_message_headers_clear (msg_opts->response_headers);
- soup_message_body_truncate (msg_opts->response_body);
-
- if (is_webdav)
- {
- GFileType file_type;
- SoupURI *cur_uri;
-
- cur_uri = soup_message_get_uri (msg_opts);
- soup_message_set_uri (msg_stat, cur_uri);
-
- g_vfs_backend_dav_send_message (backend, msg_stat);
- res = stat_location_finish (msg_stat, &file_type, NULL);
-
- if (res && file_type == G_FILE_TYPE_DIRECTORY)
- {
- g_free (last_good_path);
- last_good_path = mount_base->path;
- }
-
- mount_base->path = path_get_parent_dir (mount_base->path);
- soup_message_set_uri (msg_opts, mount_base);
-
- soup_message_headers_clear (msg_stat->response_headers);
- soup_message_body_truncate (msg_stat->response_body);
- }
-
- } while (is_webdav && mount_base->path != NULL);
-
- /* we have reached the end of paths we are allowed to
- * chdir up to (or couldn't chdir up at all) */
-
- /* check if we at all have a good path */
- if (last_good_path == NULL)
- {
-
- /* TODO: set correct error in case of cancellation */
- if (!is_success)
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("HTTP Error: %s"), msg_opts->reason_phrase);
- else if (!is_webdav)
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Not a WebDAV enabled share"));
- else
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Not a WebDAV enabled share"));
-
- /* TODO: We leak a bunch of stuff here :-( */
- /* TODO: STRING CHANGE: change to: Could not find an enclosing directory */
- return;
- }
-
- /* Success! We are mounted */
- /* Save the auth info in the keyring */
-
- keyring_save_authinfo (&(data->server_auth), mount_base, FALSE);
- /* TODO: save proxy auth */
-
- /* Set the working path in mount path */
- g_free (mount_base->path);
- mount_base->path = last_good_path;
-
- /* dup the mountspec, but only copy known fields */
- mount_spec = g_mount_spec_from_dav_uri (mount_base);
-
- g_vfs_backend_set_mount_spec (backend, mount_spec);
- g_vfs_backend_set_icon_name (backend, "folder-remote");
-
- display_name = g_strdup_printf (_("WebDAV on %s"), mount_base->host);
- g_vfs_backend_set_display_name (backend, display_name);
- g_free (display_name);
-
- /* cleanup */
- g_mount_spec_unref (mount_spec);
- g_object_unref (msg_opts);
- g_object_unref (msg_stat);
-
- /* switch the signal handler */
- g_signal_handler_disconnect (session, signal_id);
- g_signal_connect (session, "authenticate",
- G_CALLBACK (soup_authenticate_from_data),
- data);
-
- /* also auth the workaround async session we need for SoupInputStream */
- g_signal_connect (G_VFS_BACKEND_HTTP (backend)->session_async, "authenticate",
- G_CALLBACK (soup_authenticate_from_data),
- data);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- g_print ("- mount\n");
-}
-
-static PropName ls_propnames[] = {
- {"creationdate", NULL},
- {"displayname", NULL},
- {"getcontentlength", NULL},
- {"getcontenttype", NULL},
- {"getetag", NULL},
- {"getlastmodified", NULL},
- {"resourcetype", NULL},
- {NULL, NULL}
-};
-
-/* *** query_info () *** */
-static void
-do_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- SoupMessage *msg;
- Multistatus ms;
- xmlNodeIter iter;
- gboolean res;
- GError *error;
-
- error = NULL;
-
- g_print ("Query info %s\n", filename);
-
- msg = propfind_request_new (backend, filename, 0, ls_propnames);
-
- if (msg == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Could not create request"));
-
- return;
- }
-
- message_add_redirect_header (msg, flags);
-
- g_vfs_backend_dav_send_message (backend, msg);
-
- res = multistatus_parse (msg, &ms, &error);
-
- if (res == FALSE)
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- g_object_unref (msg);
- return;
- }
-
- res = FALSE;
- multistatus_get_response_iter (&ms, &iter);
-
- while (xml_node_iter_next (&iter))
- {
- MsResponse response;
-
- if (! multistatus_get_response (&iter, &response))
- continue;
-
- if (ms_response_is_target (&response))
- {
- ms_response_to_file_info (&response, job->file_info);
- res = TRUE;
- }
- }
-
- multistatus_free (&ms);
- g_object_unref (msg);
-
- if (res)
- g_vfs_job_succeeded (G_VFS_JOB (job));
- else
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Response invalid"));
-
-}
-
-
-/* *** enumerate *** */
-static void
-do_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *matcher,
- GFileQueryInfoFlags flags)
-{
- SoupMessage *msg;
- Multistatus ms;
- xmlNodeIter iter;
- gboolean res;
- GError *error;
-
- error = NULL;
-
- g_print ("+ do_enumerate: %s\n", filename);
-
- msg = propfind_request_new (backend, filename, 1, ls_propnames);
-
- if (msg == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Could not create request"));
-
- return;
- }
-
- message_add_redirect_header (msg, flags);
-
- g_vfs_backend_dav_send_message (backend, msg);
-
- res = multistatus_parse (msg, &ms, &error);
-
- if (res == FALSE)
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- g_object_unref (msg);
- return;
- }
-
- multistatus_get_response_iter (&ms, &iter);
-
- while (xml_node_iter_next (&iter))
- {
- MsResponse response;
- GFileInfo *info;
-
- if (! multistatus_get_response (&iter, &response))
- continue;
-
- if (ms_response_is_target (&response))
- continue;
-
- info = g_file_info_new ();
- ms_response_to_file_info (&response, info);
- g_vfs_job_enumerate_add_info (job, info);
- }
-
- multistatus_free (&ms);
- g_object_unref (msg);
-
- g_vfs_job_succeeded (G_VFS_JOB (job)); /* should that be called earlier? */
- g_vfs_job_enumerate_done (G_VFS_JOB_ENUMERATE (job));
-}
-
-/* ************************************************************************* */
-/* */
-
-/* *** create () *** */
-static void
-try_create_tested_existence (SoupSession *session, SoupMessage *msg,
- gpointer user_data)
-{
- GVfsJob *job = G_VFS_JOB (user_data);
- GVfsBackendHttp *op_backend = job->backend_data;
- GOutputStream *stream;
- SoupMessage *put_msg;
- SoupURI *uri;
-
- if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
- {
- g_vfs_job_failed (job,
- G_IO_ERROR,
- G_IO_ERROR_EXISTS,
- _("Target file already exists"));
- return;
- }
- /* TODO: other errors */
-
- uri = soup_message_get_uri (msg);
- put_msg = soup_message_new_from_uri (SOUP_METHOD_PUT, uri);
-
- /*
- * Doesn't work with apache > 2.2.9
- * soup_message_headers_append (put_msg->request_headers, "If-None-Match", "*");
- */
- stream = soup_output_stream_new (op_backend->session, put_msg, -1);
- g_object_unref (put_msg);
-
- g_vfs_job_open_for_write_set_handle (G_VFS_JOB_OPEN_FOR_WRITE (job), stream);
- g_vfs_job_succeeded (job);
-}
-
-static gboolean
-try_create (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
-{
- SoupMessage *msg;
- SoupURI *uri;
-
- /* TODO: if SoupOutputStream supported chunked requests, we could
- * use a PUT with "If-None-Match: *" and "Expect: 100-continue"
- */
- uri = http_backend_uri_for_filename (backend, filename, FALSE);
- msg = soup_message_new_from_uri (SOUP_METHOD_HEAD, uri);
- soup_uri_free (uri);
-
- g_vfs_job_set_backend_data (G_VFS_JOB (job), backend, NULL);
-
- http_backend_queue_message (backend, msg, try_create_tested_existence, job);
- return TRUE;
-}
-
-/* *** replace () *** */
-static void
-open_for_replace_succeeded (GVfsBackendHttp *op_backend, GVfsJob *job,
- SoupURI *uri, const char *etag)
-{
- SoupMessage *put_msg;
- GOutputStream *stream;
-
- put_msg = soup_message_new_from_uri (SOUP_METHOD_PUT, uri);
-
- if (etag)
- soup_message_headers_append (put_msg->request_headers, "If-Match", etag);
-
- stream = soup_output_stream_new (op_backend->session, put_msg, -1);
- g_object_unref (put_msg);
-
- g_vfs_job_open_for_write_set_handle (G_VFS_JOB_OPEN_FOR_WRITE (job), stream);
- g_vfs_job_succeeded (job);
-}
-
-static void
-try_replace_checked_etag (SoupSession *session, SoupMessage *msg,
- gpointer user_data)
-{
- GVfsJob *job = G_VFS_JOB (user_data);
- GVfsBackendHttp *op_backend = job->backend_data;
-
- if (msg->status_code == SOUP_STATUS_PRECONDITION_FAILED)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_WRONG_ETAG,
- _("The file was externally modified"));
- return;
- }
- /* TODO: other errors */
-
- open_for_replace_succeeded (op_backend, job, soup_message_get_uri (msg),
- soup_message_headers_get (msg->request_headers, "If-Match"));
-}
-
-static gboolean
-try_replace (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- const char *etag,
- gboolean make_backup,
- GFileCreateFlags flags)
-{
- GVfsBackendHttp *op_backend;
- SoupURI *uri;
-
- /* TODO: if SoupOutputStream supported chunked requests, we could
- * use a PUT with "If-Match: ..." and "Expect: 100-continue"
- */
-
- op_backend = G_VFS_BACKEND_HTTP (backend);
-
- if (make_backup)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_CANT_CREATE_BACKUP,
- _("Backup file creation failed"));
- return TRUE;
- }
-
-
-
- uri = http_backend_uri_for_filename (backend, filename, FALSE);
-
- if (etag)
- {
- SoupMessage *msg;
-
- msg = soup_message_new_from_uri (SOUP_METHOD_HEAD, uri);
- soup_uri_free (uri);
- soup_message_headers_append (msg->request_headers, "If-Match", etag);
-
- g_vfs_job_set_backend_data (G_VFS_JOB (job), op_backend, NULL);
- soup_session_queue_message (op_backend->session, msg,
- try_replace_checked_etag, job);
- return TRUE;
- }
-
- open_for_replace_succeeded (op_backend, G_VFS_JOB (job), uri, NULL);
- soup_uri_free (uri);
- return TRUE;
-}
-
-/* *** write () *** */
-static void
-write_ready (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GOutputStream *stream;
- GVfsJob *job;
- GError *error;
- gssize nwrote;
-
- stream = G_OUTPUT_STREAM (source_object);
- error = NULL;
- job = G_VFS_JOB (user_data);
-
- nwrote = g_output_stream_write_finish (stream, result, &error);
-
- if (nwrote < 0)
- {
- g_vfs_job_failed_literal (G_VFS_JOB (job),
- error->domain,
- error->code,
- error->message);
-
- g_error_free (error);
- return;
- }
-
- g_vfs_job_write_set_written_size (G_VFS_JOB_WRITE (job), nwrote);
- g_vfs_job_succeeded (job);
-}
-
-static gboolean
-try_write (GVfsBackend *backend,
- GVfsJobWrite *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize buffer_size)
-{
- GOutputStream *stream;
-
- stream = G_OUTPUT_STREAM (handle);
-
- g_output_stream_write_async (stream,
- buffer,
- buffer_size,
- G_PRIORITY_DEFAULT,
- G_VFS_JOB (job)->cancellable,
- write_ready,
- job);
- return TRUE;
-}
-
-/* *** close_write () *** */
-static void
-close_write_ready (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GOutputStream *stream;
- GVfsJob *job;
- GError *error;
- gboolean res;
-
- error = NULL;
- job = G_VFS_JOB (user_data);
- stream = G_OUTPUT_STREAM (source_object);
- res = g_output_stream_close_finish (stream,
- result,
- &error);
- if (res == FALSE)
- {
- g_vfs_job_failed_literal (G_VFS_JOB (job),
- error->domain,
- error->code,
- error->message);
-
- g_error_free (error);
- }
- else
- g_vfs_job_succeeded (job);
-
- g_object_unref (stream);
-}
-
-static gboolean
-try_close_write (GVfsBackend *backend,
- GVfsJobCloseWrite *job,
- GVfsBackendHandle handle)
-{
- GOutputStream *stream;
-
- stream = G_OUTPUT_STREAM (handle);
-
- g_output_stream_close_async (stream,
- G_PRIORITY_DEFAULT,
- G_VFS_JOB (job)->cancellable,
- close_write_ready,
- job);
-
- return TRUE;
-}
-
-static void
-do_make_directory (GVfsBackend *backend,
- GVfsJobMakeDirectory *job,
- const char *filename)
-{
- SoupMessage *msg;
- SoupURI *uri;
- guint status;
-
- uri = http_backend_uri_for_filename (backend, filename, TRUE);
- msg = soup_message_new_from_uri (SOUP_METHOD_MKCOL, uri);
- soup_uri_free (uri);
-
- status = g_vfs_backend_dav_send_message (backend, msg);
-
- if (! SOUP_STATUS_IS_SUCCESSFUL (status))
- if (status == SOUP_STATUS_METHOD_NOT_ALLOWED)
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_EXISTS,
- _("Target file already exists"));
- else
- g_vfs_job_failed_literal (G_VFS_JOB (job), G_IO_ERROR,
- http_error_code_from_status (status),
- msg->reason_phrase);
- else
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- g_object_unref (msg);
-}
-
-static void
-do_delete (GVfsBackend *backend,
- GVfsJobDelete *job,
- const char *filename)
-{
- SoupMessage *msg;
- SoupURI *uri;
- GFileType file_type;
- gboolean res;
- guint num_children;
- guint status;
- GError *error;
-
- error = NULL;
-
- uri = http_backend_uri_for_filename (backend, filename, FALSE);
- res = stat_location (backend, uri, &file_type, &num_children, &error);
-
- if (res == FALSE)
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- if (file_type == G_FILE_TYPE_DIRECTORY && num_children)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_NOT_EMPTY,
- _("Directory not empty"));
- return;
- }
-
- msg = soup_message_new_from_uri (SOUP_METHOD_DELETE, uri);
-
- status = g_vfs_backend_dav_send_message (backend, msg);
-
- if (!SOUP_STATUS_IS_SUCCESSFUL (status))
- g_vfs_job_failed_literal (G_VFS_JOB (job),
- G_IO_ERROR,
- http_error_code_from_status (status),
- msg->reason_phrase);
- else
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- soup_uri_free (uri);
- g_object_unref (msg);
-}
-
-static void
-do_set_display_name (GVfsBackend *backend,
- GVfsJobSetDisplayName *job,
- const char *filename,
- const char *display_name)
-{
- SoupMessage *msg;
- SoupURI *source;
- SoupURI *target;
- char *target_path;
- char *dirname;
- guint status;
-
- source = http_backend_uri_for_filename (backend, filename, FALSE);
- msg = soup_message_new_from_uri (SOUP_METHOD_MOVE, source);
-
- dirname = g_path_get_dirname (filename);
- target_path = g_build_filename (dirname, display_name, NULL);
- target = http_backend_uri_for_filename (backend, target_path, FALSE);
-
- message_add_destination_header (msg, target);
- message_add_overwrite_header (msg, FALSE);
-
- status = g_vfs_backend_dav_send_message (backend, msg);
-
- /*
- * The precondition of SOUP_STATUS_PRECONDITION_FAILED (412) in
- * this case was triggered by the "Overwrite: F" header which
- * means that the target already exists.
- * Also if we get a REDIRECTION it means that there was no
- * "Location" header, since otherwise that would have triggered
- * our redirection handler. This probably means we are dealing
- * with an web dav implementation (like mod_dav) that also sends
- * redirects for the destionaion (i.e. "Destination: /foo" header)
- * which very likely means that the target also exists (and is a
- * directory). That or the webdav server is broken.
- * We could find out by doing another stat and but I think this is
- * such a corner case that we are totally fine with returning
- * G_IO_ERROR_EXISTS.
- * */
-
- if (SOUP_STATUS_IS_SUCCESSFUL (status))
- {
- g_print ("new target_path: %s\n", target_path);
- g_vfs_job_set_display_name_set_new_path (job, target_path);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else if (status == SOUP_STATUS_PRECONDITION_FAILED ||
- SOUP_STATUS_IS_REDIRECTION (status))
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_EXISTS,
- _("Target file already exists"));
- else
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- http_error_code_from_status (status),
- "%s", msg->reason_phrase);
-
- g_object_unref (msg);
- g_free (dirname);
- g_free (target_path);
- soup_uri_free (target);
- soup_uri_free (source);
-}
-
-static gboolean
-try_unmount (GVfsBackend *backend,
- GVfsJobUnmount *job)
-{
- _exit (0);
-}
-
-/* ************************************************************************* */
-/* */
-static void
-g_vfs_backend_dav_class_init (GVfsBackendDavClass *klass)
-{
- GObjectClass *gobject_class;
- GVfsBackendClass *backend_class;
-
- gobject_class = G_OBJECT_CLASS (klass);
- gobject_class->finalize = g_vfs_backend_dav_finalize;
-
- backend_class = G_VFS_BACKEND_CLASS (klass);
-
- backend_class->try_mount = NULL;
- backend_class->mount = do_mount;
- backend_class->try_query_info = NULL;
- backend_class->query_info = do_query_info;
- backend_class->enumerate = do_enumerate;
- backend_class->try_create = try_create;
- backend_class->try_replace = try_replace;
- backend_class->try_write = try_write;
- backend_class->try_close_write = try_close_write;
- backend_class->make_directory = do_make_directory;
- backend_class->delete = do_delete;
- backend_class->set_display_name = do_set_display_name;
- backend_class->try_unmount = try_unmount;
-}
diff --git a/daemon/gvfsbackenddav.h b/daemon/gvfsbackenddav.h
deleted file mode 100644
index 226e5dc0..00000000
--- a/daemon/gvfsbackenddav.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Christian Kellner <gicmo@gnome.org>
- */
-
-#ifndef __G_VFS_BACKEND_DAV_H__
-#define __G_VFS_BACKEND_DAV_H__
-
-#include <gvfsbackendhttp.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_DAV (g_vfs_backend_dav_get_type ())
-#define G_VFS_BACKEND_DAV(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_DAV, GVfsBackendDav))
-#define G_VFS_BACKEND_DAV_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_DAV, GVfsBackendDavClass))
-#define G_VFS_IS_BACKEND_DAV(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_DAV))
-#define G_VFS_IS_BACKEND_DAV_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_DAV))
-#define G_VFS_BACKEND_DAV_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_DAV, GVfsBackendDavClass))
-
-typedef struct _GVfsBackendDav GVfsBackendDav;
-typedef struct _GVfsBackendDavClass GVfsBackendDavClass;
-
-struct _GVfsBackendDavClass
-{
- GVfsBackendHttpClass parent_class;
-};
-
-GType g_vfs_backend_dav_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_DAV_H__ */
diff --git a/daemon/gvfsbackenddnssd.c b/daemon/gvfsbackenddnssd.c
deleted file mode 100644
index 3a224a50..00000000
--- a/daemon/gvfsbackenddnssd.c
+++ /dev/null
@@ -1,731 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- * Original work, Copyright (C) 2003 Red Hat, Inc
- * GVFS port, Copyright (c) 2008 Andrew Walton.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with the Gnome Library; see the file COPYING.LIB. If not,
- * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors:
- * Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib/gurifuncs.h>
-#include <gio/gio.h>
-
-#include <avahi-client/client.h>
-#include <avahi-client/lookup.h>
-#include <avahi-common/error.h>
-#include <avahi-common/timeval.h>
-#include <avahi-glib/glib-watch.h>
-#include <avahi-glib/glib-malloc.h>
-
-#include "gvfsbackenddnssd.h"
-
-#include "gvfsdaemonprotocol.h"
-#include "gvfsjobcreatemonitor.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsmonitor.h"
-
-static struct {
- char *type;
- char *method;
- char *icon;
- gpointer handle;
-} dns_sd_types[] = {
- {"_ftp._tcp", "ftp", "folder-remote-ftp"},
- {"_webdav._tcp", "dav", "folder-remote"},
- {"_webdavs._tcp", "davs", "folder-remote"},
- {"_sftp-ssh._tcp", "sftp", "folder-remote-ssh"},
-};
-
-static AvahiClient *global_client = NULL;
-static gboolean avahi_initialized = FALSE;
-
-static GList *dnssd_backends = NULL;
-
-typedef struct {
- char *file_name;
- char *name;
- char *type;
- char *target_uri;
- GIcon *icon;
-} LinkFile;
-
-static LinkFile root = { "/" };
-
-struct _GVfsBackendDnsSd
-{
- GVfsBackend parent_instance;
- GVfsMonitor *root_monitor;
- char *domain;
- GMountSpec *mount_spec;
- GList *files; /* list of LinkFiles */
-
- GList *browsers;
-};
-
-typedef struct _GVfsBackendDnsSd GVfsBackendDnsSd;
-
-G_DEFINE_TYPE (GVfsBackendDnsSd, g_vfs_backend_dns_sd, G_VFS_TYPE_BACKEND)
-
-static void add_browsers (GVfsBackendDnsSd *backend);
-static void remove_browsers (GVfsBackendDnsSd *backend);
-static AvahiClient *get_global_avahi_client (void);
-
-/* Callback for state changes on the Client */
-static void
-avahi_client_callback (AvahiClient *client, AvahiClientState state, void *userdata)
-{
- /* We need to set this early, as the add_browsers call below may reenter
- when this is called from the client creation call */
- if (global_client == NULL)
- global_client = client;
-
- if (state == AVAHI_CLIENT_FAILURE)
- {
- if (avahi_client_errno (client) == AVAHI_ERR_DISCONNECTED)
- {
- /* Remove the service browsers from the handles */
- g_list_foreach (dnssd_backends, (GFunc)remove_browsers, NULL);
-
- /* Destroy old client */
- avahi_client_free (client);
- global_client = NULL;
- avahi_initialized = FALSE;
-
- /* Reconnect */
- get_global_avahi_client ();
- }
- }
- else if (state == AVAHI_CLIENT_S_RUNNING)
- {
- /* Start browsing again */
- g_list_foreach (dnssd_backends, (GFunc)add_browsers, NULL);
- }
-}
-
-static AvahiClient *
-get_global_avahi_client (void)
-{
- static AvahiGLibPoll *glib_poll = NULL;
- int error;
-
- if (!avahi_initialized)
- {
- avahi_initialized = TRUE;
-
- if (glib_poll == NULL)
- {
- avahi_set_allocator (avahi_glib_allocator ());
- glib_poll = avahi_glib_poll_new (NULL, G_PRIORITY_DEFAULT);
- }
-
- /* Create a new AvahiClient instance */
- global_client = avahi_client_new (avahi_glib_poll_get (glib_poll),
- AVAHI_CLIENT_NO_FAIL,
- avahi_client_callback,
- glib_poll,
- &error);
-
- if (global_client == NULL)
- {
- /* Print out the error string */
- g_warning ("Error initializing Avahi: %s", avahi_strerror (error));
- return NULL;
- }
- }
-
- return global_client;
-}
-
-static GIcon *
-get_icon_for_type (const char *type)
-{
- int i;
-
- for (i = 0; i < G_N_ELEMENTS (dns_sd_types); i++)
- {
- if (strcmp (type, dns_sd_types[i].type) == 0)
- return g_themed_icon_new (dns_sd_types[i].icon);
- }
-
- return g_themed_icon_new ("text-x-generic");
-}
-
-static const char *
-get_method_for_type (const char *type)
-{
- int i;
-
- for (i = 0; i < G_N_ELEMENTS (dns_sd_types); i++)
- {
- if (strcmp (type, dns_sd_types[i].type) == 0)
- return dns_sd_types[i].method;
- }
-
- return NULL;
-}
-
-static char *
-encode_filename (const char *service,
- const char *type)
-{
- GString *string;
- const char *p;
-
- string = g_string_new (NULL);
-
- p = service;
-
- while (*p)
- {
- if (*p == '\\')
- g_string_append (string, "\\\\");
- else if (*p == '.')
- g_string_append (string, "\\.");
- else if (*p == '/')
- g_string_append (string, "\\s");
- else
- g_string_append_c (string, *p);
- p++;
- }
-
- g_string_append_c (string, '.');
- g_string_append (string, type);
-
- return g_string_free (string, FALSE);
-}
-
-static LinkFile *
-link_file_new (const char *name,
- const char *type,
- const char *domain,
- const char *host_name,
- AvahiProtocol protocol,
- const AvahiAddress *address,
- uint16_t port,
- AvahiStringList *txt)
-{
- LinkFile *file;
- char *path, *user, *user_str;
- AvahiStringList *path_l, *user_l;
- char a[128];
- const char *method;
-
- file = g_slice_new0 (LinkFile);
-
- file->name = g_strdup (name);
- file->type = g_strdup (type);
- file->file_name = encode_filename (name, type);
- file->icon = get_icon_for_type (type);
-
-
- path = NULL;
- user_str = NULL;
- if (txt != NULL)
- {
- path_l = avahi_string_list_find (txt, "path");
- if (path_l != NULL)
- avahi_string_list_get_pair (path_l, NULL, &path, NULL);
-
- user_l = avahi_string_list_find (txt, "u");
- if (user_l != NULL)
- {
- avahi_string_list_get_pair (user_l, NULL, &user, NULL);
-
- user_str = g_strconcat (user, "@", NULL);
- }
- }
-
- if (path == NULL)
- path = g_strdup ("/");
-
- avahi_address_snprint (a, sizeof(a), address);
-
- method = get_method_for_type (type);
-
- if (protocol == AVAHI_PROTO_INET6)
- /* an ipv6 address, follow rfc2732 */
- file->target_uri = g_strdup_printf ("%s://%s[%s]:%d%s",
- method,
- user_str?user_str:"",
- a, port, path);
- else
- file->target_uri = g_strdup_printf ("%s://%s%s:%d%s",
- method,
- user_str?user_str:"",
- a, port, path);
- g_free (user_str);
- g_free (path);
-
- return file;
-}
-
-static void
-link_file_free (LinkFile *file)
-{
- g_free (file->file_name);
- g_free (file->name);
- g_free (file->type);
- g_free (file->target_uri);
-
- if (file->icon)
- g_object_unref (file->icon);
-
- g_slice_free (LinkFile, file);
-}
-
-static LinkFile *
-lookup_link_file_by_name_and_type (GVfsBackendDnsSd *backend,
- const char *name,
- const char *type)
-{
- GList *l;
- LinkFile *file;
-
- for (l = backend->files; l != NULL; l = l->next)
- {
- file = l->data;
- if (strcmp (file->name, name) == 0 &&
- strcmp (file->type, type) == 0)
- return file;
- }
-
- return NULL;
-}
-
-static LinkFile *
-lookup_link_file (GVfsBackendDnsSd *backend,
- GVfsJob *job,
- const char *file_name)
-{
- GList *l;
- LinkFile *file;
-
- if (*file_name != '/')
- goto out;
-
- while (*file_name == '/')
- file_name++;
-
- if (*file_name == 0)
- return &root;
-
- if (strchr (file_name, '/') != NULL)
- goto out;
-
- for (l = backend->files; l != NULL; l = l->next)
- {
- file = l->data;
- if (strcmp (file->file_name, file_name) == 0)
- return file;
- }
-
- out:
- g_vfs_job_failed (job, G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("File doesn't exist"));
-
- return NULL;
-}
-
-
-static void
-file_info_from_file (LinkFile *file,
- GFileInfo *info)
-{
- g_return_if_fail (file != NULL || info != NULL);
-
- g_file_info_set_name (info, file->file_name);
- g_file_info_set_display_name (info, file->name);
-
- if (file->icon)
- g_file_info_set_icon (info, file->icon);
-
- g_file_info_set_file_type (info, G_FILE_TYPE_SHORTCUT);
- g_file_info_set_size(info, 0);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL, TRUE);
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI,
- file->target_uri);
-}
-
-/* Backend Functions */
-static gboolean
-try_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *file_name,
- GFileAttributeMatcher *attribute_matcher,
- GFileQueryInfoFlags flags)
-{
- LinkFile *file;
- GList *l;
- GFileInfo *info;
-
- file = lookup_link_file (G_VFS_BACKEND_DNS_SD (backend),
- G_VFS_JOB (job), file_name);
-
- if (file != &root)
- {
- if (file != NULL)
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_DIRECTORY,
- _("The file is not a directory"));
- return TRUE;
- }
-
- g_vfs_job_succeeded (G_VFS_JOB(job));
-
- /* Enumerate root */
- for (l = G_VFS_BACKEND_DNS_SD (backend)->files; l != NULL; l = l->next)
- {
- file = l->data;
- info = g_file_info_new ();
- file_info_from_file (file, info);
- g_vfs_job_enumerate_add_info (job, info);
- g_object_unref (info);
- }
-
- g_vfs_job_enumerate_done (job);
-
- return TRUE;
-}
-
-static gboolean
-try_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *file_name,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- LinkFile *file;
-
- file = lookup_link_file (G_VFS_BACKEND_DNS_SD (backend),
- G_VFS_JOB (job), file_name);
-
- if (file == &root)
- {
- GIcon *icon;
- g_file_info_set_name (info, "/");
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
- /* TODO: Name */
- g_file_info_set_display_name (info, _("dns-sd"));
- icon = g_themed_icon_new ("network-workgroup");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_content_type (info, "inode/directory");
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else if (file != NULL)
- {
- file_info_from_file (file, info);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-
- return TRUE;
-}
-
-
-static void
-resolve_callback (AvahiServiceResolver *r,
- AvahiIfIndex interface,
- AvahiProtocol protocol,
- AvahiResolverEvent event,
- const char *name,
- const char *type,
- const char *domain,
- const char *host_name,
- const AvahiAddress *address,
- uint16_t port,
- AvahiStringList *txt,
- AvahiLookupResultFlags flags,
- void *userdata)
-{
- GVfsBackendDnsSd *backend = userdata;
- LinkFile *file;
- char *path;
-
- if (event == AVAHI_RESOLVER_FAILURE)
- return;
-
- /* Link-local ipv6 address, can't make a uri from this, ignore */
- if (address->proto == AVAHI_PROTO_INET6 &&
- address->data.ipv6.address[0] == 0xfe &&
- address->data.ipv6.address[1] == 0x80)
- return;
-
- file = lookup_link_file_by_name_and_type (backend,
- name, type);
-
- if (file != NULL)
- return;
-
- file = link_file_new (name, type, domain, host_name, protocol,
- address, port, txt);
-
- backend->files = g_list_prepend (backend->files, file);
-
- path = g_strconcat ("/", file->file_name, NULL);
- g_vfs_monitor_emit_event (backend->root_monitor,
- G_FILE_MONITOR_EVENT_CREATED,
- path,
- NULL);
- g_free (path);
-}
-
-static void
-browse_callback (AvahiServiceBrowser *b,
- AvahiIfIndex interface,
- AvahiProtocol protocol,
- AvahiBrowserEvent event,
- const char *name,
- const char *type,
- const char *domain,
- AvahiLookupResultFlags flags,
- void *userdata)
-{
- GVfsBackendDnsSd *backend = userdata;
- AvahiServiceResolver *sr;
- AvahiClient *client;
- LinkFile *file;
- char *path;
-
- switch (event)
- {
- case AVAHI_BROWSER_FAILURE:
- break;
-
- case AVAHI_BROWSER_NEW:
- client = get_global_avahi_client ();
-
- /* We ignore the returned resolver object. In the callback
- function we free it. If the server is terminated before
- the callback function is called the server will free
- the resolver for us. */
-
- sr = avahi_service_resolver_new (client, interface, protocol,
- name, type, domain, AVAHI_PROTO_UNSPEC, 0, resolve_callback, backend);
-
- if (sr == NULL)
- g_warning ("Failed to resolve service name '%s': %s\n", name, avahi_strerror (avahi_client_errno (client)));
-
- break;
-
- case AVAHI_BROWSER_REMOVE:
- file = lookup_link_file_by_name_and_type (backend,
- name, type);
-
- if (file != NULL)
- {
- backend->files = g_list_remove (backend->files, file);
-
- path = g_strconcat ("/", file->file_name, NULL);
- g_vfs_monitor_emit_event (backend->root_monitor,
- G_FILE_MONITOR_EVENT_DELETED,
- path,
- NULL);
- g_free (path);
-
- link_file_free (file);
- }
-
- break;
-
- case AVAHI_BROWSER_ALL_FOR_NOW:
- case AVAHI_BROWSER_CACHE_EXHAUSTED:
- break;
- }
-}
-
-static void
-browse_type (GVfsBackendDnsSd *backend,
- const char *type)
-{
- AvahiClient *client;
- AvahiServiceBrowser *sb;
- const char *domain;
-
- client = get_global_avahi_client ();
-
- domain = NULL;
- if (strcmp (backend->domain, "local") != 0)
- domain = backend->domain;
-
- sb = avahi_service_browser_new (client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC,
- type, domain, 0, browse_callback, backend);
-
- if (sb == NULL)
- {
- g_warning ("Failed to create service browser: %s\n", avahi_strerror( avahi_client_errno (client)));
- return;
- }
-
- backend->browsers = g_list_prepend (backend->browsers, sb);
-
-}
-
-static void
-add_browsers (GVfsBackendDnsSd *backend)
-{
- int i;
-
- for (i = 0; i < G_N_ELEMENTS (dns_sd_types); i++)
- browse_type (backend, dns_sd_types[i].type);
-}
-
-static void
-remove_browsers (GVfsBackendDnsSd *backend)
-{
- g_list_free (backend->browsers);
- backend->browsers = NULL;
-}
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendDnsSd *op_backend = G_VFS_BACKEND_DNS_SD (backend);
- GMountSpec *real_mount_spec;
- const char *domain;
-
- domain = g_mount_spec_get (mount_spec, "host");
-
- if (domain == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- "No domain specified for dns-sd share");
- return TRUE;
- }
-
- op_backend->domain = g_strdup (domain);
-
- if (get_global_avahi_client() == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- "Unable to initialize avahi");
- return TRUE;
- }
-
- real_mount_spec = g_mount_spec_new ("dns-sd");
- g_mount_spec_set (real_mount_spec, "host", op_backend->domain);
- g_vfs_backend_set_mount_spec (backend, real_mount_spec);
- op_backend->mount_spec = real_mount_spec;
-
- op_backend->root_monitor = g_vfs_monitor_new (backend);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- return TRUE;
-}
-
-/* handles both file and dir monitors,
- * as we really don't "support" (e.g. fire events for) either, yet. */
-static gboolean
-try_create_monitor (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *file_name,
- GFileMonitorFlags flags)
-{
- LinkFile *file;
- GVfsBackendDnsSd *network_backend;
-
- network_backend = G_VFS_BACKEND_DNS_SD (backend);
-
- file = lookup_link_file (network_backend, G_VFS_JOB (job), file_name);
-
- if (file != &root)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Can't monitor file or directory."));
- return TRUE;
- }
-
- g_vfs_job_create_monitor_set_monitor (job, network_backend->root_monitor);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- return TRUE;
-}
-
-static void
-g_vfs_backend_dns_sd_init (GVfsBackendDnsSd *network_backend)
-{
- GVfsBackend *backend = G_VFS_BACKEND (network_backend);
-
- dnssd_backends = g_list_prepend (dnssd_backends, backend);
-
- /* TODO: Names, etc */
- g_vfs_backend_set_display_name (backend, _("Dns-SD"));
- g_vfs_backend_set_stable_name (backend, _("Network"));
- g_vfs_backend_set_icon_name (backend, "network-workgroup");
- g_vfs_backend_set_user_visible (backend, FALSE);
-
-}
-
-static void
-g_vfs_backend_dns_sd_finalize (GObject *object)
-{
- GVfsBackendDnsSd *backend;
-
- backend = G_VFS_BACKEND_DNS_SD (object);
-
- dnssd_backends = g_list_remove (dnssd_backends, backend);
-
- if (backend->mount_spec)
- g_mount_spec_unref (backend->mount_spec);
-
- if (backend->root_monitor)
- g_object_unref (backend->root_monitor);
-
- g_free (backend->domain);
-
- g_list_foreach (backend->files, (GFunc)link_file_free, NULL);
-
- if (G_OBJECT_CLASS (g_vfs_backend_dns_sd_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_dns_sd_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_dns_sd_class_init (GVfsBackendDnsSdClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_dns_sd_finalize;
-
- backend_class->try_mount = try_mount;
- backend_class->try_query_info = try_query_info;
- backend_class->try_enumerate = try_enumerate;
- backend_class->try_create_dir_monitor = try_create_monitor;
- backend_class->try_create_file_monitor = try_create_monitor;
-}
-
diff --git a/daemon/gvfsbackenddnssd.h b/daemon/gvfsbackenddnssd.h
deleted file mode 100644
index 8648fc29..00000000
--- a/daemon/gvfsbackenddnssd.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* gvfs-backend-dns_sd.h - GIO - GLib Input, Output and Streaming Library
- * Original work, Copyright (C) 2003 Red Hat, Inc
- * GVFS port, Copyright (c) 2008 Andrew Walton.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with the Gnome Library; see the file COPYING.LIB. If not,
- * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors:
- * Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_DNS_SD_H__
-#define __G_VFS_BACKEND_DNS_SD_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_DNS_SD (g_vfs_backend_dns_sd_get_type ())
-#define G_VFS_BACKEND_DNS_SD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_DNS_SD, GVfsBackendDnsSd))
-#define G_VFS_BACKEND_DNS_SD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_DNS_SD, GVfsBackendDnsSdClass))
-#define G_VFS_IS_BACKEND_DNS_SD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_DNS_SD))
-#define G_VFS_IS_BACKEND_DNS_SD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_DNS_SD))
-#define G_VFS_BACKEND_DNS_SD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_DNS_SD, GVfsBackendDnsSdClass))
-
-typedef struct _GVfsBackendDnsSdClass GVfsBackendDnsSdClass;
-
-struct _GVfsBackendDnsSdClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_dns_sd_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_DNS_SD_H__ */
diff --git a/daemon/gvfsbackendftp.c b/daemon/gvfsbackendftp.c
deleted file mode 100644
index b75e01ef..00000000
--- a/daemon/gvfsbackendftp.c
+++ /dev/null
@@ -1,2410 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Benjamin Otte <otte@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Benjmain Otte <otte@gnome.org>
- */
-
-
-#include <config.h>
-
-#include <errno.h> /* for strerror (EAGAIN) */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <glib/gi18n.h>
-#include <libsoup/soup.h>
-
-#include "gvfsbackendftp.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobqueryfsinfo.h"
-#include "gvfsjobqueryattributes.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsdaemonprotocol.h"
-#include "gvfsdaemonutils.h"
-#include "gvfskeyring.h"
-
-#include "ParseFTPList.h"
-
-#define PRINT_DEBUG
-
-#ifdef PRINT_DEBUG
-#define DEBUG g_print
-#else
-#define DEBUG(...)
-#endif
-
-/* timeout for network connect/send/receive (use 0 for none) */
-#define TIMEOUT_IN_SECONDS 30
-
-/*
- * about filename interpretation in the ftp backend
- *
- * As GVfs composes paths using a slash character, we cannot allow a slash as
- * part of a basename. Other critical characters are \r \n and sometimes the
- * space. We therefore g_uri_escape_string() filenames by default and concatenate
- * paths using slashes. This should make GVfs happy.
- *
- * Luckily, TVFS (see RFC 3xxx for details) is a specification that does exactly
- * what we want. It disallows slashes, \r and \n in filenames, so we can happily
- * use it without the need to escape. We also can operate on full paths as our
- * paths exactly match those of a TVFS-using FTP server.
- */
-
-/* unsinged char is on purpose, so we get warnings when we misuse them */
-typedef unsigned char FtpFile;
-typedef struct _FtpConnection FtpConnection;
-
-typedef struct FtpDirReader FtpDirReader;
-struct FtpDirReader {
- void (* init_data) (FtpConnection *conn,
- const FtpFile *dir);
- GFileInfo * (* get_root) (FtpConnection *conn);
- gpointer (* iter_new) (FtpConnection *conn);
- GFileInfo * (* iter_process)(gpointer iter,
- FtpConnection *conn,
- const FtpFile *dirname,
- const FtpFile *must_match_file,
- const char *line,
- char **symlink);
- void (* iter_free) (gpointer iter);
-};
-
-typedef enum {
- FTP_FEATURE_MDTM = (1 << 0),
- FTP_FEATURE_SIZE = (1 << 1),
- FTP_FEATURE_TVFS = (1 << 2),
- FTP_FEATURE_EPSV = (1 << 3)
-} FtpFeatures;
-#define FTP_FEATURES_DEFAULT (FTP_FEATURE_EPSV)
-
-typedef enum {
- FTP_SYSTEM_UNKNOWN = 0,
- FTP_SYSTEM_UNIX,
- FTP_SYSTEM_WINDOWS
-} FtpSystem;
-
-struct _GVfsBackendFtp
-{
- GVfsBackend backend;
-
- SoupAddress * addr;
- char * user;
- gboolean has_initial_user;
- char * password; /* password or NULL for anonymous */
-
- /* vfuncs */
- const FtpDirReader * dir_ops;
-
- /* connection collection */
- GQueue * queue;
- GMutex * mutex;
- GCond * cond;
- guint connections;
- guint max_connections;
-
- /* caching results from dir queries */
- GStaticRWLock directory_cache_lock;
- GHashTable * directory_cache;
-};
-
-G_DEFINE_TYPE (GVfsBackendFtp, g_vfs_backend_ftp, G_VFS_TYPE_BACKEND)
-
-#define STATUS_GROUP(status) ((status) / 100)
-
-typedef void (* Ftp550Handler) (FtpConnection *conn, const FtpFile *file);
-
-/*** FTP CONNECTION ***/
-
-struct _FtpConnection
-{
- /* per-job data */
- GError * error;
- GVfsJob * job;
-
- FtpFeatures features;
- FtpSystem system;
-
- SoupSocket * commands;
- gchar * read_buffer;
- gsize read_buffer_size;
- gsize read_bytes;
-
- SoupSocket * data;
-};
-
-static void
-ftp_connection_free (FtpConnection *conn)
-{
- g_assert (conn->job == NULL);
-
- if (conn->commands)
- g_object_unref (conn->commands);
- if (conn->data)
- g_object_unref (conn->data);
-
- g_slice_free (FtpConnection, conn);
-}
-
-#define ftp_connection_in_error(conn) ((conn)->error != NULL)
-
-static gboolean
-ftp_connection_pop_job (FtpConnection *conn)
-{
- gboolean result;
- GError *error;
- GVfsJob *job;
-
- g_return_val_if_fail (conn->job != NULL, FALSE);
-
- /* sending a reply is racy after the reply is sent. The connection may be
- * reused in a different thread before the reply sending returns. This is
- * racy in particular when the connection is used as a read/write handle.
- */
- error = conn->error;
- conn->error = NULL;
- job = conn->job;
- conn->job = NULL;
-
- if (error)
- {
- g_vfs_job_failed_from_error (job, error);
- g_clear_error (&error);
- result = FALSE;
- }
- else
- {
- g_vfs_job_succeeded (job);
- result = TRUE;
- }
-
- return result;
-}
-
-static void
-ftp_connection_push_job (FtpConnection *conn, GVfsJob *job)
-{
- g_return_if_fail (conn->job == NULL);
-
- /* FIXME: ref the job? */
- conn->job = job;
-}
-
-/**
- * ftp_error_set_from_response:
- * @error: pointer to an error to be set or %NULL
- * @response: an FTP response code to use as the error message
- *
- * Sets an error based on an FTP response code.
- **/
-static void
-ftp_connection_set_error_from_response (FtpConnection *conn, guint response)
-{
- const char *msg;
- int code;
-
- /* Please keep this list ordered by response code,
- * but group responses with the same message. */
- switch (response)
- {
- case 332: /* Need account for login. */
- case 532: /* Need account for storing files. */
- /* FIXME: implement a sane way to handle accounts. */
- code = G_IO_ERROR_NOT_SUPPORTED;
- msg = _("Accounts are unsupported");
- break;
- case 421: /* Service not available, closing control connection. */
- code = G_IO_ERROR_FAILED;
- msg = _("Host closed connection");
- break;
- case 425: /* Can't open data connection. */
- code = G_IO_ERROR_CLOSED;
- msg = _("Cannot open data connection. Maybe your firewall prevents this?");
- break;
- case 426: /* Connection closed; transfer aborted. */
- code = G_IO_ERROR_CLOSED;
- msg = _("Data connection closed");
- break;
- case 450: /* Requested file action not taken. File unavailable (e.g., file busy). */
- case 550: /* Requested action not taken. File unavailable (e.g., file not found, no access). */
- /* FIXME: This is a lot of different errors. So we have to pretend to
- * be smart here. */
- code = G_IO_ERROR_FAILED;
- msg = _("Operation failed");
- break;
- case 451: /* Requested action aborted: local error in processing. */
- code = G_IO_ERROR_FAILED;
- msg = _("Operation failed");
- break;
- case 452: /* Requested action not taken. Insufficient storage space in system. */
- case 552:
- code = G_IO_ERROR_NO_SPACE;
- msg = _("No space left on server");
- break;
- case 500: /* Syntax error, command unrecognized. */
- case 501: /* Syntax error in parameters or arguments. */
- case 502: /* Command not implemented. */
- case 503: /* Bad sequence of commands. */
- case 504: /* Command not implemented for that parameter. */
- code = G_IO_ERROR_NOT_SUPPORTED;
- msg = _("Operation unsupported");
- break;
- case 530: /* Not logged in. */
- code = G_IO_ERROR_PERMISSION_DENIED;
- msg = _("Permission denied");
- break;
- case 551: /* Requested action aborted: page type unknown. */
- code = G_IO_ERROR_FAILED;
- msg = _("Page type unknown");
- break;
- case 553: /* Requested action not taken. File name not allowed. */
- code = G_IO_ERROR_INVALID_FILENAME;
- msg = _("Invalid filename");
- break;
- default:
- code = G_IO_ERROR_FAILED;
- msg = _("Invalid reply");
- break;
- }
-
- DEBUG ("error: %s\n", msg);
- g_set_error_literal (&conn->error, G_IO_ERROR, code, msg);
-}
-
-/**
- * ResponseFlags:
- * RESPONSE_PASS_100: Don't treat 1XX responses, but return them
- * RESPONSE_PASS_300: Don't treat 3XX responses, but return them
- * RESPONSE_PASS_400: Don't treat 4XX responses, but return them
- * RESPONSE_PASS_500: Don't treat 5XX responses, but return them
- * RESPONSE_PASS_550: Don't treat 550 responses, but return them
- * RESPONSE_FAIL_200: Fail on a 2XX response
- */
-
-typedef enum {
- RESPONSE_PASS_100 = (1 << 0),
- RESPONSE_PASS_300 = (1 << 1),
- RESPONSE_PASS_400 = (1 << 2),
- RESPONSE_PASS_500 = (1 << 3),
- RESPONSE_PASS_550 = (1 << 4),
- RESPONSE_FAIL_200 = (1 << 5)
-} ResponseFlags;
-
-/**
- * ftp_connection_receive:
- * @conn: connection to receive from
- * @flags: flags for handling the response
- * @error: pointer to error message
- *
- * Reads a command and stores it in @conn->read_buffer. The read buffer will be
- * null-terminated and contain @conn->read_bytes bytes. Afterwards, the response
- * will be parsed and processed according to @flags. By default, all responses
- * but 2xx will cause an error.
- *
- * Returns: 0 on error, the ftp code otherwise
- **/
-static guint
-ftp_connection_receive (FtpConnection *conn,
- ResponseFlags flags)
-{
- SoupSocketIOStatus status;
- gsize n_bytes;
- gboolean got_boundary;
- char *last_line;
- enum {
- FIRST_LINE,
- MULTILINE,
- DONE
- } reply_state = FIRST_LINE;
- guint response = 0;
-
- g_assert (conn->job != NULL);
-
- if (ftp_connection_in_error (conn))
- return 0;
-
- conn->read_bytes = 0;
- while (reply_state != DONE)
- {
- if (conn->read_buffer_size - conn->read_bytes < 128)
- {
- gsize new_size = conn->read_buffer_size + 1024;
- /* FIXME: upper limit for size? */
- gchar *new = g_try_realloc (conn->read_buffer, new_size);
- if (new)
- {
- conn->read_buffer = new;
- conn->read_buffer_size = new_size;
- }
- else
- {
- g_set_error_literal (&conn->error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply"));
- return 0;
- }
- }
- last_line = conn->read_buffer + conn->read_bytes;
- status = soup_socket_read_until (conn->commands,
- last_line,
- /* -1 byte for nul-termination */
- conn->read_buffer_size - conn->read_bytes - 1,
- "\r\n",
- 2,
- &n_bytes,
- &got_boundary,
- conn->job->cancellable,
- &conn->error);
-
- conn->read_bytes += n_bytes;
- conn->read_buffer[conn->read_bytes] = 0;
- DEBUG ("<-- %s", last_line);
-
- switch (status)
- {
- case SOUP_SOCKET_OK:
- case SOUP_SOCKET_EOF:
- if (got_boundary)
- break;
- if (n_bytes > 0)
- continue;
- g_set_error_literal (&conn->error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply"));
- /* fall through */
- case SOUP_SOCKET_ERROR:
- conn->read_buffer[conn->read_bytes] = 0;
- return 0;
- case SOUP_SOCKET_WOULD_BLOCK:
- default:
- g_assert_not_reached ();
- break;
- }
-
- if (reply_state == FIRST_LINE)
- {
- if (n_bytes < 4 ||
- last_line[0] <= '0' || last_line[0] > '5' ||
- last_line[1] < '0' || last_line[1] > '9' ||
- last_line[2] < '0' || last_line[2] > '9')
- {
- g_set_error_literal (&conn->error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply"));
- return 0;
- }
- response = 100 * (last_line[0] - '0') +
- 10 * (last_line[1] - '0') +
- (last_line[2] - '0');
- if (last_line[3] == ' ')
- reply_state = DONE;
- else if (last_line[3] == '-')
- reply_state = MULTILINE;
- else
- {
- g_set_error_literal (&conn->error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply"));
- return 0;
- }
- }
- else
- {
- if (n_bytes >= 4 &&
- memcmp (conn->read_buffer, last_line, 3) == 0 &&
- last_line[3] == ' ')
- reply_state = DONE;
- }
- }
-
- switch (STATUS_GROUP (response))
- {
- case 0:
- return 0;
- case 1:
- if (flags & RESPONSE_PASS_100)
- break;
- ftp_connection_set_error_from_response (conn, response);
- return 0;
- case 2:
- if (flags & RESPONSE_FAIL_200)
- {
- ftp_connection_set_error_from_response (conn, response);
- return 0;
- }
- break;
- case 3:
- if (flags & RESPONSE_PASS_300)
- break;
- ftp_connection_set_error_from_response (conn, response);
- return 0;
- case 4:
- if (flags & RESPONSE_PASS_400)
- break;
- ftp_connection_set_error_from_response (conn, response);
- return 0;
- break;
- case 5:
- if ((flags & RESPONSE_PASS_500) || (response == 550 && (flags & RESPONSE_PASS_550)))
- break;
- ftp_connection_set_error_from_response (conn, response);
- return 0;
- default:
- g_assert_not_reached ();
- break;
- }
-
- return response;
-}
-
-/**
- * ftp_connection_send:
- * @conn: the connection to send to
- * @flags: #ResponseFlags to use
- * @error: pointer to take an error
- * @format: format string to construct command from
- * (without trailing \r\n)
- * @...: arguments to format string
- *
- * Takes a command, waits for an answer and parses it. Without any @flags, FTP
- * codes other than 2xx cause an error. The last read ftp command will be put
- * into @conn->read_buffer.
- *
- * Returns: 0 on error or the receied FTP code otherwise.
- *
- **/
-static guint
-ftp_connection_sendv (FtpConnection *conn,
- ResponseFlags flags,
- const char * format,
- va_list varargs)
-{
- GString *command;
- SoupSocketIOStatus status;
- gsize n_bytes;
- guint response;
-
- g_assert (conn->job != NULL);
-
- if (ftp_connection_in_error (conn))
- return 0;
-
- command = g_string_new ("");
- g_string_append_vprintf (command, format, varargs);
-#ifdef PRINT_DEBUG
- if (g_str_has_prefix (command->str, "PASS"))
- DEBUG ("--> PASS ***\n");
- else
- DEBUG ("--> %s\n", command->str);
-#endif
- g_string_append (command, "\r\n");
- status = soup_socket_write (conn->commands,
- command->str,
- command->len,
- &n_bytes,
- conn->job->cancellable,
- &conn->error);
- switch (status)
- {
- case SOUP_SOCKET_OK:
- case SOUP_SOCKET_EOF:
- if (n_bytes == command->len)
- break;
- g_set_error_literal (&conn->error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("broken transmission"));
- /* fall through */
- case SOUP_SOCKET_ERROR:
- g_string_free (command, TRUE);
- return 0;
- case SOUP_SOCKET_WOULD_BLOCK:
- default:
- g_assert_not_reached ();
- }
- g_string_free (command, TRUE);
-
- response = ftp_connection_receive (conn, flags);
- return response;
-}
-
-static guint
-ftp_connection_send (FtpConnection *conn,
- ResponseFlags flags,
- const char * format,
- ...) G_GNUC_PRINTF (3, 4);
-static guint
-ftp_connection_send (FtpConnection *conn,
- ResponseFlags flags,
- const char * format,
- ...)
-{
- va_list varargs;
- guint response;
-
- va_start (varargs, format);
- response = ftp_connection_sendv (conn,
- flags,
- format,
- varargs);
- va_end (varargs);
- return response;
-}
-
-static void
-ftp_connection_check_file (FtpConnection *conn,
- const Ftp550Handler *handlers,
- const FtpFile *file)
-{
- while (*handlers && !ftp_connection_in_error (conn))
- {
- (*handlers) (conn, file);
- handlers++;
- }
-}
-
-static guint
-ftp_connection_send_and_check (FtpConnection *conn,
- ResponseFlags flags,
- const Ftp550Handler *handlers,
- const FtpFile *file,
- const char *format,
- ...) G_GNUC_PRINTF (5, 6);
-static guint
-ftp_connection_send_and_check (FtpConnection *conn,
- ResponseFlags flags,
- const Ftp550Handler *handlers,
- const FtpFile *file,
- const char *format,
- ...)
-{
- va_list varargs;
- guint response;
-
- /* check that there's no 550 handling used - don't allow bad use of API */
- g_return_val_if_fail ((flags & RESPONSE_PASS_550) == 0, 0);
- g_return_val_if_fail (handlers != NULL, 0);
- g_return_val_if_fail (file != NULL, 0);
-
- va_start (varargs, format);
- response = ftp_connection_sendv (conn,
- flags | RESPONSE_PASS_550,
- format,
- varargs);
- va_end (varargs);
- if (response == 550)
- {
- ftp_connection_check_file (conn, handlers, file);
- if (!ftp_connection_in_error (conn))
- ftp_connection_set_error_from_response (conn, response);
- response = 0;
- }
- return response;
-}
-
-static void
-ftp_connection_parse_features (FtpConnection *conn)
-{
- struct {
- const char * name; /* name of feature */
- FtpFeatures enable; /* flags to enable with this feature */
- } features[] = {
- { "MDTM", FTP_FEATURE_MDTM },
- { "SIZE", FTP_FEATURE_SIZE },
- { "TVFS", FTP_FEATURE_TVFS },
- { "EPSV", FTP_FEATURE_EPSV }
- };
- char **supported;
- guint i, j;
-
- supported = g_strsplit (conn->read_buffer, "\r\n", -1);
-
- for (i = 1; supported[i]; i++)
- {
- const char *feature = supported[i];
- if (feature[0] != ' ')
- continue;
- feature++;
- for (j = 0; j < G_N_ELEMENTS (features); j++)
- {
- if (g_ascii_strcasecmp (feature, features[j].name) == 0)
- {
- DEBUG ("feature %s supported\n", features[j].name);
- conn->features |= features[j].enable;
- }
- }
- }
-}
-
-/* NB: you must free the connection if it's in error returning from here */
-static FtpConnection *
-ftp_connection_create (SoupAddress * addr,
- GVfsJob * job)
-{
- FtpConnection *conn;
- guint status;
-
- conn = g_slice_new0 (FtpConnection);
- ftp_connection_push_job (conn, job);
-
- conn->commands = soup_socket_new ("non-blocking", FALSE,
- "remote-address", addr,
- "timeout", TIMEOUT_IN_SECONDS,
- NULL);
- status = soup_socket_connect_sync (conn->commands, job->cancellable);
- if (!SOUP_STATUS_IS_SUCCESSFUL (status))
- {
- /* FIXME: better error messages depending on status please */
- g_set_error_literal (&conn->error,
- G_IO_ERROR,
- G_IO_ERROR_HOST_NOT_FOUND,
- _("Could not connect to host"));
- }
-
- ftp_connection_receive (conn, 0);
- return conn;
-}
-
-static guint
-ftp_connection_login (FtpConnection *conn,
- const char * username,
- const char * password)
-{
- guint status;
-
- if (ftp_connection_in_error (conn))
- return 0;
-
- status = ftp_connection_send (conn, RESPONSE_PASS_300,
- "USER %s", username);
-
- if (STATUS_GROUP (status) == 3)
- {
- /* rationale for choosing the default password:
- * - some ftp servers expect something that looks like an email address
- * - we don't want to send the user's name or address, as that would be
- * a privacy problem
- * - we want to give ftp server administrators a chance to notify us of
- * problems with our client.
- * - we don't want to drown in spam.
- */
- if (password == NULL)
- password = "gvfsd-ftp-" VERSION "@example.com";
- status = ftp_connection_send (conn, 0,
- "PASS %s", password);
- }
-
- return status;
-}
-
-static void
-ftp_connection_parse_system (FtpConnection *conn)
-{
- static const struct {
- const char *id;
- FtpSystem system;
- } known_systems[] = {
- /* NB: the first entry that matches is taken, so order matters */
- { "UNIX ", FTP_SYSTEM_UNIX },
- { "WINDOWS_NT ", FTP_SYSTEM_WINDOWS }
- };
- guint i;
- char *system_name = conn->read_buffer + 4;
-
- for (i = 0; i < G_N_ELEMENTS (known_systems); i++)
- {
- if (g_ascii_strncasecmp (system_name,
- known_systems[i].id,
- strlen (known_systems[i].id)) == 0)
- {
- conn->system = known_systems[i].system;
- DEBUG ("system is %u\n", conn->system);
- break;
- }
- }
-}
-
-static gboolean
-ftp_connection_use (FtpConnection *conn)
-{
- /* only binary transfers please */
- ftp_connection_send (conn, 0, "TYPE I");
- if (ftp_connection_in_error (conn))
- return FALSE;
-
- /* check supported features */
- if (ftp_connection_send (conn, 0, "FEAT") != 0)
- ftp_connection_parse_features (conn);
- else
- conn->features = FTP_FEATURES_DEFAULT;
-
- /* RFC 2428 suggests to send this to make NAT routers happy */
- if (conn->features & FTP_FEATURE_EPSV)
- ftp_connection_send (conn, 0, "EPSV ALL");
- g_clear_error (&conn->error);
-
- if (ftp_connection_send (conn, 0, "SYST"))
- ftp_connection_parse_system (conn);
- g_clear_error (&conn->error);
-
- return TRUE;
-}
-
-static gboolean
-ftp_connection_ensure_data_connection (FtpConnection *conn)
-{
- guint ip1, ip2, ip3, ip4, port1, port2;
- SoupAddress *addr;
- const char *s;
- char *ip;
- guint status;
-
- if (conn->features & FTP_FEATURE_EPSV)
- {
- status = ftp_connection_send (conn, RESPONSE_PASS_500, "EPSV");
- if (STATUS_GROUP (status) == 2)
- {
- s = strrchr (conn->read_buffer, '(');
- if (s)
- {
- guint port;
- s += 4;
- port = strtoul (s, NULL, 10);
- if (port != 0)
- {
- addr = soup_address_new (
- soup_address_get_name (soup_socket_get_remote_address (conn->commands)),
- port);
- goto have_address;
- }
- }
- }
- }
- /* only binary transfers please */
- status = ftp_connection_send (conn, 0, "PASV");
- if (status == 0)
- return FALSE;
-
- /* parse response and try to find the address to connect to.
- * This code does the sameas curl.
- */
- for (s = conn->read_buffer; *s; s++)
- {
- if (sscanf (s, "%u,%u,%u,%u,%u,%u",
- &ip1, &ip2, &ip3, &ip4,
- &port1, &port2) == 6)
- break;
- }
- if (*s == 0)
- {
- g_set_error_literal (&conn->error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply"));
- return FALSE;
- }
- ip = g_strdup_printf ("%u.%u.%u.%u", ip1, ip2, ip3, ip4);
- addr = soup_address_new (ip, port1 << 8 | port2);
- g_free (ip);
-
-have_address:
- conn->data = soup_socket_new ("non-blocking", FALSE,
- "remote-address", addr,
- "timeout", TIMEOUT_IN_SECONDS,
- NULL);
- g_object_unref (addr);
- status = soup_socket_connect_sync (conn->data, conn->job->cancellable);
- if (!SOUP_STATUS_IS_SUCCESSFUL (status))
- {
- /* FIXME: better error messages depending on status please */
- g_set_error_literal (&conn->error,
- G_IO_ERROR,
- G_IO_ERROR_HOST_NOT_FOUND,
- _("Could not connect to host"));
- g_object_unref (conn->data);
- conn->data = NULL;
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-ftp_connection_close_data_connection (FtpConnection *conn)
-{
- if (conn == NULL || conn->data == NULL)
- return;
-
- g_object_unref (conn->data);
- conn->data = NULL;
-}
-
-/*** FILE MAPPINGS ***/
-
-/* FIXME: This most likely needs adaption to non-unix like directory structures.
- * There's at least the case of multiple roots (Netware) plus probably a shitload
- * of weird old file systems (starting with MS-DOS)
- * But we first need a way to detect that.
- */
-
-/**
- * FtpFile:
- *
- * Byte string used to identify a file on the FTP server. It's typedef'ed to
- * make it easy to distinguish from GVfs paths.
- */
-
-static FtpFile *
-ftp_filename_from_gvfs_path (FtpConnection *conn, const char *pathname)
-{
- return (FtpFile *) g_strdup (pathname);
-}
-
-static char *
-ftp_filename_to_gvfs_path (FtpConnection *conn, const FtpFile *filename)
-{
- return g_strdup ((const char *) filename);
-}
-
-/* Takes an FTP dirname and a basename (as used in RNTO or as result from LIST
- * or similar) and gets the new ftp filename from it.
- *
- * Returns: the filename or %NULL if filename construction wasn't possible.
- */
-/* let's hope we can live without a connection here, or we have to rewrite LIST */
-static FtpFile *
-ftp_filename_construct (FtpConnection *conn, const FtpFile *dirname, const char *basename)
-{
- if (strpbrk (basename, "/\r\n"))
- return NULL;
-
- return (FtpFile *) g_build_path ("/", (char *) dirname, basename, NULL);
-}
-
-#define ftp_filename_equal g_str_equal
-
-/*** COMMON FUNCTIONS WITH SPECIAL HANDLING ***/
-
-static gboolean
-ftp_connection_cd (FtpConnection *conn, const FtpFile *file)
-{
- guint response = ftp_connection_send (conn,
- RESPONSE_PASS_500,
- "CWD %s", file);
- if (response == 550)
- {
- g_set_error_literal (&conn->error,
- G_IO_ERROR, G_IO_ERROR_NOT_DIRECTORY,
- _("The file is not a directory"));
- response = 0;
- }
- else if (STATUS_GROUP (response) == 5)
- {
- ftp_connection_set_error_from_response (conn, response);
- response = 0;
- }
-
- return response != 0;
-}
-
-static gboolean
-ftp_connection_try_cd (FtpConnection *conn, const FtpFile *file)
-{
- if (ftp_connection_in_error (conn))
- return FALSE;
-
- if (!ftp_connection_cd (conn, file))
- {
- g_clear_error (&conn->error);
- return FALSE;
- }
-
- return TRUE;
-}
-
-/*** default directory reading ***/
-
-static void
-dir_default_init_data (FtpConnection *conn, const FtpFile *dir)
-{
- ftp_connection_cd (conn, dir);
- ftp_connection_ensure_data_connection (conn);
-
- ftp_connection_send (conn,
- RESPONSE_PASS_100 | RESPONSE_FAIL_200,
- "LIST");
-}
-
-static GFileInfo *
-dir_default_get_root (FtpConnection *conn)
-{
- GFileInfo *info;
- GIcon *icon;
- char *display_name;
-
- info = g_file_info_new ();
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
-
- g_file_info_set_name (info, "/");
- display_name = g_strdup_printf (_("/ on %s"),
- soup_address_get_name (soup_socket_get_remote_address (conn->commands)));
- g_file_info_set_display_name (info, display_name);
- g_free (display_name);
- g_file_info_set_edit_name (info, "/");
-
- g_file_info_set_content_type (info, "inode/directory");
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE, "inode/directory");
-
- icon = g_themed_icon_new ("folder-remote");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
-
- return info;
-}
-
-static gpointer
-dir_default_iter_new (FtpConnection *conn)
-{
- return g_slice_new (struct list_state);
-}
-
-static GFileInfo *
-dir_default_iter_process (gpointer iter,
- FtpConnection *conn,
- const FtpFile *dirname,
- const FtpFile *must_match_file,
- const char *line,
- char **symlink)
-{
- struct list_state *state = iter;
- struct list_result result = { 0, };
- GTimeVal tv = { 0, 0 };
- GFileInfo *info;
- int type;
- FtpFile *name;
- char *s, *t;
-
- type = ParseFTPList (line, state, &result);
- if (type != 'd' && type != 'f' && type != 'l')
- return NULL;
-
- /* don't list . and .. directories
- * Let's hope they're not important files on some ftp servers
- */
- if (type == 'd')
- {
- if (result.fe_fnlen == 1 &&
- result.fe_fname[0] == '.')
- return NULL;
- if (result.fe_fnlen == 2 &&
- result.fe_fname[0] == '.' &&
- result.fe_fname[1] == '.')
- return NULL;
- }
-
- s = g_strndup (result.fe_fname, result.fe_fnlen);
- if (dirname)
- {
- name = ftp_filename_construct (conn, dirname, s);
- g_free (s);
- }
- else
- name = (FtpFile *) s;
- if (name == NULL)
- return NULL;
-
- if (must_match_file && !ftp_filename_equal (name, must_match_file))
- {
- g_free (name);
- return NULL;
- }
-
- info = g_file_info_new ();
-
- s = ftp_filename_to_gvfs_path (conn, name);
-
- t = g_path_get_basename (s);
- g_file_info_set_name (info, t);
- g_free (t);
-
- if (type == 'l')
- {
- char *link;
-
- link = g_strndup (result.fe_lname, result.fe_lnlen);
-
- /* FIXME: this whole stuff is not FtpFile save */
- g_file_info_set_symlink_target (info, link);
- g_file_info_set_is_symlink (info, TRUE);
-
- if (symlink)
- {
- char *str = g_path_get_dirname (s);
- char *symlink_file = g_build_path ("/", str, link, NULL);
-
- g_free (str);
- while ((str = strstr (symlink_file, "/../")))
- {
- char *end = str + 4;
- char *start;
- start = str - 1;
- while (*start != '/')
- start--;
- memcpy (start + 1, end, strlen (end) + 1);
- }
- str = symlink_file + strlen (symlink_file) - 1;
- while (*str == '/' && str > symlink_file)
- *str-- = 0;
- *symlink = symlink_file;
- }
- g_free (link);
- }
- else if (symlink)
- *symlink = NULL;
-
- g_file_info_set_size (info, strtoul (result.fe_size, NULL, 10));
-
- gvfs_file_info_populate_default (info, s,
- type == 'f' ? G_FILE_TYPE_REGULAR :
- type == 'l' ? G_FILE_TYPE_SYMBOLIC_LINK :
- G_FILE_TYPE_DIRECTORY);
-
- if (conn->system == FTP_SYSTEM_UNIX)
- g_file_info_set_is_hidden (info, result.fe_fnlen > 0 &&
- result.fe_fname[0] == '.');
-
- g_free (s);
- g_free (name);
-
- tv.tv_sec = mktime (&result.fe_time);
- if (tv.tv_sec != -1)
- g_file_info_set_modification_time (info, &tv);
-
- return info;
-}
-
-static void
-dir_default_iter_free (gpointer iter)
-{
- g_slice_free (struct list_state, iter);
-}
-
-static const FtpDirReader dir_default = {
- dir_default_init_data,
- dir_default_get_root,
- dir_default_iter_new,
- dir_default_iter_process,
- dir_default_iter_free
-};
-
-/*** BACKEND ***/
-
-static void
-g_vfs_backend_ftp_push_connection (GVfsBackendFtp *ftp, FtpConnection *conn)
-{
- /* we allow conn == NULL to ease error cases */
- if (conn == NULL)
- return;
-
- if (conn->job)
- ftp_connection_pop_job (conn);
-
- g_mutex_lock (ftp->mutex);
- if (ftp->queue)
- {
- g_queue_push_tail (ftp->queue, conn);
- g_cond_signal (ftp->cond);
- }
- else
- ftp_connection_free (conn);
- g_mutex_unlock (ftp->mutex);
-}
-
-static void
-do_broadcast (GCancellable *cancellable, GCond *cond)
-{
- g_cond_broadcast (cond);
-}
-
-static FtpConnection *
-g_vfs_backend_ftp_pop_connection (GVfsBackendFtp *ftp,
- GVfsJob * job)
-{
- FtpConnection *conn = NULL;
- GTimeVal now;
- guint id;
-
- g_mutex_lock (ftp->mutex);
- id = g_signal_connect (job->cancellable,
- "cancelled",
- G_CALLBACK (do_broadcast),
- ftp->cond);
- while (conn == NULL && ftp->queue != NULL)
- {
- if (g_cancellable_is_cancelled (job->cancellable))
- break;
- conn = g_queue_pop_head (ftp->queue);
-
- if (conn != NULL) {
- /* Figure out if this connection had a timeout sent. If so, skip it. */
- g_mutex_unlock (ftp->mutex);
- ftp_connection_push_job (conn, job);
- if (ftp_connection_send (conn, 0, "NOOP"))
- break;
-
- g_clear_error (&conn->error);
- conn->job = NULL;
- ftp_connection_free (conn);
- conn = NULL;
- g_mutex_lock (ftp->mutex);
- ftp->connections--;
- continue;
- }
-
- if (ftp->connections < ftp->max_connections)
- {
- ftp->connections++;
- g_mutex_unlock (ftp->mutex);
- conn = ftp_connection_create (ftp->addr, job);
- ftp_connection_login (conn, ftp->user, ftp->password);
- ftp_connection_use (conn);
- if (!ftp_connection_in_error (conn))
- break;
-
- ftp_connection_pop_job (conn);
- ftp_connection_free (conn);
- conn = NULL;
- g_mutex_lock (ftp->mutex);
- ftp->connections--;
- /* FIXME: This assignment is racy due to the mutex unlock above */
- ftp->max_connections = ftp->connections;
- if (ftp->max_connections == 0)
- {
- DEBUG ("no more connections left, exiting...");
- /* FIXME: shut down properly */
- exit (0);
- }
-
- continue;
- }
-
- g_get_current_time (&now);
- g_time_val_add (&now, TIMEOUT_IN_SECONDS * 1000 * 1000);
- if (!g_cond_timed_wait (ftp->cond, ftp->mutex, &now))
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK,
- /* defeat string freeze! */
- /* _("Resource temporarily unavailable")); */
- "%s", g_strerror (EAGAIN));
- break;
- }
- }
- g_signal_handler_disconnect (job->cancellable, id);
-
- return conn;
-}
-
-static void
-g_vfs_backend_ftp_finalize (GObject *object)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (object);
-
- if (ftp->addr)
- g_object_unref (ftp->addr);
-
- /* has been cleared on unmount */
- g_assert (ftp->queue == NULL);
- g_cond_free (ftp->cond);
- g_mutex_free (ftp->mutex);
-
- g_hash_table_destroy (ftp->directory_cache);
- g_static_rw_lock_free (&ftp->directory_cache_lock);
-
- g_free (ftp->user);
- g_free (ftp->password);
-
- if (G_OBJECT_CLASS (g_vfs_backend_ftp_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_ftp_parent_class)->finalize) (object);
-}
-
-static void
-list_free (gpointer list)
-{
- g_list_foreach (list, (GFunc) g_free, NULL);
- g_list_free (list);
-}
-
-static void
-g_vfs_backend_ftp_init (GVfsBackendFtp *ftp)
-{
- ftp->mutex = g_mutex_new ();
- ftp->cond = g_cond_new ();
-
- ftp->directory_cache = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- list_free);
- g_static_rw_lock_init (&ftp->directory_cache_lock);
-
- ftp->dir_ops = &dir_default;
-}
-
-static void
-do_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
- char *host;
- char *prompt = NULL;
- char *username;
- char *password;
- char *display_name;
- gboolean aborted, anonymous, break_on_fail;
- GPasswordSave password_save = G_PASSWORD_SAVE_NEVER;
- guint port;
-
- conn = ftp_connection_create (ftp->addr,
- G_VFS_JOB (job));
- /* fail fast here. No need to ask for a password if we know the hostname
- * doesn't exist or the given host/port doesn't have an ftp server running.
- */
- if (ftp_connection_in_error (conn))
- {
- ftp_connection_pop_job (conn);
- ftp_connection_free (conn);
- return;
- }
-
- port = soup_address_get_port (ftp->addr);
- /* FIXME: need to translate this? */
- if (port == 21)
- host = g_strdup (soup_address_get_name (ftp->addr));
- else
- host = g_strdup_printf ("%s:%u",
- soup_address_get_name (ftp->addr),
- port);
-
- username = NULL;
- password = NULL;
- break_on_fail = FALSE;
-
- if (ftp->user != NULL && strcmp (ftp->user, "anonymous") == 0)
- {
- anonymous = TRUE;
- break_on_fail = TRUE;
- goto try_login;
- }
-
- if (g_vfs_keyring_lookup_password (ftp->user,
- soup_address_get_name (ftp->addr),
- NULL,
- "ftp",
- NULL,
- NULL,
- port == 21 ? 0 : port,
- &username,
- NULL,
- &password))
- {
- anonymous = FALSE;
- goto try_login;
- }
-
- while (TRUE)
- {
- GAskPasswordFlags flags;
- if (prompt == NULL)
- /* translators: %s here is the hostname */
- prompt = g_strdup_printf (_("Enter password for ftp on %s"), host);
-
- flags = G_ASK_PASSWORD_NEED_PASSWORD;
-
- if (!ftp->has_initial_user)
- flags |= G_ASK_PASSWORD_NEED_USERNAME | G_ASK_PASSWORD_ANONYMOUS_SUPPORTED;
-
- if (g_vfs_keyring_is_available ())
- flags |= G_ASK_PASSWORD_SAVING_SUPPORTED;
-
- if (!g_mount_source_ask_password (
- mount_source,
- prompt,
- ftp->user,
- NULL,
- flags,
- &aborted,
- &password,
- &username,
- NULL,
- &anonymous,
- &password_save) ||
- aborted)
- {
- g_set_error_literal (&conn->error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
- _("Password dialog cancelled"));
- break;
- }
-
- /* NEED_USERNAME wasn't set */
- if (ftp->has_initial_user)
- {
- g_free (username);
- username = g_strdup (ftp->user);
- }
-
-try_login:
- g_free (ftp->user);
- g_free (ftp->password);
- if (anonymous)
- {
- if (ftp_connection_login (conn, "anonymous", "") != 0)
- {
- ftp->user = g_strdup ("anonymous");
- ftp->password = g_strdup ("");
- break;
- }
- ftp->user = NULL;
- ftp->password = NULL;
- }
- else
- {
- ftp->user = username ? g_strdup (username) : g_strdup ("");
- ftp->password = g_strdup (password);
- if (ftp_connection_login (conn, username, password) != 0)
- break;
- }
- g_free (username);
- g_free (password);
-
- if (break_on_fail ||
- !g_error_matches (conn->error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED))
- break;
-
- g_clear_error (&conn->error);
- }
-
- ftp_connection_use (conn);
-
- if (ftp_connection_in_error (conn))
- {
- ftp_connection_pop_job (conn);
- ftp_connection_free (conn);
- }
- else
- {
- if (prompt && !anonymous)
- {
- /* a prompt was created, so we have to save the password */
- g_vfs_keyring_save_password (ftp->user,
- soup_address_get_name (ftp->addr),
- NULL,
- "ftp",
- NULL,
- NULL,
- port == 21 ? 0 : port,
- ftp->password,
- password_save);
- g_free (prompt);
- }
-
- mount_spec = g_mount_spec_new ("ftp");
- g_mount_spec_set (mount_spec, "host", soup_address_get_name (ftp->addr));
- if (port != 21)
- {
- char *port_str = g_strdup_printf ("%u", port);
- g_mount_spec_set (mount_spec, "port", port_str);
- g_free (port_str);
- }
-
- if (ftp->has_initial_user)
- g_mount_spec_set (mount_spec, "user", ftp->user);
-
- if (g_str_equal (ftp->user, "anonymous"))
- display_name = g_strdup_printf (_("ftp on %s"), host);
- else
- {
- /* Translators: the first %s is the username, the second the host name */
- display_name = g_strdup_printf (_("ftp as %s on %s"), ftp->user, host);
- }
- g_vfs_backend_set_mount_spec (backend, mount_spec);
- g_mount_spec_unref (mount_spec);
-
- g_vfs_backend_set_display_name (backend, display_name);
- g_free (display_name);
- g_vfs_backend_set_icon_name (backend, "folder-remote");
-
- ftp->connections = 1;
- ftp->max_connections = G_MAXUINT;
- ftp->queue = g_queue_new ();
- g_vfs_backend_ftp_push_connection (ftp, conn);
- }
-
- g_free (host);
-}
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- const char *host, *port_str;
- guint port;
-
- host = g_mount_spec_get (mount_spec, "host");
- if (host == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("No hostname specified"));
- return TRUE;
- }
- port_str = g_mount_spec_get (mount_spec, "port");
- if (port_str == NULL)
- port = 21;
- else
- {
- /* FIXME: error handling? */
- port = strtoul (port_str, NULL, 10);
- }
-
- ftp->addr = soup_address_new (host, port);
- ftp->user = g_strdup (g_mount_spec_get (mount_spec, "user"));
- ftp->has_initial_user = ftp->user != NULL;
-
- return FALSE;
-}
-
-static void
-do_unmount (GVfsBackend * backend,
- GVfsJobUnmount *job)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
-
- g_mutex_lock (ftp->mutex);
- while ((conn = g_queue_pop_head (ftp->queue)))
- {
- /* FIXME: properly quit */
- ftp_connection_free (conn);
- }
- g_queue_free (ftp->queue);
- ftp->queue = NULL;
- g_cond_broadcast (ftp->cond);
- g_mutex_unlock (ftp->mutex);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static void
-error_550_is_directory (FtpConnection *conn, const FtpFile *file)
-{
- guint response = ftp_connection_send (conn,
- RESPONSE_PASS_550,
- "CWD %s", file);
-
- if (STATUS_GROUP (response) == 2)
- {
- g_set_error_literal (&conn->error, G_IO_ERROR,
- G_IO_ERROR_IS_DIRECTORY,
- _("File is directory"));
- }
-}
-
-static void
-do_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
- FtpFile *file;
- static const Ftp550Handler open_read_handlers[] = { error_550_is_directory, NULL };
-
- conn = g_vfs_backend_ftp_pop_connection (ftp, G_VFS_JOB (job));
- if (!conn)
- return;
-
- ftp_connection_ensure_data_connection (conn);
-
- file = ftp_filename_from_gvfs_path (conn, filename);
- ftp_connection_send_and_check (conn,
- RESPONSE_PASS_100 | RESPONSE_FAIL_200,
- &open_read_handlers[0],
- file,
- "RETR %s", file);
- g_free (file);
-
- if (ftp_connection_in_error (conn))
- g_vfs_backend_ftp_push_connection (ftp, conn);
- else
- {
- /* don't push the connection back, it's our handle now */
- g_vfs_job_open_for_read_set_handle (job, conn);
- g_vfs_job_open_for_read_set_can_seek (job, FALSE);
- ftp_connection_pop_job (conn);
- }
-}
-
-static void
-do_close_read (GVfsBackend * backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle handle)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn = handle;
-
- ftp_connection_push_job (conn, G_VFS_JOB (job));
- ftp_connection_close_data_connection (conn);
- ftp_connection_receive (conn, 0);
- g_vfs_backend_ftp_push_connection (ftp, conn);
-}
-
-static void
-do_read (GVfsBackend * backend,
- GVfsJobRead * job,
- GVfsBackendHandle handle,
- char * buffer,
- gsize bytes_requested)
-{
- FtpConnection *conn = handle;
- gsize n_bytes;
-
- ftp_connection_push_job (conn, G_VFS_JOB (job));
-
- soup_socket_read (conn->data,
- buffer,
- bytes_requested,
- &n_bytes,
- conn->job->cancellable,
- &conn->error);
- /* no need to check return value, code will just do the right thing
- * depenging on wether conn->error is set */
-
- g_vfs_job_read_set_size (job, n_bytes);
- ftp_connection_pop_job (conn);
-}
-
-static void
-do_start_write (GVfsBackendFtp *ftp,
- FtpConnection *conn,
- GFileCreateFlags flags,
- const char *format,
- ...) G_GNUC_PRINTF (4, 5);
-static void
-do_start_write (GVfsBackendFtp *ftp,
- FtpConnection *conn,
- GFileCreateFlags flags,
- const char *format,
- ...)
-{
- va_list varargs;
- guint status;
-
- /* FIXME: can we honour the flags? */
-
- ftp_connection_ensure_data_connection (conn);
-
- va_start (varargs, format);
- status = ftp_connection_sendv (conn,
- RESPONSE_PASS_100 | RESPONSE_FAIL_200,
- format,
- varargs);
- va_end (varargs);
-
- if (ftp_connection_in_error (conn))
- g_vfs_backend_ftp_push_connection (ftp, conn);
- else
- {
- /* don't push the connection back, it's our handle now */
- g_vfs_job_open_for_write_set_handle (G_VFS_JOB_OPEN_FOR_WRITE (conn->job), conn);
- g_vfs_job_open_for_write_set_can_seek (G_VFS_JOB_OPEN_FOR_WRITE (conn->job), FALSE);
- ftp_connection_pop_job (conn);
- }
-}
-
-static void
-gvfs_backend_ftp_purge_cache_directory (GVfsBackendFtp *ftp,
- const FtpFile * dir)
-{
- g_static_rw_lock_writer_lock (&ftp->directory_cache_lock);
- g_hash_table_remove (ftp->directory_cache, dir);
- g_static_rw_lock_writer_unlock (&ftp->directory_cache_lock);
-}
-
-static void
-gvfs_backend_ftp_purge_cache_of_file (GVfsBackendFtp *ftp,
- FtpConnection * conn,
- const FtpFile * file)
-{
- char *dirname, *filename;
- FtpFile *dir;
-
- filename = ftp_filename_to_gvfs_path (conn, file);
- dirname = g_path_get_dirname (filename);
- dir = ftp_filename_from_gvfs_path (conn, dirname);
-
- gvfs_backend_ftp_purge_cache_directory (ftp, dir);
-
- g_free (dir);
- g_free (filename);
- g_free (dirname);
-}
-
-/* forward declaration */
-static GFileInfo *
-create_file_info (GVfsBackendFtp *ftp, FtpConnection *conn, const char *filename, char **symlink);
-
-static void
-do_create (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
- GFileInfo *info;
- FtpFile *file;
-
- conn = g_vfs_backend_ftp_pop_connection (ftp, G_VFS_JOB (job));
- if (conn == NULL)
- return;
-
- info = create_file_info (ftp, conn, filename, NULL);
- if (info)
- {
- g_object_unref (info);
- g_set_error_literal (&conn->error,
- G_IO_ERROR,
- G_IO_ERROR_EXISTS,
- _("Target file already exists"));
- goto error;
- }
- file = ftp_filename_from_gvfs_path (conn, filename);
- do_start_write (ftp, conn, flags, "STOR %s", file);
- gvfs_backend_ftp_purge_cache_of_file (ftp, conn, file);
- g_free (file);
- return;
-
-error:
- g_vfs_backend_ftp_push_connection (ftp, conn);
-}
-
-static void
-do_append (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
- FtpFile *file;
-
- conn = g_vfs_backend_ftp_pop_connection (ftp, G_VFS_JOB (job));
- if (conn == NULL)
- return;
-
- file = ftp_filename_from_gvfs_path (conn, filename);
- do_start_write (ftp, conn, flags, "APPE %s", filename);
- gvfs_backend_ftp_purge_cache_of_file (ftp, conn, file);
- g_free (file);
- return;
-}
-
-static void
-do_replace (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- const char *etag,
- gboolean make_backup,
- GFileCreateFlags flags)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
- FtpFile *file;
-
- if (make_backup)
- {
- /* FIXME: implement! */
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_CANT_CREATE_BACKUP,
- _("backups not supported yet"));
- return;
- }
-
- conn = g_vfs_backend_ftp_pop_connection (ftp, G_VFS_JOB (job));
- if (conn == NULL)
- return;
-
- file = ftp_filename_from_gvfs_path (conn, filename);
- do_start_write (ftp, conn, flags, "STOR %s", file);
- gvfs_backend_ftp_purge_cache_of_file (ftp, conn, file);
- g_free (file);
- return;
-}
-
-static void
-do_close_write (GVfsBackend *backend,
- GVfsJobCloseWrite *job,
- GVfsBackendHandle handle)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn = handle;
-
- ftp_connection_push_job (conn, G_VFS_JOB (job));
-
- ftp_connection_close_data_connection (conn);
- ftp_connection_receive (conn, 0);
-
- g_vfs_backend_ftp_push_connection (ftp, conn);
-}
-
-static void
-do_write (GVfsBackend *backend,
- GVfsJobWrite *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize buffer_size)
-{
- FtpConnection *conn = handle;
- gsize n_bytes;
-
- ftp_connection_push_job (conn, G_VFS_JOB (job));
-
- soup_socket_write (conn->data,
- buffer,
- buffer_size,
- &n_bytes,
- G_VFS_JOB (job)->cancellable,
- &conn->error);
-
- g_vfs_job_write_set_written_size (job, n_bytes);
- ftp_connection_pop_job (conn);
-}
-
-static GList *
-do_enumerate_directory (FtpConnection *conn)
-{
- gsize size, n_bytes, bytes_read;
- SoupSocketIOStatus status;
- gboolean got_boundary;
- char *name;
- GList *list = NULL;
-
- if (ftp_connection_in_error (conn))
- return NULL;
-
- size = 128;
- bytes_read = 0;
- name = g_malloc (size);
-
- do
- {
- if (bytes_read + 3 >= size)
- {
- if (size >= 16384)
- {
- g_set_error_literal (&conn->error, G_IO_ERROR, G_IO_ERROR_FILENAME_TOO_LONG,
- _("filename too long"));
- break;
- }
- size += 128;
- name = g_realloc (name, size);
- }
- status = soup_socket_read_until (conn->data,
- name + bytes_read,
- size - bytes_read - 1,
- "\n",
- 1,
- &n_bytes,
- &got_boundary,
- conn->job->cancellable,
- &conn->error);
-
- bytes_read += n_bytes;
- switch (status)
- {
- case SOUP_SOCKET_EOF:
- case SOUP_SOCKET_OK:
- if (n_bytes == 0)
- {
- status = SOUP_SOCKET_EOF;
- break;
- }
- if (got_boundary)
- {
- name[bytes_read - 1] = 0;
- if (bytes_read >= 2 && name[bytes_read - 2] == '\r')
- name[bytes_read - 2] = 0;
- DEBUG ("--- %s\n", name);
- list = g_list_prepend (list, g_strdup (name));
- bytes_read = 0;
- }
- break;
- case SOUP_SOCKET_ERROR:
- goto error2;
- case SOUP_SOCKET_WOULD_BLOCK:
- default:
- g_assert_not_reached ();
- break;
- }
- }
- while (status == SOUP_SOCKET_OK);
-
- if (bytes_read)
- {
- name[bytes_read] = 0;
- DEBUG ("--- %s\n", name);
- list = g_list_prepend (list, name);
- }
- else
- g_free (name);
-
- ftp_connection_close_data_connection (conn);
- ftp_connection_receive (conn, 0);
- if (ftp_connection_in_error (conn))
- goto error;
-
- return g_list_reverse (list);
-
-error2:
- ftp_connection_close_data_connection (conn);
- ftp_connection_receive (conn, 0);
-error:
- ftp_connection_close_data_connection (conn);
- g_list_foreach (list, (GFunc) g_free, NULL);
- g_list_free (list);
- return NULL;
-}
-
-/* IMPORTANT: SUCK ALARM!
- * locks ftp->directory_cache_lock but only iff it returns !NULL */
-static const GList *
-enumerate_directory (GVfsBackendFtp *ftp,
- FtpConnection * conn,
- const FtpFile * dir,
- gboolean use_cache)
-{
- GList *files;
-
- g_static_rw_lock_reader_lock (&ftp->directory_cache_lock);
- do {
- if (use_cache)
- files = g_hash_table_lookup (ftp->directory_cache, dir);
- else
- {
- use_cache = TRUE;
- files = NULL;
- }
- if (files == NULL)
- {
- g_static_rw_lock_reader_unlock (&ftp->directory_cache_lock);
- ftp->dir_ops->init_data (conn, dir);
- files = do_enumerate_directory (conn);
- if (files == NULL)
- {
- return NULL;
- }
- g_static_rw_lock_writer_lock (&ftp->directory_cache_lock);
- g_hash_table_insert (ftp->directory_cache, g_strdup ((const char *) dir), files);
- g_static_rw_lock_writer_unlock (&ftp->directory_cache_lock);
- files = NULL;
- g_static_rw_lock_reader_lock (&ftp->directory_cache_lock);
- }
- } while (files == NULL);
-
- return files;
-}
-
-/* NB: This gets a file info for the given object, no matter if it's a dir
- * or a file */
-static GFileInfo *
-create_file_info (GVfsBackendFtp *ftp, FtpConnection *conn, const char *filename, char **symlink)
-{
- const GList *walk, *files;
- char *dirname;
- FtpFile *dir, *file;
- GFileInfo *info;
- gpointer iter;
-
- if (symlink)
- *symlink = NULL;
-
- if (g_str_equal (filename, "/"))
- return ftp->dir_ops->get_root (conn);
-
- dirname = g_path_get_dirname (filename);
- dir = ftp_filename_from_gvfs_path (conn, dirname);
- g_free (dirname);
-
- files = enumerate_directory (ftp, conn, dir, TRUE);
- if (files == NULL)
- {
- g_free (dir);
- return NULL;
- }
-
- file = ftp_filename_from_gvfs_path (conn, filename);
- iter = ftp->dir_ops->iter_new (conn);
- for (walk = files; walk; walk = walk->next)
- {
- info = ftp->dir_ops->iter_process (iter,
- conn,
- dir,
- file,
- walk->data,
- symlink);
- if (info)
- break;
- }
- ftp->dir_ops->iter_free (iter);
- g_static_rw_lock_reader_unlock (&ftp->directory_cache_lock);
- g_free (dir);
- g_free (file);
- return info;
-}
-
-static GFileInfo *
-resolve_symlink (GVfsBackendFtp *ftp, FtpConnection *conn, GFileInfo *original, const char *filename)
-{
- GFileInfo *info = NULL;
- char *symlink, *newlink;
- guint i;
- static const char *copy_attributes[] = {
- G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK,
- G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN,
- G_FILE_ATTRIBUTE_STANDARD_NAME,
- G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME,
- G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME,
- G_FILE_ATTRIBUTE_STANDARD_COPY_NAME,
- G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET
- };
-
- if (ftp_connection_in_error (conn))
- return original;
-
- /* How many symlinks should we follow?
- * <alex> maybe 8?
- */
- symlink = g_strdup (filename);
- for (i = 0; i < 8 && symlink; i++)
- {
- info = create_file_info (ftp,
- conn,
- symlink,
- &newlink);
- if (!newlink)
- break;
-
- g_free (symlink);
- symlink = newlink;
- }
- g_free (symlink);
-
- if (ftp_connection_in_error (conn))
- {
- g_assert (info == NULL);
- g_clear_error (&conn->error);
- return original;
- }
- if (info == NULL)
- return original;
-
- for (i = 0; i < G_N_ELEMENTS (copy_attributes); i++)
- {
- GFileAttributeType type;
- gpointer value;
-
- if (!g_file_info_get_attribute_data (original,
- copy_attributes[i],
- &type,
- &value,
- NULL))
- continue;
-
- g_file_info_set_attribute (info,
- copy_attributes[i],
- type,
- value);
- }
- g_object_unref (original);
-
- return info;
-}
-
-static void
-do_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags query_flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
- GFileInfo *real;
- char *symlink;
-
- conn = g_vfs_backend_ftp_pop_connection (ftp, G_VFS_JOB (job));
- if (conn == NULL)
- return;
-
- if (query_flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS)
- {
- real = create_file_info (ftp,
- conn,
- filename,
- NULL);
- }
- else
- {
- real = create_file_info (ftp,
- conn,
- filename,
- &symlink);
- if (symlink)
- {
- real = resolve_symlink (ftp, conn, real, symlink);
- g_free (symlink);
- }
- }
-
- if (real)
- {
- g_file_info_copy_into (real, info);
- g_object_unref (real);
- }
- else if (!ftp_connection_in_error (conn))
- g_set_error_literal (&conn->error,
- G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("File doesn't exist"));
-
- g_vfs_backend_ftp_push_connection (ftp, conn);
-}
-
-static void
-do_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *dirname,
- GFileAttributeMatcher *matcher,
- GFileQueryInfoFlags query_flags)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
- const GList *walk, *files;
- FtpFile *dir;
- gpointer iter;
- GSList *symlink_targets = NULL;
- GSList *symlink_fileinfos = NULL;
- GSList *twalk, *fwalk;
- GFileInfo *info;
-
- conn = g_vfs_backend_ftp_pop_connection (ftp, G_VFS_JOB (job));
- if (conn == NULL)
- return;
-
- /* no need to check for IS_DIR, because the enumeration code will return that
- * automatically.
- */
-
- dir = ftp_filename_from_gvfs_path (conn, dirname);
- files = enumerate_directory (ftp, conn, dir, FALSE);
- if (ftp_connection_pop_job (conn))
- {
- ftp_connection_push_job (conn, G_VFS_JOB (job));
- if (files != NULL)
- {
- iter = ftp->dir_ops->iter_new (conn);
- for (walk = files; walk; walk = walk->next)
- {
- char *symlink = NULL;
- info = ftp->dir_ops->iter_process (iter,
- conn,
- dir,
- NULL,
- walk->data,
- query_flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS ? NULL : &symlink);
- if (symlink)
- {
- /* This is necessary due to our locking.
- * And we must not unlock here because it might invalidate the list we iterate */
- symlink_targets = g_slist_prepend (symlink_targets, symlink);
- symlink_fileinfos = g_slist_prepend (symlink_fileinfos, info);
- }
- else if (info)
- {
- g_vfs_job_enumerate_add_info (job, info);
- g_object_unref (info);
- }
- }
- ftp->dir_ops->iter_free (iter);
- g_static_rw_lock_reader_unlock (&ftp->directory_cache_lock);
- for (twalk = symlink_targets, fwalk = symlink_fileinfos; twalk;
- twalk = twalk->next, fwalk = fwalk->next)
- {
- info = resolve_symlink (ftp, conn, fwalk->data, twalk->data);
- g_free (twalk->data);
- g_vfs_job_enumerate_add_info (job, info);
- g_object_unref (info);
- }
- g_slist_free (symlink_targets);
- g_slist_free (symlink_fileinfos);
- }
-
- g_vfs_job_enumerate_done (job);
- conn->job = NULL;
- g_clear_error (&conn->error);
- }
- else
- g_assert (files == NULL);
-
- g_vfs_backend_ftp_push_connection (ftp, conn);
- g_free (dir);
-}
-
-static void
-do_set_display_name (GVfsBackend *backend,
- GVfsJobSetDisplayName *job,
- const char *filename,
- const char *display_name)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
- char *name;
- FtpFile *original, *dir, *now;
-
- conn = g_vfs_backend_ftp_pop_connection (ftp, G_VFS_JOB (job));
- if (conn == NULL)
- return;
-
- original = ftp_filename_from_gvfs_path (conn, filename);
- name = g_path_get_dirname (filename);
- dir = ftp_filename_from_gvfs_path (conn, name);
- g_free (name);
- now = ftp_filename_construct (conn, dir, display_name);
- if (now == NULL)
- {
- g_set_error_literal (&conn->error,
- G_IO_ERROR,
- G_IO_ERROR_INVALID_FILENAME,
- _("Invalid filename"));
- }
- ftp_connection_send (conn,
- RESPONSE_PASS_300 | RESPONSE_FAIL_200,
- "RNFR %s", original);
- g_free (original);
- ftp_connection_send (conn,
- 0,
- "RNTO %s", now);
-
- name = ftp_filename_to_gvfs_path (conn, now);
- g_free (now);
- g_vfs_job_set_display_name_set_new_path (job, name);
- g_free (name);
- gvfs_backend_ftp_purge_cache_directory (ftp, dir);
- g_free (dir);
- g_vfs_backend_ftp_push_connection (ftp, conn);
-}
-
-static void
-do_delete (GVfsBackend *backend,
- GVfsJobDelete *job,
- const char *filename)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
- FtpFile *file;
- guint response;
-
- conn = g_vfs_backend_ftp_pop_connection (ftp, G_VFS_JOB (job));
- if (conn == NULL)
- return;
-
- /* We try file deletion first. If that fails, we try directory deletion.
- * The file-first-then-directory order has been decided by coin-toss. */
- file = ftp_filename_from_gvfs_path (conn, filename);
- response = ftp_connection_send (conn,
- RESPONSE_PASS_500,
- "DELE %s", file);
- if (STATUS_GROUP (response) == 5)
- {
- response = ftp_connection_send (conn,
- RESPONSE_PASS_500,
- "RMD %s", file);
- if (response == 550)
- {
- const GList *files = enumerate_directory (ftp, conn, file, FALSE);
- if (files)
- {
- g_static_rw_lock_reader_unlock (&ftp->directory_cache_lock);
- g_set_error_literal (&conn->error,
- G_IO_ERROR,
- G_IO_ERROR_NOT_EMPTY,
- g_strerror (ENOTEMPTY));
- }
- else
- ftp_connection_set_error_from_response (conn, response);
- }
- else if (STATUS_GROUP (response) == 5)
- {
- ftp_connection_set_error_from_response (conn, response);
- }
- }
-
- gvfs_backend_ftp_purge_cache_of_file (ftp, conn, file);
- g_free (file);
- g_vfs_backend_ftp_push_connection (ftp, conn);
-}
-
-static void
-do_make_directory (GVfsBackend *backend,
- GVfsJobMakeDirectory *job,
- const char *filename)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
- FtpFile *file;
-
- conn = g_vfs_backend_ftp_pop_connection (ftp, G_VFS_JOB (job));
- if (conn == NULL)
- return;
-
- file = ftp_filename_from_gvfs_path (conn, filename);
- ftp_connection_send (conn,
- 0,
- "MKD %s", file);
- /* FIXME: Compare created file with name from server result to be sure
- * it's correct and otherwise fail. */
- gvfs_backend_ftp_purge_cache_of_file (ftp, conn, file);
- g_free (file);
-
- g_vfs_backend_ftp_push_connection (ftp, conn);
-}
-
-static void
-do_move (GVfsBackend *backend,
- GVfsJobMove *job,
- const char *source,
- const char *destination,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data)
-{
- GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
- FtpConnection *conn;
- FtpFile *srcfile, *destfile;
-
- /* FIXME: what about G_FILE_COPY_NOFOLLOW_SYMLINKS and G_FILE_COPY_ALL_METADATA? */
-
- if (flags & G_FILE_COPY_BACKUP)
- {
- /* FIXME: implement! */
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_CANT_CREATE_BACKUP,
- _("backups not supported yet"));
- return;
- }
-
- conn = g_vfs_backend_ftp_pop_connection (ftp, G_VFS_JOB (job));
- if (conn == NULL)
- return;
-
- srcfile = ftp_filename_from_gvfs_path (conn, source);
- destfile = ftp_filename_from_gvfs_path (conn, destination);
- if (ftp_connection_try_cd (conn, destfile))
- {
- char *basename = g_path_get_basename (source);
- FtpFile *real = ftp_filename_construct (conn, destfile, basename);
-
- g_free (basename);
- if (real == NULL)
- g_set_error_literal (&conn->error,
- G_IO_ERROR, G_IO_ERROR_INVALID_FILENAME,
- _("Invalid destination filename"));
- else
- {
- g_free (destfile);
- destfile = real;
- }
- }
-
- if (!(flags & G_FILE_COPY_OVERWRITE))
- {
- char *destfilename = ftp_filename_to_gvfs_path (conn, destfile);
- GFileInfo *info = create_file_info (ftp, conn, destfilename, NULL);
-
- g_free (destfilename);
- if (info)
- {
- g_object_unref (info);
- g_set_error_literal (&conn->error,
- G_IO_ERROR,
- G_IO_ERROR_EXISTS,
- _("Target file already exists"));
- goto out;
- }
- }
-
- ftp_connection_send (conn,
- RESPONSE_PASS_300 | RESPONSE_FAIL_200,
- "RNFR %s", srcfile);
- ftp_connection_send (conn,
- 0,
- "RNTO %s", destfile);
-
- gvfs_backend_ftp_purge_cache_of_file (ftp, conn, srcfile);
- gvfs_backend_ftp_purge_cache_of_file (ftp, conn, destfile);
-out:
- g_free (srcfile);
- g_free (destfile);
- g_vfs_backend_ftp_push_connection (ftp, conn);
-}
-
-static void
-g_vfs_backend_ftp_class_init (GVfsBackendFtpClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_ftp_finalize;
-
- backend_class->mount = do_mount;
- backend_class->try_mount = try_mount;
- backend_class->unmount = do_unmount;
- backend_class->open_for_read = do_open_for_read;
- backend_class->close_read = do_close_read;
- backend_class->read = do_read;
- backend_class->create = do_create;
- backend_class->append_to = do_append;
- backend_class->replace = do_replace;
- backend_class->close_write = do_close_write;
- backend_class->write = do_write;
- backend_class->query_info = do_query_info;
- backend_class->enumerate = do_enumerate;
- backend_class->set_display_name = do_set_display_name;
- backend_class->delete = do_delete;
- backend_class->make_directory = do_make_directory;
- backend_class->move = do_move;
-}
diff --git a/daemon/gvfsbackendftp.h b/daemon/gvfsbackendftp.h
deleted file mode 100644
index 23538342..00000000
--- a/daemon/gvfsbackendftp.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Benjamin Otte <otte@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Benjamin Otte <otte@gnome.org>
- */
-
-#ifndef __G_VFS_BACKEND_FTP_H__
-#define __G_VFS_BACKEND_FTP_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_FTP (g_vfs_backend_ftp_get_type ())
-#define G_VFS_BACKEND_FTP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_FTP, GVfsBackendFtp))
-#define G_VFS_BACKEND_FTP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_FTP, GVfsBackendFtpClass))
-#define G_VFS_IS_BACKEND_FTP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_FTP))
-#define G_VFS_IS_BACKEND_FTP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_FTP))
-#define G_VFS_BACKEND_FTP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_FTP, GVfsBackendFtpClass))
-
-typedef struct _GVfsBackendFtp GVfsBackendFtp;
-typedef struct _GVfsBackendFtpClass GVfsBackendFtpClass;
-
-struct _GVfsBackendFtpClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_ftp_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_FTP_H__ */
diff --git a/daemon/gvfsbackendgphoto2.c b/daemon/gvfsbackendgphoto2.c
deleted file mode 100644
index f06605c1..00000000
--- a/daemon/gvfsbackendgphoto2.c
+++ /dev/null
@@ -1,3404 +0,0 @@
-
-/* GVFS gphoto2 file system driver
- *
- * Copyright (C) 2007-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-/* NOTE: since we link the libcdio libs (GPLv2) into our process space
- * the combined work is GPLv2. This source file, however, is LGPLv2+.
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-#include <gphoto2.h>
-#include <libhal.h>
-#include <dbus/dbus.h>
-#include <sys/time.h>
-
-#include "gvfsbackendgphoto2.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobclosewrite.h"
-#include "gvfsjobcreatemonitor.h"
-#include "gvfsmonitor.h"
-#include "gvfsjobseekwrite.h"
-
-/* showing debug traces */
-#if 0
-#define DEBUG_SHOW_TRACES 1
-#endif
-
-/* showing libgphoto2 output */
-#if 0
-#define DEBUG_SHOW_LIBGPHOTO2_OUTPUT 1
-#endif
-
-/* use this to disable caching */
-#if 0
-#define DEBUG_NO_CACHING 1
-#endif
-
-/*--------------------------------------------------------------------------------------------------------------*/
-
-/* TODO:
- *
- * - write support
- * - it's in; we support writing. yay.
- * - though there's no way to rename an non-empty folder yet
- * - there's an assumption, for caching, that the device won't
- * be able to put files while we're using it. May have to
- * revisit that if such devices exist.
- * - one solution: make cache items valid for only five seconds or something
- *
- * - Note that most PTP devices (e.g. digital cameras) don't support writing
- * - Most MTP devices (e.g. digital audio players) do
- *
- * - However, some MTP devices are just busted when using ~ backup
- * style; see below. This is with my (davidz) Sandisk Sansa
- * e250. This is probably a firmware bug; when investigating
- * libgphoto2 reports everything as peachy.
- *
- * $ pwd
- * /home/davidz/.gvfs/gphoto2 mount on usb%3A001,051/foo
- * $ echo a > a
- * $ echo b > b
- * $ ls -l
- * total 0
- * -rw------- 1 davidz davidz 2 2008-03-02 13:22 a
- * -rw------- 1 davidz davidz 2 2008-03-02 13:22 b
- * $ cat a
- * a
- * $ cat b
- * b
- * $ mv b a
- * $ ls -l
- * total 0
- * -rw------- 1 davidz davidz 2 2008-03-02 13:22 a
- * $ cat a
- * b
- * $ rm a
- *
- * See, this worked fine.. Now see what happens if we
- * use different files names
- *
- * $ echo a > file.txt
- * $ echo b > file.txt~
- * $ ls -l
- * total 0
- * -rw------- 1 davidz davidz 2 2008-03-02 13:22 file.txt
- * -rw------- 1 davidz davidz 2 2008-03-02 13:22 file.txt~
- * $ cat file.txt
- * a
- * $ cat file.txt~
- * b
- * $ mv file.txt~ file.txt
- * $ ls -l
- * total 0
- * -rw------- 1 davidz davidz 0 1969-12-31 18:59 file.txt
- * $ cat file.txt
- * $
- *
- * Awesome. I hate hardware.
- *
- * - This is a bit bad as it affects most text editors (vim, emacs,
- * gedit) and it actually results in data loss. However, there's
- * little we can do about it.
- *
- * - Would be nice to test this on other MTP devices to verify
- * it's indeed a firmware bug in the Sansa Sandisk e250.
- *
- * - This shouldn't affect stuff like Banshee or Rhythmbox using
- * this backend for MTP support though; despite this bug basic
- * file operations works nicely.
- * - http://bugzilla.gnome.org/show_bug.cgi?id=520121
- *
- * - Need to test this with a native gio version of gedit that should
- * use replace() directly instead of fooling around with ~-style
- * backup files
- *
- * - support for multiple storage heads
- * - need a device that supports this
- * - should be different mounts so need to infect GHalVolumeMonitor with libgphoto2
- * - probably not a huge priority to add
- * - might help properly resolve the hack we're doing in ensure_ignore_prefix()
- * - http://bugzilla.gnome.org/show_bug.cgi?id=520123
- *
- * - adding a payload cache don't make much sense as libgphoto2 has a LRU cache already
- * - (see comment in the do_close_write() function)
- *
- * - Support PTP/IP devices nicely
- * - Need hardware for testing
- * - Should actually work out of the box; just try mounting e.g.
- * gphoto2://[ptpip:<something]/ from either Nautilus or via
- * gvfs-mount(1).
- * - Need to automatically unmount when the device stops answering
- * - May need authentication bits
- * - Need integration into network://
- * - does such devices use DNS-SD or UPNP?
- *
- */
-
-struct _GVfsBackendGphoto2
-{
- GVfsBackend parent_instance;
-
- /* a gphoto2 specific identifier for the gphoto2 camera such as usb:001,041 */
- char *gphoto2_port;
- GPContext *context;
- Camera *camera;
-
- /* see comment in ensure_ignore_prefix() */
- char *ignore_prefix;
-
- /* list of open files */
- int num_open_files_for_reading;
-
- DBusConnection *dbus_connection;
- LibHalContext *hal_ctx;
- char *hal_udi;
- char *hal_name;
- char *hal_icon_name;
-
- /* whether we can write to the device */
- gboolean can_write;
-
- /* This lock protects all members in this class that are not
- * used both on the main thread and on the IO thread.
- *
- * It is used, among other places, in the try_* functions to return
- * already cached data quickly (to e.g. enumerate and get file info
- * while we're reading or writing a file from the device).
- *
- * Must only be held for very short amounts of time (e.g. no IO).
- */
- GMutex *lock;
-
- /* CACHES */
-
- /* free_space is set to -1 if we don't know or have modified the
- * device since last time we read it. If -1 we can't do
- * try_query_fs_info() and will fall back to do_query_fs_info().
- */
- gint64 free_space;
- gint64 capacity;
-
- /* fully qualified path -> GFileInfo */
- GHashTable *info_cache;
-
- /* dir name -> CameraList of (sub-) directory names in given directory */
- GHashTable *dir_name_cache;
-
- /* dir name -> CameraList of file names in given directory */
- GHashTable *file_name_cache;
-
- /* monitors (only used on the IO thread) */
- GList *dir_monitor_proxies;
- GList *file_monitor_proxies;
-
- /* list of open write handles (only used on the IO thread) */
- GList *open_write_handles;
-};
-
-G_DEFINE_TYPE (GVfsBackendGphoto2, g_vfs_backend_gphoto2, G_VFS_TYPE_BACKEND);
-
-/* ------------------------------------------------------------------------------------------------- */
-
-typedef struct {
- /* this is the path of the dir/file including ignore_prefix */
- char *path;
- GVfsMonitor *vfs_monitor;
-} MonitorProxy;
-
-static void
-monitor_proxy_free (MonitorProxy *proxy)
-{
- g_free (proxy->path);
- /* vfs_monitor is owned by the gvfs core; see the functions
- * vfs_dir_monitor_destroyed() and do_create_monitor()
- */
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-typedef struct {
- /* filename as given from the vfs without ignore prefix e.g. /foo.txt */
- char *filename;
-
- /* filename with ignore prefix splitted into dir and name; e.g. "/store_00010001/" and "foo.txt" */
- char *dir;
- char *name;
-
- char *data;
- unsigned long int size;
- unsigned long int cursor;
- unsigned long int allocated_size;
-
- gboolean job_is_replace;
- gboolean job_is_append_to;
-
- gboolean delete_before;
-
- gboolean is_dirty;
-} WriteHandle;
-
-/* how much more memory to ask for when using g_realloc() when writing a file */
-#define WRITE_INCREMENT 4096
-
-typedef struct {
- CameraFile *file;
-
- const char *data;
- unsigned long int size;
- unsigned long int cursor;
-} ReadHandle;
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-DEBUG (const gchar *message, ...)
-{
-#ifdef DEBUG_SHOW_TRACES
- va_list args;
- va_start (args, message);
- g_vfprintf (stderr, message, args);
- va_end (args);
- g_fprintf (stderr, "\n");
- fflush (stderr);
-#endif
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static int commit_write_handle (GVfsBackendGphoto2 *gphoto2_backend, WriteHandle *write_handle);
-
-static void
-write_handle_free (WriteHandle *write_handle)
-{
- g_free (write_handle->filename);
- g_free (write_handle->dir);
- g_free (write_handle->name);
- g_free (write_handle->data);
- g_free (write_handle);
-}
-
-/* This must be called before reading from the device to ensure that
- * all pending writes are written to the device.
- *
- * Must only be called on the IO thread.
- */
-static void
-ensure_not_dirty (GVfsBackendGphoto2 *gphoto2_backend)
-{
- GList *l;
-
- for (l = gphoto2_backend->open_write_handles; l != NULL; l = l->next)
- {
- WriteHandle *write_handle = l->data;
-
- DEBUG ("ensure_not_dirty: looking at handle for '%s", write_handle->filename);
-
- if (write_handle->is_dirty)
- commit_write_handle (gphoto2_backend, write_handle);
- }
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-/* used when gphoto2 will take ownership of this data for it's LRU cache - and will use free(3) to free it */
-static char *
-dup_for_gphoto2 (char *gmem, unsigned long int size)
-{
- char *mem;
- mem = malloc (size);
- memcpy (mem, gmem, size);
- return mem;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-monitors_emit_internal (GVfsBackendGphoto2 *gphoto2_backend,
- const char *dir,
- const char *name,
- GFileMonitorEvent event,
- const char *event_name)
-{
- GList *l;
- char *filepath;
-
- g_return_if_fail (g_str_has_prefix (dir, gphoto2_backend->ignore_prefix));
-
- DEBUG ("monitors_emit_internal() %s for '%s' '%s'", event_name, dir, name);
-
- for (l = gphoto2_backend->dir_monitor_proxies; l != NULL; l = l->next)
- {
- MonitorProxy *proxy = l->data;
- if (strcmp (proxy->path, dir) == 0)
- {
- char *path;
- path = g_build_filename (dir + strlen (gphoto2_backend->ignore_prefix), name, NULL);
- g_vfs_monitor_emit_event (proxy->vfs_monitor, event, path, NULL);
- DEBUG (" emitted %s for '%s' on dir monitor for '%s'", event_name, path, dir);
- g_free (path);
- }
- }
-
- filepath = g_build_filename (dir, name, NULL);
- for (l = gphoto2_backend->file_monitor_proxies; l != NULL; l = l->next)
- {
- MonitorProxy *proxy = l->data;
- if (strcmp (proxy->path, filepath) == 0)
- {
- const char *path = filepath + strlen (gphoto2_backend->ignore_prefix);
- g_vfs_monitor_emit_event (proxy->vfs_monitor, event, path, NULL);
- DEBUG (" emitted %s for '%s' on file monitor", event_name, path);
- }
- }
- g_free (filepath);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-/* call this when a file/directory have been added to a directory */
-static void
-monitors_emit_created (GVfsBackendGphoto2 *gphoto2_backend, const char *dir, const char *name)
-{
- DEBUG ("monitors_emit_created(): '%s' '%s'", dir, name);
- monitors_emit_internal (gphoto2_backend, dir, name, G_FILE_MONITOR_EVENT_CREATED, "CREATED");
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-/* call this when a file/directory have been deleted from a directory */
-static void
-monitors_emit_deleted (GVfsBackendGphoto2 *gphoto2_backend, const char *dir, const char *name)
-{
- DEBUG ("monitors_emit_deleted(): '%s' '%s'", dir, name);
- monitors_emit_internal (gphoto2_backend, dir, name, G_FILE_MONITOR_EVENT_DELETED, "DELETED");
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-/* call this when a file/directory have been changed in a directory */
-static void
-monitors_emit_changed (GVfsBackendGphoto2 *gphoto2_backend, const char *dir, const char *name)
-{
- DEBUG ("monitors_emit_changed(): '%s' '%s'", dir, name);
- monitors_emit_internal (gphoto2_backend, dir, name, G_FILE_MONITOR_EVENT_CHANGED, "CHANGED");
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-caches_invalidate_all (GVfsBackendGphoto2 *gphoto2_backend)
-{
- DEBUG ("caches_invalidate_all()");
-
- g_mutex_lock (gphoto2_backend->lock);
- if (gphoto2_backend->dir_name_cache != NULL)
- g_hash_table_remove_all (gphoto2_backend->dir_name_cache);
- if (gphoto2_backend->file_name_cache != NULL)
- g_hash_table_remove_all (gphoto2_backend->file_name_cache);
- if (gphoto2_backend->info_cache != NULL)
- g_hash_table_remove_all (gphoto2_backend->info_cache);
- gphoto2_backend->capacity = -1;
- gphoto2_backend->free_space = -1;
- g_mutex_unlock (gphoto2_backend->lock);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-caches_invalidate_free_space (GVfsBackendGphoto2 *gphoto2_backend)
-{
- g_mutex_lock (gphoto2_backend->lock);
- gphoto2_backend->free_space = -1;
- g_mutex_unlock (gphoto2_backend->lock);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-caches_invalidate_dir (GVfsBackendGphoto2 *gphoto2_backend, const char *dir)
-{
- DEBUG ("caches_invalidate_dir() for '%s'", dir);
- g_mutex_lock (gphoto2_backend->lock);
- g_hash_table_remove (gphoto2_backend->dir_name_cache, dir);
- g_hash_table_remove (gphoto2_backend->file_name_cache, dir);
- g_hash_table_remove (gphoto2_backend->info_cache, dir);
- g_mutex_unlock (gphoto2_backend->lock);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-caches_invalidate_file (GVfsBackendGphoto2 *gphoto2_backend, const char *dir, const char *name)
-{
- char *full_name;
-
- full_name = g_build_filename (dir, name, NULL);
-
- g_mutex_lock (gphoto2_backend->lock);
- /* this is essentially: caches_invalidate_dir (gphoto2_backend, dir); */
- g_hash_table_remove (gphoto2_backend->dir_name_cache, dir);
- g_hash_table_remove (gphoto2_backend->file_name_cache, dir);
- g_hash_table_remove (gphoto2_backend->info_cache, dir);
-
- g_hash_table_remove (gphoto2_backend->info_cache, full_name);
- g_mutex_unlock (gphoto2_backend->lock);
-
- DEBUG ("caches_invalidate_file() for '%s'", full_name);
- g_free (full_name);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static GError *
-get_error_from_gphoto2 (const char *message, int rc)
-{
- GError *error;
-
- switch (rc)
- {
- case GP_ERROR_FILE_EXISTS:
- case GP_ERROR_DIRECTORY_EXISTS:
- /* Translator: %s represents a more specific error message and %d the specific error code */
- error = g_error_new (G_IO_ERROR,
- G_IO_ERROR_EXISTS, _("%s: %d: Directory or file exists"), message, rc);
- break;
-
- case GP_ERROR_FILE_NOT_FOUND:
- case GP_ERROR_DIRECTORY_NOT_FOUND:
- /* Translator: %s represents a more specific error message and %d the specific error code */
- error = g_error_new (G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND, _("%s: %d: No such file or directory"), message, rc);
- break;
-
- case GP_ERROR_PATH_NOT_ABSOLUTE:
- /* Translator: %s represents a more specific error message and %d the specific error code */
- error = g_error_new (G_IO_ERROR,
- G_IO_ERROR_INVALID_FILENAME, _("%s: %d: Invalid filename"), message, rc);
- break;
-
- case GP_ERROR_NOT_SUPPORTED:
- /* Translator: %s represents a more specific error message and %d the specific error code */
- error = g_error_new (G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED, _("%s: %d: Not Supported"), message, rc);
- break;
-
- default:
- error = g_error_new (G_IO_ERROR,
- G_IO_ERROR_FAILED, "%s: %d: %s", message, rc, gp_result_as_string (rc));
- break;
- }
- return error;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-release_device (GVfsBackendGphoto2 *gphoto2_backend)
-{
- GList *l;
-
- g_free (gphoto2_backend->gphoto2_port);
- gphoto2_backend->gphoto2_port = NULL;
-
- if (gphoto2_backend->context != NULL)
- {
- gp_context_unref (gphoto2_backend->context);
- gphoto2_backend->context = NULL;
- }
-
- if (gphoto2_backend->camera != NULL)
- {
- gp_camera_unref (gphoto2_backend->camera);
- gphoto2_backend->camera = NULL;
- }
-
- if (gphoto2_backend->dbus_connection != NULL)
- {
- dbus_connection_close (gphoto2_backend->dbus_connection);
- dbus_connection_unref (gphoto2_backend->dbus_connection);
- gphoto2_backend->dbus_connection = NULL;
- }
-
- if (gphoto2_backend->hal_ctx != NULL)
- {
- libhal_ctx_free (gphoto2_backend->hal_ctx);
- gphoto2_backend->hal_ctx = NULL;
-
- }
- g_free (gphoto2_backend->hal_udi);
- gphoto2_backend->hal_udi = NULL;
- g_free (gphoto2_backend->hal_name);
- gphoto2_backend->hal_name = NULL;
- g_free (gphoto2_backend->hal_icon_name);
- gphoto2_backend->hal_icon_name = NULL;
-
- g_free (gphoto2_backend->ignore_prefix);
- gphoto2_backend->ignore_prefix = NULL;
-
- if (gphoto2_backend->info_cache != NULL)
- {
- g_hash_table_unref (gphoto2_backend->info_cache);
- gphoto2_backend->info_cache = NULL;
- }
- if (gphoto2_backend->dir_name_cache != NULL)
- {
- g_hash_table_unref (gphoto2_backend->dir_name_cache);
- gphoto2_backend->dir_name_cache = NULL;
- }
- if (gphoto2_backend->file_name_cache != NULL)
- {
- g_hash_table_unref (gphoto2_backend->file_name_cache);
- gphoto2_backend->file_name_cache = NULL;
- }
-
- for (l = gphoto2_backend->dir_monitor_proxies; l != NULL; l = l->next)
- {
- MonitorProxy *proxy = l->data;
- monitor_proxy_free (proxy);
- }
- g_list_free (gphoto2_backend->dir_monitor_proxies);
- gphoto2_backend->dir_monitor_proxies = NULL;
-
- for (l = gphoto2_backend->file_monitor_proxies; l != NULL; l = l->next)
- {
- MonitorProxy *proxy = l->data;
- monitor_proxy_free (proxy);
- }
- g_list_free (gphoto2_backend->file_monitor_proxies);
- gphoto2_backend->file_monitor_proxies = NULL;
-
- if (gphoto2_backend->lock != NULL)
- {
- g_mutex_free (gphoto2_backend->lock);
- gphoto2_backend->lock = NULL;
- }
- gphoto2_backend->capacity = -1;
- gphoto2_backend->free_space = -1;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-g_vfs_backend_gphoto2_finalize (GObject *object)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (object);
-
- DEBUG ("finalizing %p", object);
-
- release_device (gphoto2_backend);
-
- if (G_OBJECT_CLASS (g_vfs_backend_gphoto2_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_gphoto2_parent_class)->finalize) (object);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-#ifdef DEBUG_SHOW_LIBGPHOTO2_OUTPUT
-static void
-_gphoto2_logger_func (GPLogLevel level, const char *domain, const char *format, va_list args, void *data)
-{
- g_fprintf (stderr, "libgphoto2: %s: ", domain);
- g_vfprintf (stderr, message, args);
- va_end (args);
- g_fprintf (stderr, "\n");
-}
-#endif
-
-static void
-g_vfs_backend_gphoto2_init (GVfsBackendGphoto2 *gphoto2_backend)
-{
- GVfsBackend *backend = G_VFS_BACKEND (gphoto2_backend);
- GMountSpec *mount_spec;
-
- DEBUG ("initing %p", gphoto2_backend);
-
- g_vfs_backend_set_display_name (backend, "gphoto2");
-
- mount_spec = g_mount_spec_new ("gphoto2");
- g_vfs_backend_set_mount_spec (backend, mount_spec);
- g_mount_spec_unref (mount_spec);
-
-#ifdef DEBUG_SHOW_LIBGPHOTO2_OUTPUT
- gp_log_add_func (GP_LOG_ALL, _gphoto2_logger_func, NULL);
-#endif
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static char *
-compute_icon_name (GVfsBackendGphoto2 *gphoto2_backend)
-{
- char *result;
-
- if (gphoto2_backend->hal_icon_name == NULL)
- {
- result = g_strdup_printf ("camera-photo");
- }
- else
- {
- result = g_strdup (gphoto2_backend->hal_icon_name);
- }
-
- return result;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static char *
-compute_display_name (GVfsBackendGphoto2 *gphoto2_backend)
-{
- char *result;
-
- if (gphoto2_backend->hal_name == NULL)
- {
- /* Translator: %s represents the device, e.g. usb:001,042 */
- result = g_strdup_printf (_("Digital Camera (%s)"), gphoto2_backend->gphoto2_port);
- }
- else
- {
- result = g_strdup (gphoto2_backend->hal_name);
- }
-
- return result;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-find_udi_for_device (GVfsBackendGphoto2 *gphoto2_backend)
-{
- int num_camera_devices;
- int num_mtp_devices;
- int num_devices;
- char **camera_devices;
- char **mtp_devices;
- char **devices;
- int n, m;
- int usb_bus_num;
- int usb_device_num;
- char **tokens;
- char *endp;
- char *camera_x_content_types[] = {"x-content/image-dcf", NULL};
- char *music_player_x_content_types[] = {"x-content/audio-player", NULL};
-
- gphoto2_backend->hal_udi = NULL;
-
- /* parse the usb:001,041 string */
-
- if (!g_str_has_prefix (gphoto2_backend->gphoto2_port, "usb:"))
- {
- return;
- }
-
- tokens = g_strsplit (gphoto2_backend->gphoto2_port + 4, ",", 0);
- if (g_strv_length (tokens) != 2)
- {
- g_strfreev (tokens);
- return;
- }
-
- usb_bus_num = strtol (tokens[0], &endp, 10);
- if (*endp != '\0')
- {
- g_strfreev (tokens);
- return;
- }
-
- usb_device_num = strtol (tokens[1], &endp, 10);
- if (*endp != '\0')
- {
- g_strfreev (tokens);
- return;
- }
-
- g_strfreev (tokens);
-
- DEBUG ("Parsed '%s' into bus=%d device=%d", gphoto2_backend->gphoto2_port, usb_bus_num, usb_device_num);
-
- camera_devices = libhal_find_device_by_capability (gphoto2_backend->hal_ctx,
- "camera",
- &num_camera_devices,
- NULL);
- mtp_devices = libhal_find_device_by_capability (gphoto2_backend->hal_ctx,
- "portable_audio_player",
- &num_mtp_devices,
- NULL);
- for (m = 0; m < 2 && gphoto2_backend->hal_udi == NULL; m++)
- {
- devices = m == 0 ? camera_devices : mtp_devices;
- num_devices = m == 0 ? num_camera_devices : num_mtp_devices;
-
- if (devices != NULL)
- {
- for (n = 0; n < num_devices && gphoto2_backend->hal_udi == NULL; n++)
- {
- char *udi = devices[n];
- LibHalPropertySet *ps;
-
- ps = libhal_device_get_all_properties (gphoto2_backend->hal_ctx, udi, NULL);
- if (ps != NULL)
- {
- const char *subsystem;
-
- subsystem = libhal_ps_get_string (ps, "info.subsystem");
- if (subsystem != NULL && strcmp (subsystem, "usb") == 0)
- {
- int device_usb_bus_num;
- int device_usb_device_num;
- const char *icon_from_hal;
- const char *name_from_hal;
-
- device_usb_bus_num = libhal_ps_get_int32 (ps, "usb.bus_number");
- device_usb_device_num = libhal_ps_get_int32 (ps, "usb.linux.device_number");
- icon_from_hal = libhal_ps_get_string (ps, "info.desktop.icon");
- name_from_hal = libhal_ps_get_string (ps, "info.desktop.name");
-
- DEBUG ("looking at usb device '%s' with bus=%d, device=%d",
- udi, device_usb_bus_num, device_usb_device_num);
-
- if (device_usb_bus_num == usb_bus_num &&
- device_usb_device_num == usb_device_num)
- {
- char *name;
- const char *parent_udi;
- LibHalPropertySet *ps2;
-
- DEBUG ("udi '%s' is the one!", udi);
-
- /* IMPORTANT:
- *
- * Keep this naming code in sync with
- *
- * hal/ghalvolume;do_update_from_hal_for_camera()
- */
- name = NULL;
- parent_udi = libhal_ps_get_string (ps, "info.parent");
- if (name_from_hal != NULL)
- {
- name = g_strdup (name_from_hal);
- }
- else if (parent_udi != NULL)
- {
- ps2 = libhal_device_get_all_properties (gphoto2_backend->hal_ctx, parent_udi, NULL);
- if (ps2 != NULL)
- {
- const char *vendor;
- const char *product;
-
- vendor = libhal_ps_get_string (ps2, "usb_device.vendor");
- product = libhal_ps_get_string (ps2, "usb_device.product");
- if (vendor == NULL)
- {
- if (product != NULL)
- name = g_strdup (product);
- }
- else
- {
- if (product != NULL)
- name = g_strdup_printf ("%s %s", vendor, product);
- else
- {
- if (m == 0)
- /* Translator: %s is the vendor name, e.g. Panasonic */
- name = g_strdup_printf (_("%s Camera"), vendor);
- else
- /* Translator: %s is the vendor name, e.g. Panasonic */
- name = g_strdup_printf (_("%s Audio Player"), vendor);
- }
- }
- libhal_free_property_set (ps2);
- }
- }
- if (name == NULL)
- {
- if (m == 0)
- name = g_strdup (_("Camera"));
- else
- name = g_strdup (_("Audio Player"));
- }
-
- gphoto2_backend->hal_udi = g_strdup (udi);
- gphoto2_backend->hal_name = name;
- if (icon_from_hal != NULL)
- {
- gphoto2_backend->hal_icon_name = g_strdup (icon_from_hal);
- }
- else
- {
- if (m == 1)
- {
- gphoto2_backend->hal_icon_name = g_strdup ("multimedia-player");
- }
- else
- {
- gphoto2_backend->hal_icon_name = g_strdup ("camera-photo");
- }
- }
-
- /* TODO: should we sniff the files instead? */
- if (m == 0)
- {
- g_vfs_backend_set_x_content_types (G_VFS_BACKEND (gphoto2_backend),
- camera_x_content_types);
- }
- else
- {
- g_vfs_backend_set_x_content_types (G_VFS_BACKEND (gphoto2_backend),
- music_player_x_content_types);
- }
-
- }
-
- }
-
- libhal_free_property_set (ps);
- }
- }
- libhal_free_string_array (devices);
- }
- }
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-_hal_device_removed (LibHalContext *hal_ctx, const char *udi)
-{
- GVfsBackendGphoto2 *gphoto2_backend;
-
- gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (libhal_ctx_get_user_data (hal_ctx));
-
- if (gphoto2_backend->hal_udi != NULL && strcmp (udi, gphoto2_backend->hal_udi) == 0)
- {
- DEBUG ("we have been removed!");
-
- /* nuke all caches so we're a bit more valgrind friendly */
- caches_invalidate_all (gphoto2_backend);
-
- /* TODO: need a cleaner way to force unmount ourselves */
- exit (1);
- }
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-split_filename_with_ignore_prefix (GVfsBackendGphoto2 *gphoto2_backend, const char *filename, char **dir, char **name)
-{
- char *s;
-
- s = g_path_get_dirname (filename);
- if (s[0] == '/')
- *dir = g_strconcat (gphoto2_backend->ignore_prefix, s + 1, NULL);
- else
- *dir = g_strconcat (gphoto2_backend->ignore_prefix, s, NULL);
- g_free (s);
-
- if (strcmp (filename, "/") == 0)
- *name = g_strdup ("");
- else
- *name = g_path_get_basename (filename);
-
- s = *dir;
- if (s[strlen(s)] == '/')
- s[strlen(s)] = '\0';
-
- /*DEBUG ("split_filename_with_ignore_prefix: '%s' -> '%s' '%s'", filename, *dir, *name);*/
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static char *
-add_ignore_prefix (GVfsBackendGphoto2 *gphoto2_backend, const char *filename)
-{
- char *result;
-
- if (filename[0] == '/')
- result = g_strconcat (gphoto2_backend->ignore_prefix, filename + 1, NULL);
- else
- result = g_strconcat (gphoto2_backend->ignore_prefix, filename, NULL);
-
- /*DEBUG ("add_ignore_prefix: '%s' -> '%s'", filename, result);*/
- return result;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-/* the passed 'dir' variable must contain ignore_prefix */
-static gboolean
-file_get_info (GVfsBackendGphoto2 *gphoto2_backend,
- const char *dir,
- const char *name,
- GFileInfo *info,
- GError **error,
- gboolean try_cache_only)
-{
- int rc;
- gboolean ret;
- CameraFileInfo gp_info;
- char *full_path;
- GFileInfo *cached_info;
- GTimeVal mtime;
- char *mime_type;
- GIcon *icon;
- unsigned int n;
-
- ret = FALSE;
-
- full_path = g_build_filename (dir, name, NULL);
- DEBUG ("file_get_info() try_cache_only=%d dir='%s', name='%s'\n"
- " full_path='%s'",
- try_cache_only, dir, name, full_path, gphoto2_backend->ignore_prefix);
-
-
- /* first look up cache */
- g_mutex_lock (gphoto2_backend->lock);
- cached_info = g_hash_table_lookup (gphoto2_backend->info_cache, full_path);
- if (cached_info != NULL)
- {
- g_file_info_copy_into (cached_info, info);
- g_mutex_unlock (gphoto2_backend->lock);
- DEBUG (" Using cached info %p for '%s'", cached_info, full_path);
- ret = TRUE;
- goto out;
- }
- g_mutex_unlock (gphoto2_backend->lock);
-
- if (try_cache_only)
- goto out;
-
- ensure_not_dirty (gphoto2_backend);
-
- DEBUG (" No cached info for '%s'", full_path);
-
- /* Since we're caching stuff, make sure all information we store is set */
- g_file_info_unset_attribute_mask (info);
-
- /* handle root directory */
- if (strcmp (full_path, gphoto2_backend->ignore_prefix) == 0 || strcmp (full_path, "/") == 0)
- {
- char *display_name;
- display_name = compute_display_name (gphoto2_backend);
- g_file_info_set_display_name (info, display_name);
- g_file_info_set_name (info, display_name);
- g_free (display_name);
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
- g_file_info_set_content_type (info, "inode/directory");
- g_file_info_set_size (info, 0);
- icon = g_themed_icon_new ("folder");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, TRUE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, gphoto2_backend->can_write);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, gphoto2_backend->can_write);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE, TRUE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME, FALSE);
- ret = TRUE;
- DEBUG (" Generating info (root folder) for '%s'", full_path);
- goto add_to_cache;
- }
-
- rc = gp_camera_file_get_info (gphoto2_backend->camera,
- dir,
- name,
- &gp_info,
- gphoto2_backend->context);
- if (rc != 0)
- {
- CameraList *list;
- gboolean is_folder;
-
- /* gphoto2 doesn't know about this file.. it may be a folder; try that */
- is_folder = FALSE;
- gp_list_new (&list);
- rc = gp_camera_folder_list_folders (gphoto2_backend->camera,
- dir,
- list,
- gphoto2_backend->context);
- if (rc == 0)
- {
- for (n = 0; n < gp_list_count (list) && !is_folder; n++)
- {
- const char *folder_name;
- gp_list_get_name (list, n, &folder_name);
- if (strcmp (folder_name, name) == 0)
- {
- is_folder = TRUE;
- }
- }
- }
- gp_list_free (list);
-
- if (is_folder)
- {
- g_file_info_set_name (info, name);
- g_file_info_set_display_name (info, name);
- icon = g_themed_icon_new ("folder");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
- g_file_info_set_content_type (info, "inode/directory");
- g_file_info_set_size (info, 0);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, TRUE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, gphoto2_backend->can_write);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, gphoto2_backend->can_write);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE, TRUE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME, gphoto2_backend->can_write);
- g_file_info_set_is_hidden (info, name != NULL && name[0] == '.');
- ret = TRUE;
- DEBUG (" Generating info (folder) for '%s'", full_path);
- goto add_to_cache;
- }
-
- /* nope, not a folder either.. error out.. */
- if (error != NULL)
- {
- *error = g_error_new (G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file or directory"));
- }
- goto out;
- }
-
- g_file_info_set_name (info, name);
- g_file_info_set_display_name (info, name);
- g_file_info_set_file_type (info, G_FILE_TYPE_REGULAR);
-
- if (gp_info.file.fields & GP_FILE_INFO_SIZE)
- {
- g_file_info_set_size (info, gp_info.file.size);
- }
- else
- {
- /* not really sure this is the right thing to do... */
- g_file_info_set_size (info, 0);
- }
-
- /* TODO: We really should sniff the file / look at file extensions
- * instead of relying on gp_info.file.type... but sniffing the file
- * is no fun since we (currently) can't do partial reads with the
- * libgphoto2 API :-/
- */
- mime_type = NULL;
- if (gp_info.file.fields & GP_FILE_INFO_TYPE)
- {
- /* application/x-unknown is a bogus mime type return by some
- * devices (such as Sandisk Sansa music players) - ignore it.
- */
- if (strcmp (gp_info.file.type, "application/x-unknown") != 0)
- {
- mime_type = g_strdup (gp_info.file.type);
- }
- }
- if (mime_type == NULL)
- mime_type = g_content_type_guess (name, NULL, 0, NULL);
- if (mime_type == NULL)
- mime_type = g_strdup ("application/octet-stream");
- g_file_info_set_content_type (info, mime_type);
-
- icon = g_content_type_get_icon (mime_type);
- DEBUG (" got icon %p for mime_type '%s'", icon, mime_type);
- if (icon != NULL)
- {
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- }
- g_free (mime_type);
-
-
- if (gp_info.file.fields & GP_FILE_INFO_MTIME)
- mtime.tv_sec = gp_info.file.mtime;
- else
- mtime.tv_sec = 0;
- mtime.tv_usec = 0;
- g_file_info_set_modification_time (info, &mtime);
-
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, TRUE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, gphoto2_backend->can_write);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, gphoto2_backend->can_write);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME, gphoto2_backend->can_write);
- g_file_info_set_is_hidden (info, name != NULL && name[0] == '.');
-
- if (gp_info.file.fields & GP_FILE_INFO_PERMISSIONS) {
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
- gp_info.file.permissions & GP_FILE_PERM_DELETE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE,
- gp_info.file.permissions & GP_FILE_PERM_DELETE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME,
- gp_info.file.permissions & GP_FILE_PERM_DELETE);
- }
-
- ret = TRUE;
- DEBUG (" Generating info (file) for '%s'", full_path);
-
- add_to_cache:
- /* add this sucker to the cache */
- if (ret == TRUE)
- {
-#ifndef DEBUG_NO_CACHING
- cached_info = g_file_info_dup (info);
- DEBUG (" Storing cached info %p for '%s'", cached_info, full_path);
- g_mutex_lock (gphoto2_backend->lock);
- g_hash_table_insert (gphoto2_backend->info_cache, g_strdup (full_path), cached_info);
- g_mutex_unlock (gphoto2_backend->lock);
-#endif
- }
-
- out:
- g_free (full_path);
- return ret;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static gboolean
-is_directory (GVfsBackendGphoto2 *gphoto2_backend, const char *dir, const char *name)
-{
- GFileInfo *info;
- gboolean ret;
-
- ret = FALSE;
-
- info = g_file_info_new ();
- if (!file_get_info (gphoto2_backend, dir, name, info, NULL, FALSE))
- goto out;
-
- if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
- ret = TRUE;
-
- out:
- g_object_unref (info);
- return ret;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static gboolean
-is_regular (GVfsBackendGphoto2 *gphoto2_backend, const char *dir, const char *name)
-{
- GFileInfo *info;
- gboolean ret;
-
- ret = FALSE;
-
- info = g_file_info_new ();
- if (!file_get_info (gphoto2_backend, dir, name, info, NULL, FALSE))
- goto out;
-
- if (g_file_info_get_file_type (info) == G_FILE_TYPE_REGULAR)
- ret = TRUE;
-
- out:
- g_object_unref (info);
- return ret;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static gboolean
-is_directory_empty (GVfsBackendGphoto2 *gphoto2_backend, const char *dir)
-{
- CameraList *list;
- gboolean ret;
- int rc;
- int num_dirs;
- int num_files;
-
- DEBUG ("is_directory_empty begin (%s)", dir);
-
- /* TODO: use cache */
-
- ret = FALSE;
- num_dirs = 0;
- num_files = 0;
-
- gp_list_new (&list);
- rc = gp_camera_folder_list_files (gphoto2_backend->camera,
- dir,
- list,
- gphoto2_backend->context);
- if (rc == 0)
- num_files = gp_list_count (list);
- gp_list_free (list);
-
- if (num_files > 0)
- goto out;
-
- gp_list_new (&list);
- rc = gp_camera_folder_list_folders (gphoto2_backend->camera,
- dir,
- list,
- gphoto2_backend->context);
- if (rc == 0)
- num_dirs = gp_list_count (list);
- gp_list_free (list);
-
- if (num_dirs == 0 && num_files == 0)
- ret = TRUE;
-
- out:
- DEBUG (" is_directory_empty (%s) -> %d", dir, ret);
- return ret;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-/* The PTP gphoto2 backend puts an annoying virtual store_00010001
- * directory in the root (in fact 00010001 can be any hexedecimal
- * digit).
- *
- * We want to skip that as the x-content detection expects to find the
- * DCIM/ folder. As such, this function tries to detect the presence
- * of such a folder in the root and, if found, sets a variable that is
- * prepended to any path passed to libgphoto2. This is cached for as
- * long as we got a connection to libgphoto2. If this operation fails
- * then the passed job will be cancelled and this function will return
- * FALSE.
- *
- * This function needs to be called from do_mount().
- */
-static gboolean
-ensure_ignore_prefix (GVfsBackendGphoto2 *gphoto2_backend, GVfsJob *job)
-{
- int rc;
- char *prefix;
- GError *error;
- CameraList *list;
-
- /* already set */
- if (gphoto2_backend->ignore_prefix != NULL)
- return TRUE;
-
- /* check folders in / - if there is exactly one folder of the form "store_" followed by eight
- * hexadecimal digits.. then use that as ignore_prefix.. otherwise don't use anything
- */
-
- gp_list_new (&list);
- rc = gp_camera_folder_list_folders (gphoto2_backend->camera,
- "/",
- list,
- gphoto2_backend->context);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Failed to get folder list"), rc);
- g_vfs_job_failed_from_error (job, error);
- g_error_free (error);
- return FALSE;
- }
-
- prefix = NULL;
-
- if (gp_list_count (list) == 1)
- {
- char *name;
- const char *s;
- unsigned int n;
-
- gp_list_get_name (list, 0, &s);
-
- name = g_ascii_strdown (s, -1);
- if (g_str_has_prefix (name, "store_") && strlen (name) == 14)
- {
- for (n = 6; n < 14; n++)
- {
- if (!g_ascii_isxdigit (name[n]))
- {
- break;
- }
- }
- if (n == 14)
- {
- prefix = g_strconcat ("/", name, "/", NULL);
- }
- }
-
- g_free (name);
- }
- gp_list_free (list);
-
- if (prefix == NULL)
- gphoto2_backend->ignore_prefix = g_strdup ("/");
- else
- gphoto2_backend->ignore_prefix = prefix;
-
- return TRUE;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- char *fuse_name;
- char *display_name;
- char *icon_name;
- const char *host;
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- GError *error = NULL;
- GMountSpec *gphoto2_mount_spec;
- int rc;
- GPPortInfo info;
- GPPortInfoList *il = NULL;
- int n;
- DBusError dbus_error;
- CameraStorageInformation *storage_info;
- int num_storage_info;
-
- DEBUG ("do_mount %p", gphoto2_backend);
-
- /* setup libhal */
-
- dbus_error_init (&dbus_error);
- gphoto2_backend->dbus_connection = dbus_bus_get_private (DBUS_BUS_SYSTEM, &dbus_error);
- if (dbus_error_is_set (&dbus_error))
- {
- release_device (gphoto2_backend);
- dbus_error_free (&dbus_error);
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Cannot connect to the system bus"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- dbus_connection_set_exit_on_disconnect (gphoto2_backend->dbus_connection, FALSE);
-
- gphoto2_backend->hal_ctx = libhal_ctx_new ();
- if (gphoto2_backend->hal_ctx == NULL)
- {
- release_device (gphoto2_backend);
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Cannot create libhal context"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- _g_dbus_connection_integrate_with_main (gphoto2_backend->dbus_connection);
- libhal_ctx_set_dbus_connection (gphoto2_backend->hal_ctx, gphoto2_backend->dbus_connection);
-
- if (!libhal_ctx_init (gphoto2_backend->hal_ctx, &dbus_error))
- {
- release_device (gphoto2_backend);
- dbus_error_free (&dbus_error);
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Cannot initialize libhal"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- libhal_ctx_set_device_removed (gphoto2_backend->hal_ctx, _hal_device_removed);
- libhal_ctx_set_user_data (gphoto2_backend->hal_ctx, gphoto2_backend);
-
- /* setup gphoto2 */
-
- host = g_mount_spec_get (mount_spec, "host");
- DEBUG (" host='%s'", host);
- if (host == NULL || strlen (host) < 3 || host[0] != '[' || host[strlen (host) - 1] != ']')
- {
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("No device specified"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (gphoto2_backend);
- return;
- }
-
- gphoto2_backend->gphoto2_port = g_strdup (host + 1);
- gphoto2_backend->gphoto2_port[strlen (gphoto2_backend->gphoto2_port) - 1] = '\0';
-
- DEBUG (" decoded host='%s'", gphoto2_backend->gphoto2_port);
-
- find_udi_for_device (gphoto2_backend);
-
- gphoto2_backend->context = gp_context_new ();
- if (gphoto2_backend->context == NULL)
- {
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Cannot create gphoto2 context"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (gphoto2_backend);
- return;
- }
-
- rc = gp_camera_new (&(gphoto2_backend->camera));
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error creating camera"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (gphoto2_backend);
- return;
- }
-
-
- il = NULL;
-
- rc = gp_port_info_list_new (&il);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error loading device information"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (gphoto2_backend);
- return;
- }
-
- rc = gp_port_info_list_load (il);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error loading device information"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (gphoto2_backend);
- return;
- }
-
- DEBUG (" gphoto2_port='%s'", gphoto2_backend->gphoto2_port);
-
- n = gp_port_info_list_lookup_path (il, gphoto2_backend->gphoto2_port);
- if (n == GP_ERROR_UNKNOWN_PORT)
- {
- error = get_error_from_gphoto2 (_("Error looking up device information"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (gphoto2_backend);
- return;
- }
-
- rc = gp_port_info_list_get_info (il, n, &info);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error getting device information"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (gphoto2_backend);
- return;
- }
-
- DEBUG (" '%s' '%s' '%s'", info.name, info.path, info.library_filename);
-
- /* set port */
- rc = gp_camera_set_port_info (gphoto2_backend->camera, info);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error setting up camera communications port"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (gphoto2_backend);
- return;
- }
- gp_port_info_list_free(il);
-
- rc = gp_camera_init (gphoto2_backend->camera, gphoto2_backend->context);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error initializing camera"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- release_device (gphoto2_backend);
- return;
- }
-
- if (!ensure_ignore_prefix (gphoto2_backend, G_VFS_JOB (job)))
- {
- release_device (gphoto2_backend);
- return;
- }
-
- /* Translator: %s represents the device, e.g. usb:001,042 */
- fuse_name = g_strdup_printf (_("gphoto2 mount on %s"), gphoto2_backend->gphoto2_port);
- icon_name = compute_icon_name (gphoto2_backend);
- display_name = compute_display_name (gphoto2_backend);
- g_vfs_backend_set_stable_name (backend, fuse_name);
- g_vfs_backend_set_display_name (backend, display_name);
- g_vfs_backend_set_icon_name (backend, icon_name);
- g_free (display_name);
- g_free (icon_name);
- g_free (fuse_name);
-
- gphoto2_backend->can_write = FALSE;
- rc = gp_camera_get_storageinfo (gphoto2_backend->camera, &storage_info, &num_storage_info, gphoto2_backend->context);
- if (rc == 0)
- {
- if (num_storage_info >= 1)
- {
- if (storage_info[0].fields & GP_STORAGEINFO_ACCESS && storage_info[0].access == GP_STORAGEINFO_AC_READWRITE)
- {
- gphoto2_backend->can_write = TRUE;
- }
- }
- }
- DEBUG (" can_write = %d", gphoto2_backend->can_write);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- gphoto2_backend->free_space = -1;
-
- gphoto2_backend->lock = g_mutex_new ();
-
- gphoto2_mount_spec = g_mount_spec_new ("gphoto2");
- g_mount_spec_set (gphoto2_mount_spec, "host", host);
- g_vfs_backend_set_mount_spec (backend, gphoto2_mount_spec);
- g_mount_spec_unref (gphoto2_mount_spec);
-
- gphoto2_backend->info_cache = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- g_object_unref);
-
- gphoto2_backend->dir_name_cache = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- (GDestroyNotify) gp_list_unref);
-
- gphoto2_backend->file_name_cache = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- (GDestroyNotify) gp_list_unref);
-
- DEBUG (" mounted %p", gphoto2_backend);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- const char *host;
- GError *error = NULL;
- GMountSpec *gphoto2_mount_spec;
-
- DEBUG ("try_mount %p", backend);
-
- /* TODO: Hmm.. apparently we have to set the mount spec in
- * try_mount(); doing it in mount() do_won't work..
- */
- host = g_mount_spec_get (mount_spec, "host");
- DEBUG (" host=%s", host);
- if (host == NULL)
- {
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("No camera specified"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return TRUE;
- }
-
- gphoto2_mount_spec = g_mount_spec_new ("gphoto2");
- g_mount_spec_set (gphoto2_mount_spec, "host", host);
- g_vfs_backend_set_mount_spec (backend, gphoto2_mount_spec);
- g_mount_spec_unref (gphoto2_mount_spec);
- return FALSE;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_unmount (GVfsBackend *backend,
- GVfsJobUnmount *job)
-{
- GError *error;
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- int num_open_files;
-
- num_open_files = gphoto2_backend->num_open_files_for_reading + g_list_length (gphoto2_backend->open_write_handles);
-
- if (num_open_files > 0)
- {
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_BUSY,
- ngettext("File system is busy: %d open file",
- "File system is busy: %d open files",
- num_open_files),
- num_open_files);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- release_device (gphoto2_backend);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- DEBUG ("unmounted %p", backend);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-free_read_handle (ReadHandle *read_handle)
-{
- if (read_handle->file != NULL)
- {
- gp_file_unref (read_handle->file);
- }
- g_free (read_handle);
-}
-
-static void
-do_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- int rc;
- GError *error;
- ReadHandle *read_handle;
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- char *dir;
- char *name;
-
- DEBUG ("open_for_read (%s)", filename);
-
- ensure_not_dirty (gphoto2_backend);
-
- split_filename_with_ignore_prefix (gphoto2_backend, filename, &dir, &name);
-
- if (is_directory (gphoto2_backend, dir, name))
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_IS_DIRECTORY,
- _("Can't open directory"));
- goto out;
- }
-
- if (!is_regular (gphoto2_backend, dir, name))
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file"));
- goto out;
- }
-
- read_handle = g_new0 (ReadHandle, 1);
- rc = gp_file_new (&read_handle->file);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error creating file object"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- free_read_handle (read_handle);
- goto out;
- }
-
- rc = gp_camera_file_get (gphoto2_backend->camera,
- dir,
- name,
- GP_FILE_TYPE_NORMAL,
- read_handle->file,
- gphoto2_backend->context);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error getting file"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- free_read_handle (read_handle);
- goto out;
- }
-
- rc = gp_file_get_data_and_size (read_handle->file, &read_handle->data, &read_handle->size);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error getting data from file"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- free_read_handle (read_handle);
- goto out;
- }
-
- DEBUG (" data=%p size=%ld handle=%p", read_handle->data, read_handle->size, read_handle);
-
- g_mutex_lock (gphoto2_backend->lock);
- gphoto2_backend->num_open_files_for_reading++;
- g_mutex_unlock (gphoto2_backend->lock);
-
- read_handle->cursor = 0;
-
- g_vfs_job_open_for_read_set_can_seek (job, TRUE);
- g_vfs_job_open_for_read_set_handle (job, GINT_TO_POINTER (read_handle));
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- out:
- g_free (name);
- g_free (dir);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static gboolean
-try_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize bytes_requested)
-{
- //GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- ReadHandle *read_handle = (ReadHandle *) handle;
- gsize bytes_left;
- gsize bytes_to_copy;
-
- DEBUG ("do_read() %d @ %ld of %ld, handle=%p", bytes_requested, read_handle->cursor, read_handle->size, handle);
-
- if (read_handle->cursor >= read_handle->size)
- {
- bytes_to_copy = 0;
- goto out;
- }
-
- bytes_left = read_handle->size - read_handle->cursor;
- if (bytes_requested > bytes_left)
- bytes_to_copy = bytes_left;
- else
- bytes_to_copy = bytes_requested;
-
- memcpy (buffer, read_handle->data + read_handle->cursor, bytes_to_copy);
- read_handle->cursor += bytes_to_copy;
-
- out:
-
- g_vfs_job_read_set_size (job, bytes_to_copy);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- return TRUE;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static gboolean
-try_seek_on_read (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle handle,
- goffset offset,
- GSeekType type)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- ReadHandle *read_handle = (ReadHandle *) handle;
- long new_offset;
-
- DEBUG ("seek_on_read() offset=%d, type=%d, handle=%p", (int)offset, type, handle);
-
- switch (type)
- {
- default:
- case G_SEEK_SET:
- new_offset = offset;
- break;
- case G_SEEK_CUR:
- new_offset = read_handle->cursor + offset;
- break;
- case G_SEEK_END:
- new_offset = read_handle->size + offset;
- break;
- }
-
- if (new_offset < 0 || new_offset > read_handle->size)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_FAILED,
- _("Error seeking in stream on camera %s"), gphoto2_backend->gphoto2_port);
- }
- else
- {
- read_handle->cursor = new_offset;
- g_vfs_job_seek_read_set_offset (job, offset);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- return TRUE;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-/* cannot be async because we unref the CameraFile */
-static void
-do_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle handle)
-{
- ReadHandle *read_handle = (ReadHandle *) handle;
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
-
- DEBUG ("close_read() handle=%p", handle);
-
- free_read_handle (read_handle);
-
- g_mutex_lock (gphoto2_backend->lock);
- gphoto2_backend->num_open_files_for_reading--;
- g_mutex_unlock (gphoto2_backend->lock);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- GError *error;
- char *dir;
- char *name;
-
- DEBUG ("query_info (%s)", filename);
-
- split_filename_with_ignore_prefix (gphoto2_backend, filename, &dir, &name);
-
- error = NULL;
- if (!file_get_info (gphoto2_backend, dir, name, info, &error, FALSE))
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
- else
- {
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-
- g_free (name);
- g_free (dir);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static gboolean
-try_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- char *dir;
- char *name;
- gboolean ret;
-
- DEBUG ("try_query_info (%s)", filename);
-
- ret = FALSE;
-
- split_filename_with_ignore_prefix (gphoto2_backend, filename, &dir, &name);
-
- if (!file_get_info (gphoto2_backend, dir, name, info, NULL, TRUE))
- {
- DEBUG (" BUU no info from cache for try_query_info (%s)", filename);
- goto out;
- }
- DEBUG (" YAY got info from cache for try_query_info (%s)", filename);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- ret = TRUE;
-
- out:
- g_free (name);
- g_free (dir);
- return ret;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *given_filename,
- GFileAttributeMatcher *matcher,
- GFileQueryInfoFlags flags)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- GFileInfo *info;
- GList *l;
- GError *error;
- CameraList *list;
- int n;
- int rc;
- char *filename;
- gboolean using_cached_dir_list;
- gboolean using_cached_file_list;
- char *as_dir;
- char *as_name;
-
- l = NULL;
- using_cached_dir_list = FALSE;
- using_cached_file_list = FALSE;
-
- filename = add_ignore_prefix (gphoto2_backend, given_filename);
- DEBUG ("enumerate (%s)", given_filename);
-
- split_filename_with_ignore_prefix (gphoto2_backend, given_filename, &as_dir, &as_name);
- if (!is_directory (gphoto2_backend, as_dir, as_name))
- {
- if (is_regular (gphoto2_backend, as_dir, as_name))
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_DIRECTORY,
- _("Not a directory"));
- }
- else
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file or directory"));
- }
- g_free (as_dir);
- g_free (as_name);
- return;
- }
- g_free (as_dir);
- g_free (as_name);
-
- /* first, list the folders */
- g_mutex_lock (gphoto2_backend->lock);
- list = g_hash_table_lookup (gphoto2_backend->dir_name_cache, filename);
- if (list == NULL)
- {
- g_mutex_unlock (gphoto2_backend->lock);
-
- ensure_not_dirty (gphoto2_backend);
-
- DEBUG (" Generating dir list for dir '%s'", filename);
-
- gp_list_new (&list);
- rc = gp_camera_folder_list_folders (gphoto2_backend->camera,
- filename,
- list,
- gphoto2_backend->context);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Failed to get folder list"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- g_free (filename);
- return;
- }
- }
- else
- {
- DEBUG (" Using cached dir list for dir '%s'", filename);
- using_cached_dir_list = TRUE;
- gp_list_ref (list);
- g_mutex_unlock (gphoto2_backend->lock);
- }
- for (n = 0; n < gp_list_count (list); n++)
- {
- const char *name;
-
- gp_list_get_name (list, n, &name);
- DEBUG (" enum folder '%s'", name);
- info = g_file_info_new ();
- error = NULL;
- if (!file_get_info (gphoto2_backend, filename, name, info, &error, FALSE))
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- g_list_foreach (l, (GFunc) g_object_unref, NULL);
- g_list_free (l);
- gp_list_free (list);
- return;
- }
- l = g_list_append (l, info);
- }
- if (!using_cached_dir_list)
- {
-#ifndef DEBUG_NO_CACHING
- g_mutex_lock (gphoto2_backend->lock);
- g_hash_table_insert (gphoto2_backend->dir_name_cache, g_strdup (filename), list);
- g_mutex_unlock (gphoto2_backend->lock);
-#endif
- }
- else
- {
- g_mutex_lock (gphoto2_backend->lock);
- gp_list_unref (list);
- g_mutex_unlock (gphoto2_backend->lock);
- }
-
-
- /* then list the files in each folder */
- g_mutex_lock (gphoto2_backend->lock);
- list = g_hash_table_lookup (gphoto2_backend->file_name_cache, filename);
- if (list == NULL)
- {
- g_mutex_unlock (gphoto2_backend->lock);
- ensure_not_dirty (gphoto2_backend);
-
- DEBUG (" Generating file list for dir '%s'", filename);
-
- gp_list_new (&list);
- rc = gp_camera_folder_list_files (gphoto2_backend->camera,
- filename,
- list,
- gphoto2_backend->context);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Failed to get file list"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- g_free (filename);
- return;
- }
- }
- else
- {
- DEBUG (" Using cached file list for dir '%s'", filename);
- using_cached_file_list = TRUE;
- gp_list_ref (list);
- g_mutex_unlock (gphoto2_backend->lock);
- }
- for (n = 0; n < gp_list_count (list); n++)
- {
- const char *name;
-
- gp_list_get_name (list, n, &name);
- DEBUG (" enum file '%s'", name);
-
- info = g_file_info_new ();
- error = NULL;
- if (!file_get_info (gphoto2_backend, filename, name, info, &error, FALSE))
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- g_list_foreach (l, (GFunc) g_object_unref, NULL);
- g_list_free (l);
- gp_list_free (list);
- return;
- }
- l = g_list_append (l, info);
- }
- if (!using_cached_file_list)
- {
-#ifndef DEBUG_NO_CACHING
- g_mutex_lock (gphoto2_backend->lock);
- g_hash_table_insert (gphoto2_backend->file_name_cache, g_strdup (filename), list);
- g_mutex_unlock (gphoto2_backend->lock);
-#endif
- }
- else
- {
- g_mutex_lock (gphoto2_backend->lock);
- gp_list_unref (list);
- g_mutex_unlock (gphoto2_backend->lock);
- }
-
- /* and we're done */
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- g_vfs_job_enumerate_add_infos (job, l);
- g_list_foreach (l, (GFunc) g_object_unref, NULL);
- g_list_free (l);
- g_vfs_job_enumerate_done (job);
-
- g_free (filename);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static gboolean
-try_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *given_filename,
- GFileAttributeMatcher *matcher,
- GFileQueryInfoFlags flags)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- GFileInfo *info;
- GList *l;
- GError *error;
- CameraList *list;
- int n;
- char *filename;
- const char *name;
-
- l = NULL;
-
- filename = add_ignore_prefix (gphoto2_backend, given_filename);
- DEBUG ("try_enumerate (%s)", given_filename);
-
- /* first, list the folders */
- g_mutex_lock (gphoto2_backend->lock);
- list = g_hash_table_lookup (gphoto2_backend->dir_name_cache, filename);
- if (list == NULL)
- {
- g_mutex_unlock (gphoto2_backend->lock);
- goto error_not_cached;
- }
- gp_list_ref (list);
- g_mutex_unlock (gphoto2_backend->lock);
- for (n = 0; n < gp_list_count (list); n++)
- {
- gp_list_get_name (list, n, &name);
- DEBUG (" try_enum folder '%s'", name);
- info = g_file_info_new ();
- if (!file_get_info (gphoto2_backend, filename, name, info, &error, TRUE))
- {
- g_mutex_lock (gphoto2_backend->lock);
- gp_list_unref (list);
- g_mutex_unlock (gphoto2_backend->lock);
- goto error_not_cached;
- }
- l = g_list_append (l, info);
- }
- g_mutex_lock (gphoto2_backend->lock);
- gp_list_unref (list);
- g_mutex_unlock (gphoto2_backend->lock);
-
- /* then list the files in each folder */
- g_mutex_lock (gphoto2_backend->lock);
- list = g_hash_table_lookup (gphoto2_backend->file_name_cache, filename);
- if (list == NULL)
- {
- g_mutex_unlock (gphoto2_backend->lock);
- goto error_not_cached;
- }
- gp_list_ref (list);
- g_mutex_unlock (gphoto2_backend->lock);
- for (n = 0; n < gp_list_count (list); n++)
- {
- gp_list_get_name (list, n, &name);
- DEBUG (" try_enum file '%s'", name);
-
- info = g_file_info_new ();
- if (!file_get_info (gphoto2_backend, filename, name, info, &error, TRUE))
- {
- g_mutex_lock (gphoto2_backend->lock);
- gp_list_unref (list);
- g_mutex_unlock (gphoto2_backend->lock);
- goto error_not_cached;
- }
- l = g_list_append (l, info);
- }
- g_mutex_lock (gphoto2_backend->lock);
- gp_list_unref (list);
- g_mutex_unlock (gphoto2_backend->lock);
-
- /* and we're done */
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- g_vfs_job_enumerate_add_infos (job, l);
- g_list_foreach (l, (GFunc) g_object_unref, NULL);
- g_list_free (l);
- g_vfs_job_enumerate_done (job);
-
- g_free (filename);
- DEBUG (" YAY got info from cache for try_enumerate (%s)", given_filename);
- return TRUE;
-
- error_not_cached:
- g_list_foreach (l, (GFunc) g_object_unref, NULL);
- g_list_free (l);
-
- g_free (filename);
- DEBUG (" BUU no info from cache for try_enumerate (%s)", given_filename);
- return FALSE;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_query_fs_info (GVfsBackend *backend,
- GVfsJobQueryFsInfo *job,
- const char *filename,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher)
-{
- int rc;
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- CameraStorageInformation *storage_info;
- int num_storage_info;
-
- DEBUG ("query_fs_info (%s)", filename);
-
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE, "gphoto2");
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW, G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, !gphoto2_backend->can_write);
-
- rc = gp_camera_get_storageinfo (gphoto2_backend->camera, &storage_info, &num_storage_info, gphoto2_backend->context);
- if (rc == 0)
- {
- if (num_storage_info >= 1)
- {
- /* for now we only support a single storage head */
- if (storage_info[0].fields & GP_STORAGEINFO_MAXCAPACITY)
- {
- g_mutex_lock (gphoto2_backend->lock);
- gphoto2_backend->capacity = storage_info[0].capacitykbytes * 1024;
- g_mutex_unlock (gphoto2_backend->lock);
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_FILESYSTEM_SIZE,
- (guint64) gphoto2_backend->capacity);
- }
-
- if (storage_info[0].fields & GP_STORAGEINFO_FREESPACEKBYTES)
- {
- g_mutex_lock (gphoto2_backend->lock);
- gphoto2_backend->free_space = storage_info[0].freekbytes * 1024;
- g_mutex_unlock (gphoto2_backend->lock);
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_FILESYSTEM_FREE,
- (guint64) gphoto2_backend->free_space);
- }
- }
- DEBUG (" got %d storage_info objects", num_storage_info);
- }
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static gboolean
-try_query_fs_info (GVfsBackend *backend,
- GVfsJobQueryFsInfo *job,
- const char *filename,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- gboolean ret;
- gint64 free_space;
- gint64 capacity;
-
- DEBUG ("try_query_fs_info (%s)", filename);
-
- ret = FALSE;
-
- g_mutex_lock (gphoto2_backend->lock);
- free_space = gphoto2_backend->free_space;
- capacity = gphoto2_backend->capacity;
- g_mutex_unlock (gphoto2_backend->lock);
-
- if (free_space == -1 || capacity == -1)
- {
- DEBUG (" BUU no info from cache for try_query_fs_info (%s)", filename);
- goto out;
- }
- DEBUG (" YAY got info from cache for try_query_fs_info (%s)", filename);
-
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE, "gphoto2");
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW, G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, !gphoto2_backend->can_write);
- g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE, (guint64) capacity);
- g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE, (guint64) free_space);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- ret = TRUE;
- out:
- return ret;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_make_directory (GVfsBackend *backend,
- GVfsJobMakeDirectory *job,
- const char *filename)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- char *name;
- char *dir;
- int rc;
- GError *error;
-
- DEBUG ("make_directory (%s)", filename);
-
- ensure_not_dirty (gphoto2_backend);
-
- dir = NULL;
- name = NULL;
- error = NULL;
-
- if (!gphoto2_backend->can_write)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Not supported"));
- goto out;
- }
-
- split_filename_with_ignore_prefix (gphoto2_backend, filename, &dir, &name);
-
- rc = gp_camera_folder_make_dir (gphoto2_backend->camera,
- dir,
- name,
- gphoto2_backend->context);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error creating directory"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- goto out;
- }
-
- caches_invalidate_dir (gphoto2_backend, dir);
- caches_invalidate_free_space (gphoto2_backend);
- monitors_emit_created (gphoto2_backend, dir, name);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- out:
- g_free (dir);
- g_free (name);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static int
-do_slow_file_rename_in_same_dir (GVfsBackendGphoto2 *gphoto2_backend,
- const char *dir,
- const char *name,
- const char *new_name,
- gboolean allow_overwrite)
-{
- int rc;
- CameraFile *file;
- CameraFile *file_dest;
- const char *data;
- unsigned long int size;
-
- file = NULL;
- file_dest = NULL;
-
- DEBUG ("do_slow_file_rename_in_same_dir() '%s' '%s' -> '%s'", dir, name, new_name);
-
- rc = gp_file_new (&file);
- if (rc != 0)
- goto out;
-
- rc = gp_camera_file_get (gphoto2_backend->camera,
- dir,
- name,
- GP_FILE_TYPE_NORMAL,
- file,
- gphoto2_backend->context);
- if (rc != 0)
- goto out;
-
- rc = gp_file_get_data_and_size (file, &data, &size);
- if (rc != 0)
- goto out;
-
- rc = gp_file_new (&file_dest);
- if (rc != 0)
- goto out;
-
- rc = gp_file_copy (file_dest, file);
- if (rc != 0)
- goto out;
-
- rc = gp_file_set_name (file_dest, new_name);
- if (rc != 0)
- goto out;
-
- if (allow_overwrite)
- {
- gp_camera_file_delete (gphoto2_backend->camera,
- dir,
- new_name,
- gphoto2_backend->context);
- if (rc != 0)
- {
- DEBUG (" file delete failed as part of slow rename rc=%d", rc);
- goto out;
- }
- }
-
- rc = gp_camera_folder_put_file (gphoto2_backend->camera, dir, file_dest, gphoto2_backend->context);
- if (rc != 0)
- goto out;
-
- rc = gp_camera_file_delete (gphoto2_backend->camera,
- dir,
- name,
- gphoto2_backend->context);
- if (rc != 0)
- {
- /* at least try to clean up the newly created file... */
- gp_camera_file_delete (gphoto2_backend->camera,
- dir,
- new_name,
- gphoto2_backend->context);
- goto out;
- }
-
- out:
- if (file != NULL)
- gp_file_unref (file);
- if (file_dest != NULL)
- gp_file_unref (file_dest);
- return rc;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static int
-do_file_rename_in_same_dir (GVfsBackendGphoto2 *gphoto2_backend,
- const char *dir,
- const char *name,
- const char *new_name,
- gboolean allow_overwrite)
-{
- /* TODO: The libgphoto2 API speaks of just using
- * gp_camera_file_set_info() to achieve this. However this
- * fails on the devices that I own. So fall back to the slow
- * method for now. Patches welcome for someone with a device
- * where the above mentioned trick works.
- */
- return do_slow_file_rename_in_same_dir (gphoto2_backend, dir, name, new_name, allow_overwrite);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static int
-do_dir_rename_in_same_dir (GVfsBackendGphoto2 *gphoto2_backend,
- const char *dir,
- const char *name,
- const char *new_name)
-{
- int rc;
- char *dir_name;
-
- dir_name = g_build_filename (dir, name, NULL);
-
- DEBUG ("do_dir_rename_in_same_dir() '%s' '%s' -> '%s' ('%s')", dir, name, new_name, dir_name);
-
- /* TODO: Support non-empty folders by recursively renaming stuff.
- * Or that might be too dangerous as it's not exactly atomic.
- * And renaming files may be slow; see do_file_rename_in_same_dir() above.
- */
- if (is_directory_empty (gphoto2_backend, dir_name))
- {
- rc = gp_camera_folder_make_dir (gphoto2_backend->camera,
- dir,
- new_name,
- gphoto2_backend->context);
- if (rc != 0)
- goto out;
-
- rc = gp_camera_folder_remove_dir (gphoto2_backend->camera,
- dir,
- name,
- gphoto2_backend->context);
- if (rc != 0)
- goto out;
- }
- else
- {
- rc = GP_ERROR_NOT_SUPPORTED;
- }
-
- out:
- g_free (dir_name);
- return rc;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_set_display_name (GVfsBackend *backend,
- GVfsJobSetDisplayName *job,
- const char *filename,
- const char *display_name)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- char *name;
- char *dir;
- int rc;
- char *dir_name;
- GError *error;
- char *new_name;
-
- ensure_not_dirty (gphoto2_backend);
-
- DEBUG ("set_display_name() '%s' -> '%s'", filename, display_name);
-
- dir = NULL;
- name = NULL;
- dir_name = NULL;
- new_name = NULL;
-
- if (!gphoto2_backend->can_write)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Not supported"));
- goto out;
- }
-
- split_filename_with_ignore_prefix (gphoto2_backend, filename, &dir, &name);
-
- /* refuse is desired name is already taken */
- if (is_directory (gphoto2_backend, dir, display_name) ||
- is_regular (gphoto2_backend, dir, display_name))
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_EXISTS,
- _("Name already exists"));
- goto out;
- }
-
- /* ensure name is not too long - otherwise it might screw up enumerating
- * the folder on some devices
- */
- if (strlen (display_name) > 63)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("New name too long"));
- goto out;
- }
-
- if (is_directory (gphoto2_backend, dir, name))
- {
- /* dir renaming */
- rc = do_dir_rename_in_same_dir (gphoto2_backend, dir, name, display_name);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error renaming dir"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- goto out;
- }
- caches_invalidate_file (gphoto2_backend, dir, name);
- }
- else
- {
- /* file renaming */
- rc = do_file_rename_in_same_dir (gphoto2_backend, dir, name, display_name, FALSE);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error renaming file"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- goto out;
- }
- caches_invalidate_file (gphoto2_backend, dir, name);
- }
-
-
- /* emit on monitor */
- monitors_emit_deleted (gphoto2_backend, dir, name);
- monitors_emit_created (gphoto2_backend, dir, display_name);
-
- new_name = g_build_filename (dir + strlen (gphoto2_backend->ignore_prefix), display_name, NULL);
- g_vfs_job_set_display_name_set_new_path (job, new_name);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- out:
- g_free (dir);
- g_free (name);
- g_free (dir_name);
- g_free (new_name);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_delete (GVfsBackend *backend,
- GVfsJobDelete *job,
- const char *filename)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- char *name;
- char *dir;
- int rc;
- GError *error;
- char *dir_name;
-
- ensure_not_dirty (gphoto2_backend);
-
- DEBUG ("delete() '%s'", filename);
-
- dir = NULL;
- name = NULL;
- dir_name = NULL;
-
- if (!gphoto2_backend->can_write)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Not supported"));
- goto out;
- }
-
- split_filename_with_ignore_prefix (gphoto2_backend, filename, &dir, &name);
-
- if (is_directory (gphoto2_backend, dir, name))
- {
- dir_name = add_ignore_prefix (gphoto2_backend, filename);
- if (!is_directory_empty (gphoto2_backend, dir_name))
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_EMPTY,
- _("Directory '%s' is not empty"), filename);
- goto out;
- }
- else
- {
- rc = gp_camera_folder_remove_dir (gphoto2_backend->camera,
- dir,
- name,
- gphoto2_backend->context);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error deleting directory"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- goto out;
- }
- caches_invalidate_file (gphoto2_backend, dir, name);
- caches_invalidate_free_space (gphoto2_backend);
- monitors_emit_deleted (gphoto2_backend, dir, name);
- }
- }
- else
- {
- if (!is_regular (gphoto2_backend, dir, name))
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No such file or directory"));
- goto out;
- }
-
- rc = gp_camera_file_delete (gphoto2_backend->camera,
- dir,
- name,
- gphoto2_backend->context);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error deleting file"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- goto out;
- }
-
- caches_invalidate_file (gphoto2_backend, dir, name);
- caches_invalidate_free_space (gphoto2_backend);
- monitors_emit_deleted (gphoto2_backend, dir, name);
- }
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- out:
- g_free (dir);
- g_free (name);
- g_free (dir_name);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_create_internal (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags,
- gboolean job_is_replace,
- gboolean job_is_append_to)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- WriteHandle *handle;
- char *dir;
- char *name;
-
- ensure_not_dirty (gphoto2_backend);
-
- dir = NULL;
- name = NULL;
-
- if (!gphoto2_backend->can_write)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Not supported"));
- goto out;
- }
-
- split_filename_with_ignore_prefix (gphoto2_backend, filename, &dir, &name);
-
- if (is_directory (gphoto2_backend, dir, name))
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_IS_DIRECTORY,
- _("Can't write to directory"));
- goto out;
- }
-
- /* unless we're replacing or appending.. error out if file already exists */
- if (is_regular (gphoto2_backend, dir, name))
- {
- if (! (job_is_replace || job_is_append_to))
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_EXISTS,
- _("File exists"));
- goto out;
- }
- }
- else
- {
- if (job_is_replace || job_is_append_to)
- {
- /* so we're not really replacing or appending; dont fail these
- * operations; just turn them into create instead...
- */
- job_is_replace = FALSE;
- job_is_append_to = FALSE;
- }
- }
-
- handle = g_new0 (WriteHandle, 1);
- handle->filename = g_strdup (filename);
- handle->dir = g_strdup (dir);
- handle->name = g_strdup (name);
- handle->job_is_replace = job_is_replace;
- handle->job_is_append_to = job_is_append_to;
- handle->is_dirty = TRUE;
-
- /* if we're appending to a file read in all of the file to memory */
- if (job_is_append_to)
- {
- int rc;
- GError *error;
- CameraFile *file;
- const char *data;
- unsigned long int size;
-
- rc = gp_file_new (&file);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Cannot allocate new file to append to"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- write_handle_free (handle);
- goto out;
- }
-
- rc = gp_camera_file_get (gphoto2_backend->camera,
- dir,
- name,
- GP_FILE_TYPE_NORMAL,
- file,
- gphoto2_backend->context);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Cannot read file to append to"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- write_handle_free (handle);
- gp_file_unref (file);
- goto out;
- }
-
- rc = gp_file_get_data_and_size (file, &data, &size);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Cannot get data of file to append to"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- write_handle_free (handle);
- gp_file_unref (file);
- goto out;
- }
-
- handle->data = g_malloc (size + WRITE_INCREMENT);
- handle->allocated_size = size + WRITE_INCREMENT;
- handle->size = size;
- handle->cursor = size;
- memcpy (handle->data, data, size);
- gp_file_unref (file);
-
- }
- else
- {
- handle->data = g_malloc (WRITE_INCREMENT);
- handle->allocated_size = WRITE_INCREMENT;
- }
-
- g_vfs_job_open_for_write_set_handle (job, handle);
- g_vfs_job_open_for_write_set_can_seek (job, TRUE);
-
- gphoto2_backend->open_write_handles = g_list_prepend (gphoto2_backend->open_write_handles, handle);
-
- DEBUG (" handle=%p", handle);
-
- /* make sure we invalidate the dir and the file */
- caches_invalidate_file (gphoto2_backend, dir, name);
-
- /* emit on the monitor - hopefully some client won't need info
- * about this (to avoid committing dirty bits midwrite) before
- * the write is done...
- */
- if (job_is_replace || job_is_append_to)
- monitors_emit_changed (gphoto2_backend, dir, name);
- else
- monitors_emit_created (gphoto2_backend, dir, name);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- out:
- g_free (dir);
- g_free (name);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_create (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
-{
- DEBUG ("create() '%s' flags=0x%04x", filename, flags);
-
- return do_create_internal (backend, job, filename, flags, FALSE, FALSE);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_replace (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- const char *etag,
- gboolean make_backup,
- GFileCreateFlags flags)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- char *dir;
- char *name;
-
- DEBUG ("replace() '%s' etag='%s' make_backup=%d flags=0x%04x", filename, etag, make_backup, flags);
-
- dir = NULL;
- name = NULL;
- split_filename_with_ignore_prefix (gphoto2_backend, filename, &dir, &name);
-
- /* write a new file
- * - will delete the existing one when done in do_close_write()
- */
- do_create_internal (backend, job, filename, flags, TRUE, FALSE);
-
- g_free (dir);
- g_free (name);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_append_to (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- char *dir;
- char *name;
-
- DEBUG ("append_to() '%s' flags=0x%04x", filename, flags);
-
- dir = NULL;
- name = NULL;
- split_filename_with_ignore_prefix (gphoto2_backend, filename, &dir, &name);
-
- /* write a new file
- * - will read existing data in do_create_internal
- * - will delete the existing one when done in do_close_write()
- */
- do_create_internal (backend, job, filename, flags, FALSE, TRUE);
-
- g_free (dir);
- g_free (name);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_write (GVfsBackend *backend,
- GVfsJobWrite *job,
- GVfsBackendHandle _handle,
- char *buffer,
- gsize buffer_size)
-{
- WriteHandle *handle = _handle;
-
- DEBUG ("write() %p, '%s', %d bytes", handle, handle->filename, buffer_size);
-
- /* ensure we have enough room */
- if (handle->cursor + buffer_size > handle->allocated_size)
- {
- unsigned long int new_allocated_size;
- new_allocated_size = ((handle->cursor + buffer_size) / WRITE_INCREMENT + 1) * WRITE_INCREMENT;
- handle->data = g_realloc (handle->data, new_allocated_size);
- handle->allocated_size = new_allocated_size;
- DEBUG (" allocated_size is now %ld bytes)", handle->allocated_size);
- }
-
-
- memcpy (handle->data + handle->cursor, buffer, buffer_size);
- handle->cursor += buffer_size;
-
- if (handle->cursor > handle->size)
- handle->size = handle->cursor;
-
- /* this will make us dirty */
- handle->is_dirty = TRUE;
-
- g_vfs_job_write_set_written_size (job, buffer_size);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_seek_on_write (GVfsBackend *backend,
- GVfsJobSeekWrite *job,
- GVfsBackendHandle handle,
- goffset offset,
- GSeekType type)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- WriteHandle *write_handle = handle;
- long new_offset;
-
- DEBUG ("seek_on_write() %p '%s' offset=%d type=%d cursor=%ld size=%ld", write_handle, write_handle->filename, (int)offset, type, write_handle->cursor, write_handle->size);
-
- switch (type)
- {
- default:
- case G_SEEK_SET:
- new_offset = offset;
- break;
- case G_SEEK_CUR:
- new_offset = write_handle->cursor + offset;
- break;
- case G_SEEK_END:
- new_offset = write_handle->size + offset;
- break;
- }
-
- if (new_offset < 0 || new_offset > write_handle->size)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_FAILED,
- _("Error seeking in stream on camera %s"), gphoto2_backend->gphoto2_port);
- }
- else
- {
- write_handle->cursor = new_offset;
- g_vfs_job_seek_write_set_offset (job, offset);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-/* this functions updates the device with the data currently in write_handle */
-static int
-commit_write_handle (GVfsBackendGphoto2 *gphoto2_backend, WriteHandle *write_handle)
-{
- int rc;
- CameraFile *file;
-
- DEBUG ("commit_write_handle() '%s' of size %ld", write_handle->filename, write_handle->size);
-
- /* no need to write as we're not dirty */
- if (!write_handle->is_dirty)
- {
- DEBUG (" not dirty => not writing");
- return 0;
- }
-
- if (write_handle->delete_before ||
- (write_handle->job_is_replace || write_handle->job_is_append_to))
- {
- /* OK, so this is not atomic. But there's no way we can make it
- * atomic until rename works properly - see comments in
- * do_set_display_name() and why have do_slow_rename()...
- *
- * So first delete the existing file...
- */
- rc = gp_camera_file_delete (gphoto2_backend->camera,
- write_handle->dir,
- write_handle->name,
- gphoto2_backend->context);
- if (rc != 0)
- goto out;
-
- DEBUG (" deleted '%s' '%s' for delete_before=%d, job_is_replace=%d, job_is_append_to=%d",
- write_handle->dir, write_handle->name,
- write_handle->delete_before, write_handle->job_is_replace, write_handle->job_is_append_to);
- }
-
- rc = gp_file_new (&file);
- if (rc != 0)
- goto out;
-
- gp_file_set_type (file, GP_FILE_TYPE_NORMAL);
- gp_file_set_name (file, write_handle->name);
- gp_file_set_mtime (file, time (NULL));
- gp_file_set_data_and_size (file,
- dup_for_gphoto2 (write_handle->data, write_handle->size),
- write_handle->size);
-
- rc = gp_camera_folder_put_file (gphoto2_backend->camera, write_handle->dir, file, gphoto2_backend->context);
- if (rc != 0)
- {
- gp_file_unref (file);
- goto out;
- }
-
- DEBUG (" successfully wrote '%s' of %ld bytes", write_handle->filename, write_handle->size);
- monitors_emit_changed (gphoto2_backend, write_handle->dir, write_handle->name);
-
- gp_file_unref (file);
-
- out:
- write_handle->is_dirty = FALSE;
- write_handle->delete_before = TRUE;
-
- caches_invalidate_file (gphoto2_backend, write_handle->dir, write_handle->name);
- caches_invalidate_free_space (gphoto2_backend);
-
- return rc;
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_close_write (GVfsBackend *backend,
- GVfsJobCloseWrite *job,
- GVfsBackendHandle handle)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- WriteHandle *write_handle = handle;
- GError *error;
- int rc;
-
- DEBUG ("close_write() %p '%s' %ld bytes total", write_handle, write_handle->filename, write_handle->size);
-
- rc = commit_write_handle (gphoto2_backend, write_handle);
- if (rc != 0)
- {
- error = get_error_from_gphoto2 (_("Error writing file"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- goto out;
- }
-
- monitors_emit_changed (gphoto2_backend, write_handle->dir, write_handle->name);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- out:
- write_handle_free (write_handle);
- gphoto2_backend->open_write_handles = g_list_remove (gphoto2_backend->open_write_handles, write_handle);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-do_move (GVfsBackend *backend,
- GVfsJobMove *job,
- const char *source,
- const char *destination,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data)
-{
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- char *src_dir;
- char *src_name;
- char *dst_dir;
- char *dst_name;
- int rc;
- GError *error;
- gboolean mv_dir;
-
- DEBUG ("move() '%s' -> '%s' %04x)", source, destination, flags);
-
- ensure_not_dirty (gphoto2_backend);
-
- split_filename_with_ignore_prefix (gphoto2_backend, source, &src_dir, &src_name);
- split_filename_with_ignore_prefix (gphoto2_backend, destination, &dst_dir, &dst_name);
-
- /* this is an limited implementation that can only move files / folders in the same directory */
- if (strcmp (src_dir, dst_dir) != 0)
- {
- DEBUG (" not supported (not same directory)");
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Not supported (not same directory)"));
- goto out;
- }
-
- mv_dir = FALSE;
- if (is_directory (gphoto2_backend, src_dir, src_name))
- {
- if (is_directory (gphoto2_backend, dst_dir, dst_name))
- {
- DEBUG (" not supported (src is dir; dst is dir)");
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Not supported (src is dir, dst is dir)"));
- goto out;
- }
- else if (is_regular (gphoto2_backend, dst_dir, dst_name))
- {
- DEBUG (" not supported (src is dir; dst is existing file)");
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Not supported (src is dir, dst is existing file)"));
- goto out;
- }
- mv_dir = TRUE;
- }
- else
- {
- if (is_directory (gphoto2_backend, dst_dir, dst_name))
- {
- DEBUG (" not supported (src is file; dst is dir)");
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Not supported (src is file, dst is dir)"));
- goto out;
- }
- }
-
- /* ensure name is not too long - otherwise it might screw up enumerating
- * the folder on some devices
- */
- if (strlen (dst_name) > 63)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("New name too long"));
- goto out;
- }
-
- if (mv_dir)
- {
- DEBUG (" renaming dir");
- rc = do_dir_rename_in_same_dir (gphoto2_backend, src_dir, src_name, dst_name);
- if (rc != 0)
- {
- DEBUG (" error renaming dir");
- error = get_error_from_gphoto2 (_("Error renaming dir"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- goto out;
- }
- }
- else
- {
- DEBUG (" renaming file");
- rc = do_file_rename_in_same_dir (gphoto2_backend, src_dir, src_name, dst_name, flags & G_FILE_COPY_OVERWRITE);
- if (rc != 0)
- {
- DEBUG (" error renaming file");
- error = get_error_from_gphoto2 (_("Error renaming file"), rc);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- goto out;
- }
- }
-
- caches_invalidate_file (gphoto2_backend, src_dir, src_name);
- monitors_emit_deleted (gphoto2_backend, src_dir, src_name);
- monitors_emit_created (gphoto2_backend, src_dir, dst_name);
-
- DEBUG (" success");
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- out:
- g_free (src_dir);
- g_free (src_name);
- g_free (dst_dir);
- g_free (dst_name);
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-vfs_dir_monitor_destroyed (gpointer user_data, GObject *where_the_object_was)
-{
- GList *l;
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (user_data);
-
- DEBUG ("vfs_dir_monitor_destroyed()");
-
- for (l = gphoto2_backend->dir_monitor_proxies; l != NULL; l = l->next)
- {
- MonitorProxy *proxy = l->data;
- if (G_OBJECT (proxy->vfs_monitor) == where_the_object_was)
- {
- gphoto2_backend->dir_monitor_proxies = g_list_remove (gphoto2_backend->dir_monitor_proxies, proxy);
- DEBUG (" Removed dead dir monitor for '%s'", proxy->path);
- monitor_proxy_free (proxy);
- break;
- }
- }
-}
-
-static void
-do_create_dir_monitor (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags)
-{
- char *dir;
- char *name;
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- MonitorProxy *proxy;
-
- DEBUG ("create_dir_monitor (%s)", filename);
-
- split_filename_with_ignore_prefix (gphoto2_backend, filename, &dir, &name);
-
- proxy = g_new0 (MonitorProxy, 1);
- proxy->path = add_ignore_prefix (gphoto2_backend, filename);
- proxy->vfs_monitor = g_vfs_monitor_new (backend);
-
- gphoto2_backend->dir_monitor_proxies = g_list_prepend (gphoto2_backend->dir_monitor_proxies, proxy);
-
- g_vfs_job_create_monitor_set_monitor (job, proxy->vfs_monitor);
- g_object_weak_ref (G_OBJECT (proxy->vfs_monitor), vfs_dir_monitor_destroyed, gphoto2_backend);
- g_object_unref (proxy->vfs_monitor);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-vfs_file_monitor_destroyed (gpointer user_data, GObject *where_the_object_was)
-{
- GList *l;
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (user_data);
-
- DEBUG ("vfs_file_monitor_destroyed()");
-
- for (l = gphoto2_backend->file_monitor_proxies; l != NULL; l = l->next)
- {
- MonitorProxy *proxy = l->data;
- if (G_OBJECT (proxy->vfs_monitor) == where_the_object_was)
- {
- gphoto2_backend->dir_monitor_proxies = g_list_remove (gphoto2_backend->dir_monitor_proxies, proxy);
- DEBUG (" Removed dead file monitor for '%s'", proxy->path);
- monitor_proxy_free (proxy);
- break;
- }
- }
-}
-
-static void
-do_create_file_monitor (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags)
-{
- char *dir;
- char *name;
- GVfsBackendGphoto2 *gphoto2_backend = G_VFS_BACKEND_GPHOTO2 (backend);
- MonitorProxy *proxy;
-
- DEBUG ("create_file_monitor (%s)", filename);
-
- split_filename_with_ignore_prefix (gphoto2_backend, filename, &dir, &name);
-
- proxy = g_new0 (MonitorProxy, 1);
- proxy->path = add_ignore_prefix (gphoto2_backend, filename);
- proxy->vfs_monitor = g_vfs_monitor_new (backend);
-
- gphoto2_backend->file_monitor_proxies = g_list_prepend (gphoto2_backend->file_monitor_proxies, proxy);
-
- g_vfs_job_create_monitor_set_monitor (job, proxy->vfs_monitor);
- g_object_weak_ref (G_OBJECT (proxy->vfs_monitor), vfs_file_monitor_destroyed, gphoto2_backend);
- g_object_unref (proxy->vfs_monitor);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-/* ------------------------------------------------------------------------------------------------- */
-
-static void
-g_vfs_backend_gphoto2_class_init (GVfsBackendGphoto2Class *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_gphoto2_finalize;
-
- backend_class->try_mount = try_mount;
- backend_class->mount = do_mount;
- backend_class->unmount = do_unmount;
- backend_class->open_for_read = do_open_for_read;
- backend_class->try_read = try_read;
- backend_class->try_seek_on_read = try_seek_on_read;
- backend_class->close_read = do_close_read;
- backend_class->query_info = do_query_info;
- backend_class->enumerate = do_enumerate;
- backend_class->query_fs_info = do_query_fs_info;
- backend_class->make_directory = do_make_directory;
- backend_class->set_display_name = do_set_display_name;
- backend_class->delete = do_delete;
- backend_class->create = do_create;
- backend_class->replace = do_replace;
- backend_class->append_to = do_append_to;
- backend_class->write = do_write;
- backend_class->close_write = do_close_write;
- backend_class->seek_on_write = do_seek_on_write;
- backend_class->move = do_move;
- backend_class->create_dir_monitor = do_create_dir_monitor;
- backend_class->create_file_monitor = do_create_file_monitor;
-
- /* fast sync versions that only succeed if info is in the cache */
- backend_class->try_query_info = try_query_info;
- backend_class->try_enumerate = try_enumerate;
- backend_class->try_query_fs_info = try_query_fs_info;
-}
diff --git a/daemon/gvfsbackendgphoto2.h b/daemon/gvfsbackendgphoto2.h
deleted file mode 100644
index 33ad88a5..00000000
--- a/daemon/gvfsbackendgphoto2.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_GPHOTO2_H__
-#define __G_VFS_BACKEND_GPHOTO2_H__
-
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_GPHOTO2 (g_vfs_backend_gphoto2_get_type ())
-#define G_VFS_BACKEND_GPHOTO2(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_GPHOTO2, GVfsBackendGphoto2))
-#define G_VFS_BACKEND_GPHOTO2_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_GPHOTO2, GVfsBackendGphoto2Class))
-#define G_VFS_IS_BACKEND_GPHOTO2(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_GPHOTO2))
-#define G_VFS_IS_BACKEND_GPHOTO2_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_GPHOTO2))
-#define G_VFS_BACKEND_GPHOTO2_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_GPHOTO2, GVfsBackendGphoto2Class))
-
-typedef struct _GVfsBackendGphoto2 GVfsBackendGphoto2;
-typedef struct _GVfsBackendGphoto2Class GVfsBackendGphoto2Class;
-
-struct _GVfsBackendGphoto2Class
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_gphoto2_get_type (void) G_GNUC_CONST;
-
-GVfsBackendGphoto2 *g_vfs_backend_gphoto2_new (void);
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_GPHOTO2_H__ */
diff --git a/daemon/gvfsbackendhttp.c b/daemon/gvfsbackendhttp.c
deleted file mode 100644
index 04501e99..00000000
--- a/daemon/gvfsbackendhttp.c
+++ /dev/null
@@ -1,675 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Christian Kellner <gicmo@gnome.org>
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include <libsoup/soup.h>
-#include "gvfsbackendhttp.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobqueryfsinfo.h"
-#include "gvfsjobqueryattributes.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsdaemonprotocol.h"
-
-#include "soup-input-stream.h"
-
-
-G_DEFINE_TYPE (GVfsBackendHttp, g_vfs_backend_http, G_VFS_TYPE_BACKEND)
-
-static void
-g_vfs_backend_http_finalize (GObject *object)
-{
- GVfsBackendHttp *backend;
-
- backend = G_VFS_BACKEND_HTTP (object);
-
- if (backend->mount_base)
- soup_uri_free (backend->mount_base);
-
- soup_session_abort (backend->session);
- g_object_unref (backend->session);
-
- soup_session_abort (backend->session_async);
- g_object_unref (backend->session_async);
-
-
- if (G_OBJECT_CLASS (g_vfs_backend_http_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_http_parent_class)->finalize) (object);
-}
-
-#define DEBUG_MAX_BODY_SIZE (100 * 1024 * 1024)
-
-static void
-g_vfs_backend_http_init (GVfsBackendHttp *backend)
-{
- const char *debug;
-
- g_vfs_backend_set_user_visible (G_VFS_BACKEND (backend), FALSE);
-
- backend->session = soup_session_sync_new_with_options ("user-agent",
- "gvfs/" VERSION,
- NULL);
-
- backend->session_async = soup_session_async_new_with_options ("user-agent",
- "gvfs/" VERSION,
- NULL);
-
- /* Logging */
- debug = g_getenv ("GVFS_HTTP_DEBUG");
- if (debug)
- {
- SoupLogger *logger;
- SoupLoggerLogLevel level;
-
- if (g_ascii_strcasecmp (debug, "all") ||
- g_ascii_strcasecmp (debug, "body"))
- level = SOUP_LOGGER_LOG_BODY;
- else if (g_ascii_strcasecmp (debug, "header"))
- level = SOUP_LOGGER_LOG_HEADERS;
- else
- level = SOUP_LOGGER_LOG_MINIMAL;
-
- logger = soup_logger_new (level, DEBUG_MAX_BODY_SIZE);
- soup_logger_attach (logger, backend->session);
- soup_logger_attach (logger, backend->session_async);
- g_object_unref (logger);
- }
-
-}
-
-/* ************************************************************************* */
-/* public utility functions */
-
-SoupURI *
-http_backend_uri_for_filename (GVfsBackend *backend,
- const char *filename,
- gboolean is_dir)
-{
- GVfsBackendHttp *op_backend;
- SoupURI *uri;
- char *path;
-
- op_backend = G_VFS_BACKEND_HTTP (backend);
- uri = soup_uri_copy (op_backend->mount_base);
-
- /* "/" means "whatever mount_base is" */
- if (!strcmp (filename, "/"))
- return uri;
-
- /* Otherwise, we append filename to mount_base (which is assumed to
- * be a directory in this case).
- *
- * Add a "/" in cases where it is likely that the url is going
- * to be a directory to avoid redirections
- */
- if (is_dir == FALSE || g_str_has_suffix (filename, "/"))
- path = g_build_path ("/", uri->path, filename, NULL);
- else
- path = g_build_path ("/", uri->path, filename, "/", NULL);
-
- g_free (uri->path);
- uri->path = g_uri_escape_string (path, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH,
- FALSE);
- g_free (path);
-
- return uri;
-}
-
-char *
-http_uri_get_basename (const char *uri_str)
-{
- const char *parent;
- const char *path;
- char *to_free;
- char *basename;
- size_t len;
-
- if (uri_str == NULL || *uri_str == '\0')
- return NULL;
-
- path = uri_str;
-
- /* remove any leading slashes */
- while (*path == '/' || *path == ' ')
- path++;
-
- len = strlen (path);
-
- if (len == 0)
- return g_strdup ("/");
-
- /* remove any trailing slashes */
- while (path[len - 1] == '/' || path[len - 1] == ' ')
- len--;
-
- parent = g_strrstr_len (path, len, "/");
-
- if (parent)
- {
- parent++; /* skip the found / char */
- to_free = g_strndup (parent, (len - (parent - path)));
- }
- else
- to_free = g_strndup (path, len);
-
- basename = soup_uri_decode (to_free);
- g_free (to_free);
-
- return basename;
-}
-
-guint
-http_error_code_from_status (guint status)
-{
- switch (status) {
-
- case SOUP_STATUS_CANT_RESOLVE:
- case SOUP_STATUS_CANT_RESOLVE_PROXY:
- return G_IO_ERROR_HOST_NOT_FOUND;
-
- case SOUP_STATUS_CANCELLED:
- return G_IO_ERROR_CANCELLED;
-
- case SOUP_STATUS_UNAUTHORIZED:
- case SOUP_STATUS_PAYMENT_REQUIRED:
- case SOUP_STATUS_FORBIDDEN:
- return G_IO_ERROR_PERMISSION_DENIED;
-
- case SOUP_STATUS_NOT_FOUND:
- case SOUP_STATUS_GONE:
- return G_IO_ERROR_NOT_FOUND;
-
- case SOUP_STATUS_GATEWAY_TIMEOUT:
- return G_IO_ERROR_TIMED_OUT;
- }
-
- return G_IO_ERROR_FAILED;
-}
-
-
-static void
-g_vfs_job_failed_from_http_status (GVfsJob *job, guint status_code, const char *message)
-{
- switch (status_code) {
-
- case SOUP_STATUS_NOT_FOUND:
- g_vfs_job_failed_literal (job, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
- message);
- break;
-
- case SOUP_STATUS_UNAUTHORIZED:
- case SOUP_STATUS_PAYMENT_REQUIRED:
- case SOUP_STATUS_FORBIDDEN:
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
- _("HTTP Client Error: %s"), message);
- break;
- default:
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("HTTP Error: %s"), message);
- }
-}
-
-guint
-http_backend_send_message (GVfsBackend *backend,
- SoupMessage *msg)
-{
- GVfsBackendHttp *op_backend = G_VFS_BACKEND_HTTP (backend);
-
- return soup_session_send_message (op_backend->session, msg);
-}
-
-void
-http_backend_queue_message (GVfsBackend *backend,
- SoupMessage *msg,
- SoupSessionCallback callback,
- gpointer user_data)
-{
- GVfsBackendHttp *op_backend = G_VFS_BACKEND_HTTP (backend);
-
- soup_session_queue_message (op_backend->session_async, msg,
- callback, user_data);
-}
-/* ************************************************************************* */
-/* virtual functions overrides */
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendHttp *op_backend;
- const char *uri_str;
- char *path;
- SoupURI *uri;
- GMountSpec *real_mount_spec;
-
- op_backend = G_VFS_BACKEND_HTTP (backend);
-
- uri = NULL;
- uri_str = g_mount_spec_get (mount_spec, "uri");
-
- if (uri_str)
- uri = soup_uri_new (uri_str);
-
- g_print ("+ try_mount: %s\n", uri_str ? uri_str : "(null)");
-
- if (uri == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("Invalid mount spec"));
- return TRUE;
- }
-
- real_mount_spec = g_mount_spec_new ("http");
- g_mount_spec_set (real_mount_spec, "uri", uri_str);
-
- if (uri->path != NULL)
- {
- path = g_uri_unescape_string (uri->path, "/");
- g_free (real_mount_spec->mount_prefix);
- real_mount_spec->mount_prefix = g_mount_spec_canonicalize_path (path);
- g_free (path);
- }
-
- g_vfs_backend_set_mount_spec (backend, real_mount_spec);
-
- op_backend->mount_base = uri;
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- return TRUE;
-}
-
-/* *** open_read () *** */
-static void
-open_for_read_ready (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GInputStream *stream;
- GVfsJob *job;
- gboolean res;
- gboolean can_seek;
- GError *error;
-
- stream = G_INPUT_STREAM (source_object);
- error = NULL;
- job = G_VFS_JOB (user_data);
-
- res = soup_input_stream_send_finish (stream,
- result,
- &error);
- if (res == FALSE)
- {
- g_vfs_job_failed_literal (G_VFS_JOB (job),
- error->domain,
- error->code,
- error->message);
-
- g_error_free (error);
- return;
- }
-
- can_seek = G_IS_SEEKABLE (stream) && g_seekable_can_seek (G_SEEKABLE (stream));
-
- g_vfs_job_open_for_read_set_can_seek (G_VFS_JOB_OPEN_FOR_READ (job), can_seek);
- g_vfs_job_open_for_read_set_handle (G_VFS_JOB_OPEN_FOR_READ (job), stream);
- g_vfs_job_succeeded (job);
-}
-
-static gboolean
-try_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- GVfsBackendHttp *op_backend;
- GInputStream *stream;
- SoupMessage *msg;
- SoupURI *uri;
-
- op_backend = G_VFS_BACKEND_HTTP (backend);
- uri = http_backend_uri_for_filename (backend, filename, FALSE);
- msg = soup_message_new_from_uri (SOUP_METHOD_GET, uri);
- soup_uri_free (uri);
-
- stream = soup_input_stream_new (op_backend->session_async, msg);
- g_object_unref (msg);
-
- soup_input_stream_send_async (stream,
- G_PRIORITY_DEFAULT,
- G_VFS_JOB (job)->cancellable,
- open_for_read_ready,
- job);
- return TRUE;
-}
-
-/* *** read () *** */
-static void
-read_ready (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GInputStream *stream;
- GVfsJob *job;
- GError *error;
- gssize nread;
-
- stream = G_INPUT_STREAM (source_object);
- error = NULL;
- job = G_VFS_JOB (user_data);
-
- nread = g_input_stream_read_finish (stream, result, &error);
-
- if (nread < 0)
- {
- g_vfs_job_failed_literal (G_VFS_JOB (job),
- error->domain,
- error->code,
- error->message);
-
- g_error_free (error);
- return;
- }
-
- g_vfs_job_read_set_size (G_VFS_JOB_READ (job), nread);
- g_vfs_job_succeeded (job);
-
-}
-
-static gboolean
-try_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize bytes_requested)
-{
- GInputStream *stream;
-
- stream = G_INPUT_STREAM (handle);
-
- g_input_stream_read_async (stream,
- buffer,
- bytes_requested,
- G_PRIORITY_DEFAULT,
- G_VFS_JOB (job)->cancellable,
- read_ready,
- job);
- return TRUE;
-}
-
-static gboolean
-try_seek_on_read (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle handle,
- goffset offset,
- GSeekType type)
-{
- GInputStream *stream;
- GError *error = NULL;
-
- stream = G_INPUT_STREAM (handle);
-
- if (!g_seekable_seek (G_SEEKABLE (stream), offset, type,
- G_VFS_JOB (job)->cancellable, &error))
- {
- g_vfs_job_failed_literal (G_VFS_JOB (job),
- error->domain,
- error->code,
- error->message);
- g_error_free (error);
- return FALSE;
- }
- else
- {
- g_vfs_job_seek_read_set_offset (job, g_seekable_tell (G_SEEKABLE (stream)));
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-
- return TRUE;
-}
-
-/* *** read_close () *** */
-static void
-close_read_ready (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GInputStream *stream;
- GVfsJob *job;
- GError *error;
- gboolean res;
-
- job = G_VFS_JOB (user_data);
- stream = G_INPUT_STREAM (source_object);
- res = g_input_stream_close_finish (stream,
- result,
- &error);
- if (res == FALSE)
- {
- g_vfs_job_failed_literal (G_VFS_JOB (job),
- error->domain,
- error->code,
- error->message);
-
- g_error_free (error);
- }
- else
- g_vfs_job_succeeded (job);
-
- g_object_unref (stream);
-}
-
-static gboolean
-try_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle handle)
-{
- GInputStream *stream;
-
- stream = G_INPUT_STREAM (handle);
-
- g_input_stream_close_async (stream,
- G_PRIORITY_DEFAULT,
- G_VFS_JOB (job)->cancellable,
- close_read_ready,
- job);
- return TRUE;
-}
-
-
-/* *** query_info () *** */
-
-static void
-query_info_ready (SoupSession *session,
- SoupMessage *msg,
- gpointer user_data)
-{
- GFileAttributeMatcher *matcher;
- GVfsJobQueryInfo *job;
- const SoupURI *uri;
- const char *text;
- GFileInfo *info;
- char *basename;
-
- job = G_VFS_JOB_QUERY_INFO (user_data);
- info = job->file_info;
- matcher = job->attribute_matcher;
-
- if (! SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
- {
- g_vfs_job_failed_from_http_status (G_VFS_JOB (job), msg->status_code,
- msg->reason_phrase);
- return;
- }
-
- uri = soup_message_get_uri (msg);
- basename = http_uri_get_basename (uri->path);
-
- g_print ("basename:%s\n", basename);
-
- /* read http/1.1 rfc, until then we copy the local files
- * behaviour */
- if (basename != NULL &&
- g_file_attribute_matcher_matches (matcher,
- G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME))
- {
- char *display_name = g_filename_display_name (basename);
-
- if (strstr (display_name, "\357\277\275") != NULL)
- {
- char *p = display_name;
- display_name = g_strconcat (display_name, _(" (invalid encoding)"), NULL);
- g_free (p);
- }
-
- g_file_info_set_display_name (info, display_name);
- g_free (display_name);
- }
-
- if (basename != NULL &&
- g_file_attribute_matcher_matches (matcher,
- G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME))
- {
- char *edit_name = g_filename_display_name (basename);
- g_file_info_set_edit_name (info, edit_name);
- g_free (edit_name);
- }
-
- g_free (basename);
-
-
- text = soup_message_headers_get (msg->response_headers,
- "Content-Length");
- if (text)
- {
- guint64 size = g_ascii_strtoull (text, NULL, 10);
- g_file_info_set_size (info, size);
- }
-
-
- text = soup_message_headers_get (msg->response_headers,
- "Content-Type");
- if (text)
- {
- char *p = strchr (text, ';');
-
- if (p != NULL)
- {
- char *tmp = g_strndup (text, p - text);
- g_file_info_set_content_type (info, tmp);
- g_free (tmp);
- }
- else
- g_file_info_set_content_type (info, text);
- }
-
-
- text = soup_message_headers_get (msg->response_headers,
- "Last-Modified");
- if (text)
- {
- SoupDate *sd;
- GTimeVal tv;
-
- sd = soup_date_new_from_string(text);
- if (sd)
- {
- soup_date_to_timeval (sd, &tv);
- g_file_info_set_modification_time (info, &tv);
- soup_date_free (sd);
- }
- }
-
-
- text = soup_message_headers_get (msg->response_headers,
- "ETag");
- if (text)
- {
- g_file_info_set_attribute_string (info,
- G_FILE_ATTRIBUTE_ETAG_VALUE,
- text);
- }
-
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-
-static gboolean
-try_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher)
-{
- SoupMessage *msg;
- SoupURI *uri;
-
- uri = http_backend_uri_for_filename (backend, filename, FALSE);
- msg = soup_message_new_from_uri (SOUP_METHOD_HEAD, uri);
- soup_uri_free (uri);
-
- http_backend_queue_message (backend, msg, query_info_ready, job);
-
- return TRUE;
-}
-
-
-static void
-g_vfs_backend_http_class_init (GVfsBackendHttpClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class;
-
- gobject_class->finalize = g_vfs_backend_http_finalize;
-
- backend_class = G_VFS_BACKEND_CLASS (klass);
-
- backend_class->try_mount = try_mount;
- backend_class->try_open_for_read = try_open_for_read;
- backend_class->try_read = try_read;
- backend_class->try_seek_on_read = try_seek_on_read;
- backend_class->try_close_read = try_close_read;
- backend_class->try_query_info = try_query_info;
-
-}
diff --git a/daemon/gvfsbackendhttp.h b/daemon/gvfsbackendhttp.h
deleted file mode 100644
index c3233246..00000000
--- a/daemon/gvfsbackendhttp.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Christian Kellner <gicmo@gnome.org>
- */
-
-#ifndef __G_VFS_BACKEND_HTTP_H__
-#define __G_VFS_BACKEND_HTTP_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-#include <libsoup/soup.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_HTTP (g_vfs_backend_http_get_type ())
-#define G_VFS_BACKEND_HTTP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_HTTP, GVfsBackendHttp))
-#define G_VFS_BACKEND_HTTP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_HTTP, GVfsBackendHttpClass))
-#define G_VFS_IS_BACKEND_HTTP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_HTTP))
-#define G_VFS_IS_BACKEND_HTTP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_HTTP))
-#define G_VFS_BACKEND_HTTP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_HTTP, GVfsBackendHttpClass))
-
-typedef struct _GVfsBackendHttp GVfsBackendHttp;
-typedef struct _GVfsBackendHttpClass GVfsBackendHttpClass;
-
-struct _GVfsBackendHttpClass
-{
- GVfsBackendClass parent_class;
-
-};
-
-struct _GVfsBackendHttp
-{
- GVfsBackend parent_instance;
-
- SoupURI *mount_base;
- SoupSession *session;
-
- SoupSession *session_async;
-};
-
-GType g_vfs_backend_http_get_type (void) G_GNUC_CONST;
-
-SoupURI * http_backend_uri_for_filename (GVfsBackend *backend,
- const char *filename,
- gboolean is_dir);
-
-
-char * http_uri_get_basename (const char *uri_str);
-
-guint http_error_code_from_status (guint status);
-
-guint http_backend_send_message (GVfsBackend *backend,
- SoupMessage *msg);
-
-void http_backend_queue_message (GVfsBackend *backend,
- SoupMessage *msg,
- SoupSessionCallback callback,
- gpointer user_data);
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_HTTP_H__ */
diff --git a/daemon/gvfsbackendlocaltest.c b/daemon/gvfsbackendlocaltest.c
deleted file mode 100644
index ac30adcd..00000000
--- a/daemon/gvfsbackendlocaltest.c
+++ /dev/null
@@ -1,1252 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- * Local testing backend wrapping error injection
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Tomas Bzatek <tbzatek@redhat.com>
- */
-
-
-/*** USAGE:
- *
- * - behaviour is controlled via environment variable (i.e. set from the shell, before launching /usr/libexec/gvfsd)
- * GVFS_ERRORNEOUS: number, how often operation should fail (a random() is used, this number is not a sequence)
- * GVFS_ERRORNEOUS_OPS: bitmask of operations to fail - see GVfsJobType enum
- *
- ***/
-
-
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include "gvfsbackendlocaltest.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobclosewrite.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobdelete.h"
-#include "gvfsjobqueryfsinfo.h"
-#include "gvfsjobqueryattributes.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsdaemonprotocol.h"
-#include "gvfsjobcreatemonitor.h"
-#include "gvfsmonitor.h"
-
-
-/* TODO:
- * Bugs:
- * - unmounting ?
- * - copy dialog still visible after try_copy() finished successfully --> temporarily disabled do_copy ()
- *
- *
- * Conceptual:
- * - closing directory/file monitor - after a Nautilus window is closed, no method is called to destroy the monitor object
- * - find a better way how to pass parameters to a running instance of gvfsd-localtest
- *
- */
-
-
-
-
-
-/************************************************
- * Error injection
- *
- */
-
-
-static gboolean
-inject_error (GVfsBackend *backend,
- GVfsJob *job,
- GVfsJobType job_type)
-{
- GVfsBackendLocalTest *op_backend = G_VFS_BACKEND_LOCALTEST (backend);
-
- if ((op_backend->errorneous > 0) && ((random() % op_backend->errorneous) == 0) &&
- ((op_backend->inject_op_types < 1) || ((op_backend->inject_op_types & job_type) == job_type)))
- {
- g_print ("(II) inject_error: BANG! injecting error... \n");
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- "Injected error");
- return FALSE;
- } else g_vfs_job_succeeded (job);
- return TRUE;
-}
-
-
-
-
-
-/************************************************
- * Utility functions
- *
- */
-
-/* returned object should be freed in user's function */
-static GFile*
-get_g_file_from_local (const char *filename, GVfsJob *job)
-{
- GVfs *local_vfs;
- GFile *file = NULL;
-
- local_vfs = g_vfs_get_local ();
- if (! local_vfs) {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Cannot get local vfs");
- g_print (" (EE) get_g_file_from_local (filename = '%s'): local_vfs == NULL \n", filename);
- return NULL;
- }
-
- file = g_vfs_get_file_for_path (local_vfs, filename);
- if (! file) {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Cannot get file from local vfs");
- g_print (" (EE) get_g_file_from_local (filename = '%s'): file == NULL \n", filename);
- return NULL;
- }
- return file;
-}
-
-/* returned object should be freed in user's function */
-static GFileInfo*
-get_g_file_info_from_local (const char *filename, GFile *file,
- const char *attributes, GFileQueryInfoFlags flags,
- GVfsJob *job)
-{
- GError *error;
- GFileInfo *info = NULL;
-
- g_return_val_if_fail (file != NULL, NULL);
- if (file) {
- error = NULL;
- info = g_file_query_info (file, attributes, flags, G_VFS_JOB (job)->cancellable, &error);
-
- if ((error) || (! info) ) {
- g_print (" (EE) get_g_file_info_from_local (filename = '%s'): g_file_query_info failed: %s \n", filename, error->message);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- return NULL;
- }
- }
- return info;
-}
-
-
-
-
-
-
-
-/************************************************
- * Initialization
- *
- */
-
-G_DEFINE_TYPE (GVfsBackendLocalTest, g_vfs_backend_localtest, G_VFS_TYPE_BACKEND)
-
-static void
-g_vfs_backend_localtest_init (GVfsBackendLocalTest *backend)
-{
- const char *c;
-
- /* Nothing in there */
- g_print ("(II) g_vfs_backend_localtest_init \n");
-
- /* env var conversion */
- backend->errorneous = -1;
- backend->inject_op_types = -1;
-
- c = g_getenv("GVFS_ERRORNEOUS");
- if (c) {
- backend->errorneous = g_ascii_strtoll(c, NULL, 0);
- g_print ("(II) g_vfs_backend_localtest_init: setting 'errorneous' to '%d' \n", backend->errorneous);
- }
-
- c = g_getenv("GVFS_ERRORNEOUS_OPS");
- if (c) {
- backend->inject_op_types = g_ascii_strtoll(c, NULL, 0);
- g_print ("(II) g_vfs_backend_localtest_init: setting 'inject_op_types' to '%lu' \n", (unsigned long)backend->inject_op_types);
- }
-
- g_print ("(II) g_vfs_backend_localtest_init done.\n");
-}
-
-static void
-g_vfs_backend_localtest_finalize (GObject *object)
-{
- GVfsBackendLocalTest *backend;
-
- g_print ("(II) g_vfs_backend_localtest_finalize \n");
-
- backend = G_VFS_BACKEND_LOCALTEST (object);
-
- if (backend->test)
- g_free ((gpointer)backend->test);
-
- if (G_OBJECT_CLASS (g_vfs_backend_localtest_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_localtest_parent_class)->finalize) (object);
-}
-
-
-
-
-
-
-
-/************************************************
- * Mount
- *
- */
-
-static void
-do_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendLocalTest *op_backend = G_VFS_BACKEND_LOCALTEST (backend);
-
- g_print ("(II) try_mount \n");
-
- g_vfs_backend_set_display_name (backend, "localtest");
-
- op_backend->mount_spec = g_mount_spec_new ("localtest");
- g_vfs_backend_set_mount_spec (backend, op_backend->mount_spec);
-
- g_vfs_backend_set_icon_name (backend, "folder-remote");
-
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_MOUNT);
-}
-
-
-static void
-do_unmount (GVfsBackend *backend, GVfsJobUnmount *job)
-{
- GVfsBackendLocalTest *op_backend;
-
- g_print ("(II) try_umount \n");
-
- op_backend = G_VFS_BACKEND_LOCALTEST (backend);
- g_mount_spec_unref (op_backend->mount_spec);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_UNMOUNT);
-}
-
-
-
-
-
-
-
-/************************************************
- * Queries
- *
- */
-
-static void
-do_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *attribute_matcher,
- GFileQueryInfoFlags flags)
-{
- GFile *file;
- GFileInfo *info;
- GError *error;
- GFileEnumerator *enumerator;
- gboolean res;
-
- g_print ("(II) try_enumerate (filename = %s) \n", filename);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
- res = TRUE;
-
- error = NULL;
- enumerator = g_file_enumerate_children (file, "*", flags, G_VFS_JOB (job)->cancellable, &error);
- if (enumerator) {
- error = NULL;
- while ((info = g_file_enumerator_next_file (enumerator, G_VFS_JOB (job)->cancellable, &error)) != NULL) {
- g_print (" (II) try_enumerate (filename = %s): file '%s' \n", filename, g_file_info_get_attribute_string(info, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME));
- g_vfs_job_enumerate_add_info (job, info);
- }
- if (error) {
- g_print (" (EE) try_enumerate: error: %s \n", error->message);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- res = FALSE;
- } else
- res = inject_error (backend, G_VFS_JOB (job), GVFS_JOB_ENUMERATE);
-
- error = NULL;
- g_file_enumerator_close (enumerator, G_VFS_JOB (job)->cancellable, &error);
- if (error) {
- g_print (" (EE) try_enumerate: g_file_enumerator_close() error: %s \n", error->message);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- res = FALSE;
- }
- g_object_unref (enumerator);
- g_print (" (II) try_enumerate: success. \n");
- } else {
- if (error) {
- g_print (" (EE) try_enumerate: error: %s \n", error->message);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- res = FALSE;
- } else {
- g_print (" (EE) try_enumerate: error == NULL \n");
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- "Error try_enumerate");
- res = FALSE;
- }
- }
-
- g_object_unref (file);
- if (res) {
- g_vfs_job_enumerate_done (job);
- }
-
- g_print ("(II) try_enumerate done. \n");
-}
-
-
-static void
-do_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- GFile *file;
- GFileInfo *info2;
-
- g_print ("(II) try_query_info (filename = %s) \n", filename);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- info2 = get_g_file_info_from_local (filename, file, "*", flags, G_VFS_JOB (job));
-
- if (info2) {
- g_file_info_copy_into (info2, info);
- g_object_unref (info2);
- g_object_unref (file);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_QUERY_INFO);
- g_print ("(II) try_query_info success. \n");
- } else
- g_print ("(EE) try_query_info failed. \n");
-}
-
-
-static void
-do_query_fs_info (GVfsBackend *backend,
- GVfsJobQueryFsInfo *job,
- const char *filename,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher)
-{
- GFile *file;
- GFileInfo *info2;
- GError *error;
-
- g_print ("(II) try_query_fs_info (filename = %s) \n", filename);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
-
- if (file) {
- error = NULL;
- info2 = g_file_query_filesystem_info (file, "fs:*", G_VFS_JOB (job)->cancellable, &error);
- if ((error) || (! info2) ) {
- g_print (" (EE) try_query_fs_info (filename = '%s'): g_file_query_filesystem_info failed: %s \n", filename, error->message);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- } else {
- g_file_info_copy_into (info2, info);
- g_object_unref (info2);
- g_object_unref (file);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_QUERY_FS_INFO);
- g_print ("(II) try_query_fs_info success. \n");
- }
- } else {
- g_print ("(EE) try_query_fs_info failed. \n");
- }
-}
-
-
-static void
-do_query_settable_attributes (GVfsBackend *backend,
- GVfsJobQueryAttributes *job,
- const char *filename)
-{
- GFileAttributeInfoList *attr_list;
- GError *error;
- GFile *file;
-
- g_print ("(II) try_query_settable_attributes (filename = '%s') \n", filename);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- attr_list = g_file_query_settable_attributes (file, G_VFS_JOB (job)->cancellable, &error);
- if ((attr_list) && (! error)) {
- g_vfs_job_query_attributes_set_list (job, attr_list);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_QUERY_SETTABLE_ATTRIBUTES);
- g_print ("(II) try_query_settable_attributes success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_query_settable_attributes: g_file_query_settable_attributes == FALSE, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_query_settable_attributes: file == NULL \n");
- }
-}
-
-static void
-do_query_writable_namespaces (GVfsBackend *backend,
- GVfsJobQueryAttributes *job,
- const char *filename)
-{
- GFileAttributeInfoList *attr_list;
- GError *error;
- GFile *file;
-
- g_print ("(II) try_query_writable_namespaces (filename = '%s') \n", filename);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- attr_list = g_file_query_writable_namespaces (file, G_VFS_JOB (job)->cancellable, &error);
- if ((attr_list) && (! error)) {
- g_vfs_job_query_attributes_set_list (job, attr_list);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_QUERY_WRITABLE_NAMESPACES);
- g_print ("(II) try_query_writable_namespaces success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_query_writable_namespaces: g_file_query_writable_namespaces == FALSE, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_query_writable_namespaces: file == NULL \n");
- }
-}
-
-
-
-
-
-/************************************************
- * Operations
- *
- */
-
-static void
-do_make_directory (GVfsBackend *backend,
- GVfsJobMakeDirectory *job,
- const char *filename)
-{
- GError *error;
- GFile *file;
-
- g_print ("(II) try_make_directory (filename = %s) \n", filename);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- if (g_file_make_directory (file, G_VFS_JOB (job)->cancellable, &error)) {
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_MAKE_DIRECTORY);
- g_print ("(II) try_make_directory success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_make_directory: g_file_make_directory == FALSE \n");
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_make_directory: file == NULL \n");
- }
-}
-
-
-static void
-do_delete (GVfsBackend *backend,
- GVfsJobDelete *job,
- const char *filename)
-{
- GError *error;
- GFile *file;
-
- g_print ("(II) try_delete (filename = %s) \n", filename);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- if (g_file_delete (file, G_VFS_JOB (job)->cancellable, &error)) {
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_DELETE);
- g_print ("(II) try_delete success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_delete: g_file_delete == FALSE, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_delete: file == NULL \n");
- }
-}
-
-
-static void
-do_trash (GVfsBackend *backend,
- GVfsJobTrash *job,
- const char *filename)
-{
- GError *error;
- GFile *file;
-
- g_print ("(II) try_trash (filename = %s) \n", filename);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- if (g_file_trash (file, G_VFS_JOB (job)->cancellable, &error)) {
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_TRASH);
- g_print ("(II) try_trash success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_trash: g_file_trash == FALSE, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_trash: file == NULL \n");
- }
-}
-
-
-static void
-do_make_symlink (GVfsBackend *backend,
- GVfsJobMakeSymlink *job,
- const char *filename,
- const char *symlink_value)
-{
- GError *error;
- GFile *file;
-
- g_print ("(II) try_make_symlink ('%s' --> '%s') \n", filename, symlink_value);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- if (g_file_make_symbolic_link (file, symlink_value, G_VFS_JOB (job)->cancellable, &error)) {
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_MAKE_SYMLINK);
- g_print ("(II) try_make_symlink success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_make_symlink: g_file_make_symbolic_link == FALSE, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_make_symlink: file == NULL \n");
- }
-}
-
-#if 0
-static void
-do_copy (GVfsBackend *backend,
- GVfsJobCopy *job,
- const char *source,
- const char *destination,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data)
-{
- GFile *src_file, *dst_file;
- GError *error;
-
- g_print ("(II) try_copy '%s' --> '%s' \n", source, destination);
-
- src_file = get_g_file_from_local (source, G_VFS_JOB (job));
- dst_file = get_g_file_from_local (destination, G_VFS_JOB (job));
- g_assert (src_file != NULL);
-
- if (src_file) {
- error = NULL;
- if (g_file_copy (src_file, dst_file, flags, G_VFS_JOB (job)->cancellable,
- progress_callback, progress_callback_data, &error))
- {
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_COPY);
- g_print (" (II) try_copy: success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_copy: g_file_copy == FALSE, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (src_file);
- g_object_unref (dst_file);
- } else {
- g_print (" (EE) try_copy: file == NULL \n");
- }
-}
-#endif
-
-static void
-do_move (GVfsBackend *backend,
- GVfsJobMove *job,
- const char *source,
- const char *destination,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data)
-{
- GFile *src_file, *dst_file;
- GError *error;
-
- g_print ("(II) try_move '%s' --> '%s' \n", source, destination);
-
- src_file = get_g_file_from_local (source, G_VFS_JOB (job));
- dst_file = get_g_file_from_local (destination, G_VFS_JOB (job));
- g_assert (src_file != NULL);
-
- if (src_file) {
- error = NULL;
- if (g_file_move (src_file, dst_file, flags, G_VFS_JOB (job)->cancellable,
- progress_callback, progress_callback_data, &error))
- {
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_MOVE);
- g_print (" (II) try_move: success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_move: g_file_move == FALSE, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (src_file);
- g_object_unref (dst_file);
- } else {
- g_print (" (EE) try_move: file == NULL \n");
- }
-}
-
-
-// aka 'rename'
-static void
-do_set_display_name (GVfsBackend *backend,
- GVfsJobSetDisplayName *job,
- const char *filename,
- const char *display_name)
-{
- GError *error;
- GFile *file;
-
- g_print ("(II) try_set_display_name '%s' --> '%s' \n", filename, display_name);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- if (g_file_set_display_name (file, display_name, G_VFS_JOB (job)->cancellable, &error)) {
- char *dirname, *new_path;
- dirname = g_path_get_dirname (filename);
- new_path = g_build_filename (dirname, display_name, NULL);
- g_print ("(II) try_set_display_name: filename = '%s'... \n", filename);
- g_print ("(II) try_set_display_name: display_name = '%s'... \n", display_name);
- g_print ("(II) try_set_display_name: dirname = '%s'... \n", dirname);
- g_print ("(II) try_set_display_name: new_path = '%s'... \n", new_path);
- g_vfs_job_set_display_name_set_new_path (job, new_path);
- g_free (dirname);
- g_free (new_path);
-
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_SET_DISPLAY_NAME);
- g_print ("(II) try_set_display_name success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_set_display_name: g_file_set_display_name == FALSE, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_set_display_name: file == NULL \n");
- }
-}
-
-
-static void
-do_set_attribute (GVfsBackend *backend,
- GVfsJobSetAttribute *set_attribute,
- const char *filename,
- const char *attribute,
- GFileAttributeType type,
- gpointer value_p,
- GFileQueryInfoFlags flags)
-{
- GError *error;
- GFile *file;
-
- g_print ("(II) try_set_attribute (filename = '%s', attribute = '%s') \n", filename, attribute);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (set_attribute));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- if (g_file_set_attribute (file, attribute, type, value_p, flags, G_VFS_JOB (set_attribute)->cancellable, &error)) {
- inject_error (backend, G_VFS_JOB (set_attribute), GVFS_JOB_SET_ATTRIBUTE);
- g_print ("(II) try_set_attribute success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (set_attribute), error);
- g_print (" (EE) try_set_attribute: g_file_set_attribute == FALSE, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_set_attribute: file == NULL \n");
- }
-}
-
-
-
-
-
-
-
-/************************************************
- * Monitors
- *
- */
-
-/* MonitorProxy has been stolen from gvfsbackendtrash */
-typedef struct {
- GVfsMonitor *vfs_monitor;
- GObject *monitor;
-} MonitorProxy;
-
-static void
-monitor_proxy_free (MonitorProxy *proxy)
-{
- g_print ("(II) monitor_proxy_free \n");
- g_object_unref (proxy->monitor);
- g_free (proxy);
-}
-
-static void
-proxy_changed (GFileMonitor* monitor,
- GFile* file,
- GFile* other_file,
- GFileMonitorEvent event_type,
- MonitorProxy *proxy)
-{
- char *file_path;
- char *other_file_path;
-
- file_path = g_file_get_path (file);
- g_print ("(II) monitor_proxy_changed: file_path = '%s' \n", file_path);
-
- if (other_file)
- {
- other_file_path = g_file_get_path (other_file);
- g_print ("(II) monitor_proxy_changed: other_file_path == '%s' \n", other_file_path);
- }
- else
- {
- other_file_path = NULL;
- }
-
- g_vfs_monitor_emit_event (proxy->vfs_monitor,
- event_type,
- file_path,
- other_file_path);
-
- g_free (file_path);
- g_free (other_file_path);
-}
-
-
-static void
-create_dir_file_monitor (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags,
- const gboolean is_dir_monitor)
-{
- GObject *monitor;
- MonitorProxy *proxy;
- GFile *file;
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (is_dir_monitor) {
- monitor = G_OBJECT (g_file_monitor_directory (file, flags, G_VFS_JOB (job)->cancellable, NULL));
- } else {
- monitor = G_OBJECT (g_file_monitor_file (file, flags, G_VFS_JOB (job)->cancellable, NULL));
- }
-
- if (monitor) {
- proxy = g_new0 (MonitorProxy, 1);
- proxy->vfs_monitor = g_vfs_monitor_new (backend);
- proxy->monitor = monitor;
-
- g_object_set_data_full (G_OBJECT (proxy->vfs_monitor), "monitor-proxy",
- proxy, (GDestroyNotify) monitor_proxy_free); //* hmm?
- g_signal_connect (monitor, "changed", G_CALLBACK (proxy_changed), proxy);
-
- g_vfs_job_create_monitor_set_monitor (job, proxy->vfs_monitor);
-
- g_object_unref (proxy->vfs_monitor);
-
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_CREATE_DIR_MONITOR);
- g_print ("(II) create_dir_file_monitor success. \n");
- }
- else {
- g_print (" (EE) create_dir_file_monitor: monitor == NULL \n");
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Directory notification not supported"));
- }
- g_object_unref (file);
-}
-
-
-static void
-do_create_dir_monitor (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags)
-{
- g_print ("(II) try_create_dir_monitor (filename = '%s') \n", filename);
- create_dir_file_monitor (backend, job, filename, flags, TRUE);
-}
-
-
-static void
-do_create_file_monitor (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags)
-{
- g_print ("(II) try_create_file_monitor (filename = '%s') \n", filename);
- create_dir_file_monitor (backend, job, filename, flags, FALSE);
-}
-
-
-
-
-
-
-/************************************************
- * Read/write/create/close data operations
- *
- */
-
-static void
-do_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- GFileInputStream *stream;
- GError *error;
- GFile *file;
-
- g_print ("(II) try_open_for_read (filename = '%s') \n", filename);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- stream = g_file_read (file, G_VFS_JOB (job)->cancellable, &error);
- if (stream) {
- g_vfs_job_open_for_read_set_can_seek (job, g_seekable_can_seek (G_SEEKABLE (stream)));
- g_vfs_job_open_for_read_set_handle (job, stream);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_OPEN_FOR_READ);
- g_print ("(II) try_open_for_read success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_open_for_read: stream == NULL, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_open_for_read: file == NULL \n");
- }
-}
-
-
-static void
-do_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle _handle,
- char *buffer,
- gsize bytes_requested)
-{
- GError *error;
- GFileInputStream *stream = _handle;
- gssize s;
-
- g_print ("(II) try_read (handle = '%lx', buffer = '%lx', bytes_requested = %ld) \n",
- (long int)_handle, (long int)buffer, (long int)bytes_requested);
-
- g_assert (stream != NULL);
-
- error = NULL;
- s = g_input_stream_read (G_INPUT_STREAM (stream), buffer, bytes_requested,
- G_VFS_JOB (job)->cancellable, &error);
- if (s >= 0) {
- g_vfs_job_read_set_size (job, s);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_READ);
- g_print ("(II) try_read success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_read: g_input_stream_read() failed, error: %s \n", error->message);
- g_error_free (error);
- }
-}
-
-
-static void
-do_seek_on_read (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle _handle,
- goffset offset,
- GSeekType type)
-{
- GError *error;
- GFileInputStream *stream = _handle;
-
- g_print ("(II) try_seek_on_read (handle = '%lx', offset = %ld) \n", (long int)_handle, (long int)offset);
-
- g_assert (stream != NULL);
-
- error = NULL;
- if (g_seekable_seek (G_SEEKABLE (stream), offset, type, G_VFS_JOB (job)->cancellable, &error)) {
- g_vfs_job_seek_read_set_offset (job, g_seekable_tell (G_SEEKABLE (stream)));
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_SEEK_ON_READ);
- g_print ("(II) try_seek_on_read success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_seek_on_read: g_file_input_stream_seek() failed, error: %s \n", error->message);
- g_error_free (error);
- }
-}
-
-
-static void
-do_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle _handle)
-{
- GError *error;
- GFileInputStream *stream = _handle;
-
- g_print ("(II) try_close_read (handle = '%lx') \n", (long int)_handle);
-
- g_assert (stream != NULL);
-
- error = NULL;
- if (g_input_stream_close (G_INPUT_STREAM (stream), G_VFS_JOB (job)->cancellable, &error)) {
- g_object_unref (stream);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_CLOSE_READ);
- g_print ("(II) try_close_read success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_close_read: g_input_stream_close() failed, error: %s \n", error->message);
- g_error_free (error);
- }
-}
-
-
-static void
-do_append_to (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
-{
- GFileOutputStream *stream;
- GError *error;
- GFile *file;
-
- g_print ("(II) try_append_to (filename = %s) \n", filename);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- stream = g_file_append_to (file, flags, G_VFS_JOB (job)->cancellable, &error);
- if (stream) {
- /* Should seek at the end of the file here */
- if ((g_seekable_seek (G_SEEKABLE (stream), 0, G_SEEK_END, G_VFS_JOB (job)->cancellable, &error)) && (! error)) {
- g_vfs_job_open_for_write_set_initial_offset (job, g_seekable_tell (G_SEEKABLE (stream)));
- } else {
- g_print (" (EE) try_append_to: error during g_file_output_stream_seek(), error: %s \n", error->message);
- }
-
- g_vfs_job_open_for_write_set_can_seek (job, g_seekable_can_seek (G_SEEKABLE (stream)));
- g_vfs_job_open_for_write_set_handle (job, stream);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_APPEND_TO);
-
- g_print ("(II) try_append_to success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_append_to: stream == NULL, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_append_to: file == NULL \n");
- }
-}
-
-
-static void
-do_create (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
-{
- GFileOutputStream *stream;
- GError *error;
- GFile *file;
-
- g_print ("(II) try_create (filename = %s) \n", filename);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- stream = g_file_create (file, flags, G_VFS_JOB (job)->cancellable, &error);
- if (stream) {
- g_vfs_job_open_for_write_set_can_seek (job, g_seekable_can_seek (G_SEEKABLE (stream)));
- g_vfs_job_open_for_write_set_handle (job, stream);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_CREATE);
- g_print ("(II) try_create success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_create: stream == NULL, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_create: file == NULL \n");
- }
-}
-
-
-static void
-do_replace (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- const char *etag,
- gboolean make_backup,
- GFileCreateFlags flags)
-{
- GFileOutputStream *stream;
- GError *error;
- GFile *file;
-
- g_print ("(II) try_replace (filename = '%s', etag = '%s') \n", filename, etag);
-
- file = get_g_file_from_local (filename, G_VFS_JOB (job));
- g_assert (file != NULL);
-
- if (file) {
- error = NULL;
- stream = g_file_replace (file, etag, make_backup, flags, G_VFS_JOB (job)->cancellable, &error);
- if (stream) {
- g_vfs_job_open_for_write_set_can_seek (job, g_seekable_can_seek (G_SEEKABLE (stream)));
- g_vfs_job_open_for_write_set_handle (job, stream);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_REPLACE);
- g_print ("(II) try_replace success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_replace: stream == NULL, error: %s \n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- } else {
- g_print (" (EE) try_replace: file == NULL \n");
- }
-}
-
-
-static void
-do_write (GVfsBackend *backend,
- GVfsJobWrite *job,
- GVfsBackendHandle _handle,
- char *buffer,
- gsize buffer_size)
-{
- GError *error;
- GFileOutputStream *stream = _handle;
- gssize s;
-
- g_print ("(II) try_write (handle = '%lx', buffer = '%lx', buffer_size = %ld) \n",
- (long int)_handle, (long int)buffer, (long int)buffer_size);
-
- g_assert (stream != NULL);
-
- error = NULL;
- s = g_output_stream_write (G_OUTPUT_STREAM (stream), buffer, buffer_size, G_VFS_JOB (job)->cancellable, &error);
- if (s >= 0) {
- g_vfs_job_write_set_written_size (job, s);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_WRITE);
- g_print ("(II) try_write success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_write: g_output_stream_write() failed, error: %s \n", error->message);
- g_error_free (error);
- }
-}
-
-
-static void
-do_seek_on_write (GVfsBackend *backend,
- GVfsJobSeekWrite *job,
- GVfsBackendHandle _handle,
- goffset offset,
- GSeekType type)
-{
- GError *error;
- GFileOutputStream *stream = _handle;
-
- g_print ("(II) try_seek_on_write (handle = '%lx', offset = %ld) \n", (long int)_handle, (long int)offset);
-
- g_assert (stream != NULL);
-
- error = NULL;
- if (g_seekable_seek (G_SEEKABLE (stream), offset, type, G_VFS_JOB (job)->cancellable, &error)) {
- g_vfs_job_seek_write_set_offset (job, g_seekable_tell (G_SEEKABLE (stream)));
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_SEEK_ON_WRITE);
- g_print ("(II) try_seek_on_write success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_seek_on_write: g_file_output_stream_seek() failed, error: %s \n", error->message);
- g_error_free (error);
- }
-}
-
-
-static void
-do_close_write (GVfsBackend *backend,
- GVfsJobCloseWrite *job,
- GVfsBackendHandle _handle)
-{
- GError *error;
- GFileOutputStream *stream = _handle;
-
- g_print ("(II) try_close_write (handle = '%lx') \n", (long int)_handle);
-
- g_assert (stream != NULL);
-
- error = NULL;
- if (g_output_stream_close (G_OUTPUT_STREAM(stream), G_VFS_JOB (job)->cancellable, &error)) {
- g_object_unref (stream);
- inject_error (backend, G_VFS_JOB (job), GVFS_JOB_CLOSE_WRITE);
- g_print ("(II) try_close_write success. \n");
- } else {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_print (" (EE) try_close_write: g_input_stream_close() failed, error: %s \n", error->message);
- g_error_free (error);
- }
-}
-
-
-
-
-
-
-
-
-/************************************************
- * Class init
- *
- */
-
-
-static void
-g_vfs_backend_localtest_class_init (GVfsBackendLocalTestClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_localtest_finalize;
-
- backend_class->mount = do_mount;
- backend_class->unmount = do_unmount;
- backend_class->open_for_read = do_open_for_read;
- backend_class->read = do_read;
- backend_class->seek_on_read = do_seek_on_read;
- backend_class->close_read = do_close_read;
- backend_class->close_write = do_close_write;
- backend_class->query_info = do_query_info;
- backend_class->enumerate = do_enumerate;
- backend_class->query_fs_info = do_query_fs_info;
- backend_class->create = do_create;
- backend_class->append_to = do_append_to;
- backend_class->replace = do_replace;
- backend_class->write = do_write;
- backend_class->seek_on_write = do_seek_on_write;
-/* -- disabled, read/write operations can handle copy correctly */
-/* backend_class->copy = do_copy; */
- backend_class->move = do_move;
- backend_class->make_symlink = do_make_symlink;
- backend_class->make_directory = do_make_directory;
- backend_class->delete = do_delete;
- backend_class->trash = do_trash;
- backend_class->set_display_name = do_set_display_name;
- backend_class->set_attribute = do_set_attribute;
- backend_class->create_dir_monitor = do_create_dir_monitor;
- backend_class->create_file_monitor = do_create_file_monitor;
- backend_class->query_settable_attributes = do_query_settable_attributes;
- backend_class->query_writable_namespaces = do_query_writable_namespaces;
-}
diff --git a/daemon/gvfsbackendlocaltest.h b/daemon/gvfsbackendlocaltest.h
deleted file mode 100644
index 71db179e..00000000
--- a/daemon/gvfsbackendlocaltest.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- * Local testing backend wrapping error injection
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Tomas Bzatek <tbzatek@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_LOCALTEST_H__
-#define __G_VFS_BACKEND_LOCALTEST_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_LOCALTEST (g_vfs_backend_localtest_get_type ())
-#define G_VFS_BACKEND_LOCALTEST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_LOCALTEST, GVfsBackendLocalTest))
-#define G_VFS_BACKEND_LOCALTEST_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_LOCALTEST, GVfsBackendLocalTestClass))
-#define G_VFS_IS_BACKEND_LOCALTEST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_LOCALTEST))
-#define G_VFS_IS_BACKEND_LOCALTEST_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_LOCALTEST))
-#define G_VFS_BACKEND_LOCALTEST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_LOCALTEST, GVfsBackendLocalTestClass))
-
-typedef struct _GVfsBackendLocalTest GVfsBackendLocalTest;
-typedef struct _GVfsBackendLocalTestClass GVfsBackendLocalTestClass;
-
-
-
-typedef enum {
- GVFS_JOB_UNMOUNT = 1<<0,
- GVFS_JOB_MOUNT = 1<<1,
- GVFS_JOB_OPEN_FOR_READ = 1<<2,
- GVFS_JOB_CLOSE_READ = 1<<3,
- GVFS_JOB_READ = 1<<4,
- GVFS_JOB_SEEK_ON_READ = 1<<5,
- GVFS_JOB_CREATE = 1<<6,
- GVFS_JOB_APPEND_TO = 1<<7,
- GVFS_JOB_REPLACE = 1<<8,
- GVFS_JOB_CLOSE_WRITE = 1<<9,
- GVFS_JOB_WRITE = 1<<10,
- GVFS_JOB_SEEK_ON_WRITE = 1<<11,
- GVFS_JOB_QUERY_INFO = 1<<12,
- GVFS_JOB_QUERY_FS_INFO = 1<<13,
- GVFS_JOB_ENUMERATE = 1<<14,
- GVFS_JOB_SET_DISPLAY_NAME = 1<<15,
- GVFS_JOB_DELETE = 1<<16,
- GVFS_JOB_TRASH = 1<<17,
- GVFS_JOB_MAKE_DIRECTORY = 1<<18,
- GVFS_JOB_MAKE_SYMLINK = 1<<19,
- GVFS_JOB_COPY = 1<<20,
- GVFS_JOB_MOVE = 1<<21,
- GVFS_JOB_SET_ATTRIBUTE = 1<<22,
- GVFS_JOB_CREATE_DIR_MONITOR = 1<<23,
- GVFS_JOB_CREATE_FILE_MONITOR = 1<<24,
- GVFS_JOB_QUERY_SETTABLE_ATTRIBUTES = 1<<25,
- GVFS_JOB_QUERY_WRITABLE_NAMESPACES = 1<<26
-} GVfsJobType;
-
-
-
-struct _GVfsBackendLocalTest
-{
- GVfsBackend parent_instance;
- const gchar *test;
- GMountSpec *mount_spec;
- int errorneous;
- GVfsJobType inject_op_types;
-};
-
-struct _GVfsBackendLocalTestClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_localtest_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_LOCALTEST_H__ */
diff --git a/daemon/gvfsbackendnetwork.c b/daemon/gvfsbackendnetwork.c
deleted file mode 100644
index d23438e7..00000000
--- a/daemon/gvfsbackendnetwork.c
+++ /dev/null
@@ -1,864 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- * Original work, Copyright (C) 2003 Red Hat, Inc
- * GVFS port, Copyright (c) 2008 Andrew Walton.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with the Gnome Library; see the file COPYING.LIB. If not,
- * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors:
- * Alexander Larsson <alexl@redhat.com>
- * Andrew Walton <awalton@svn.gnome.org> (port only)
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib/gurifuncs.h>
-#include <gio/gio.h>
-#include <gconf/gconf-client.h>
-
-#include "gvfsbackendnetwork.h"
-
-#include "gvfsdaemonprotocol.h"
-#include "gvfsjobcreatemonitor.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsmonitor.h"
-
-#define PATH_GCONF_GVFS_SMB "/system/smb"
-#define PATH_GCONF_GVFS_SMB_WORKGROUP "/system/smb/workgroup"
-#define DEFAULT_WORKGROUP_NAME "X-GNOME-DEFAULT-WORKGROUP"
-
-#define PATH_GCONF_GVFS_DNS_SD "/system/dns_sd"
-#define PATH_GCONF_GVFS_DNS_SD_DISPLAY_LOCAL "/system/dns_sd/display_local"
-#define PATH_GCONF_GVFS_DNS_SD_EXTRA_DOMAINS "/system/dns_sd/extra_domains"
-
-#define NETWORK_FILE_ATTRIBUTES "standard::name,standard::display-name,standard::target-uri"
-
-typedef struct {
- char *file_name;
- char *display_name;
- char *target_uri;
- GIcon *icon;
-} NetworkFile;
-
-static NetworkFile root = { "/" };
-
-typedef enum {
- NETWORK_LOCAL_DISABLED,
- NETWORK_LOCAL_MERGED,
- NETWORK_LOCAL_SEPARATE
-} NetworkLocalSetting;
-
-struct _GVfsBackendNetwork
-{
- GVfsBackend parent_instance;
- GVfsMonitor *root_monitor;
- GMountSpec *mount_spec;
- GList *files; /* list of NetworkFiles */
- int idle_tag;
-
- /* SMB Stuff */
- gboolean have_smb;
- char *current_workgroup;
- GFileMonitor *smb_monitor;
-
- /* DNS-SD Stuff */
- gboolean have_dnssd;
- NetworkLocalSetting local_setting;
- char *extra_domains;
- GFileMonitor *dnssd_monitor;
-
- /* Icons */
- GIcon *workgroup_icon; /* GThemedIcon = "network-workgroup" */
- GIcon *server_icon; /* GThemedIcon = "network-server" */
-};
-
-typedef struct _GVfsBackendNetwork GVfsBackendNetwork;
-
-G_DEFINE_TYPE (GVfsBackendNetwork, g_vfs_backend_network, G_VFS_TYPE_BACKEND);
-
-static NetworkFile *
-network_file_new (const char *file_name,
- const char *display_name,
- const char *target_uri,
- GIcon *icon)
-{
- NetworkFile *file;
-
- file = g_slice_new0 (NetworkFile);
-
- file->file_name = g_strdup (file_name);
- file->display_name = g_strdup (display_name);
- file->target_uri = g_strdup (target_uri);
- file->icon = g_object_ref (icon);
-
- return file;
-}
-
-static void
-network_file_free (NetworkFile *file)
-{
- g_free (file->file_name);
- g_free (file->display_name);
- g_free (file->target_uri);
-
- if (file->icon)
- g_object_unref (file->icon);
-
- g_slice_free (NetworkFile, file);
-}
-
-/* Assumes file_name is equal and compares for
- metadata changes */
-static gboolean
-network_file_equal (NetworkFile *a,
- NetworkFile *b)
-{
- if (!g_icon_equal (a->icon, b->icon))
- return FALSE;
-
- if ((a->display_name != NULL && b->display_name == NULL) ||
- (a->display_name == NULL && b->display_name != NULL))
- return FALSE;
-
- if ((a->display_name != NULL && b->display_name != NULL) &&
- strcmp (a->display_name, b->display_name) != 0)
- return FALSE;
-
- return TRUE;
-}
-
-static int
-sort_file_by_file_name (NetworkFile *a, NetworkFile *b)
-{
- return strcmp (a->file_name, b->file_name);
-}
-
-static NetworkLocalSetting
-parse_network_local_setting (const char *setting)
-{
- if (setting == NULL)
- return NETWORK_LOCAL_DISABLED;
- if (strcmp (setting, "separate") == 0)
- return NETWORK_LOCAL_SEPARATE;
- if (strcmp (setting, "merged") == 0)
- return NETWORK_LOCAL_MERGED;
- return NETWORK_LOCAL_DISABLED;
-}
-
-static void
-update_from_files (GVfsBackendNetwork *backend,
- GList *files)
-{
- GList *old_files;
- GList *oldl, *newl;
- char *file_name;
- NetworkFile *old, *new;
- int cmp;
-
- old_files = backend->files;
- backend->files = g_list_sort (files, (GCompareFunc)sort_file_by_file_name);
-
- /* Generate change events */
- oldl = old_files;
- newl = backend->files;
- while (oldl != NULL || newl != NULL)
- {
- if (oldl == NULL)
- {
- cmp = 1;
- new = newl->data;
- old = NULL;
- }
- else if (newl == NULL)
- {
- cmp = -1;
- new = NULL;
- old = oldl->data;
- }
- else
- {
- new = newl->data;
- old = oldl->data;
- cmp = sort_file_by_file_name (old, new);
- }
-
- if (cmp == 0)
- {
- if (!network_file_equal (old, new))
- {
- file_name = g_strconcat ("/", new->file_name, NULL);
- g_vfs_monitor_emit_event (backend->root_monitor,
- G_FILE_MONITOR_EVENT_CHANGED,
- file_name,
- NULL);
- g_free (file_name);
- }
-
- oldl = oldl->next;
- newl = newl->next;
- }
- else if (cmp < 0)
- {
- file_name = g_strconcat ("/", old->file_name, NULL);
- g_vfs_monitor_emit_event (backend->root_monitor,
- G_FILE_MONITOR_EVENT_DELETED,
- file_name,
- NULL);
- g_free (file_name);
- oldl = oldl->next;
- }
- else
- {
- file_name = g_strconcat ("/", new->file_name, NULL);
- g_vfs_monitor_emit_event (backend->root_monitor,
- G_FILE_MONITOR_EVENT_CREATED,
- file_name,
- NULL);
- g_free (file_name);
- newl = newl->next;
- }
- }
-
- g_list_foreach (old_files, (GFunc)network_file_free, NULL);
-}
-
-static void
-notify_dnssd_local_changed (GFileMonitor *monitor, GFile *file, GFile *other_file,
- GFileMonitorEvent event_type, gpointer user_data);
-
-static void
-notify_smb_files_changed (GFileMonitor *monitor, GFile *file, GFile *other_file,
- GFileMonitorEvent event_type, gpointer user_data);
-
-static void
-recompute_files (GVfsBackendNetwork *backend)
-{
- GFile *server_file;
- GFileEnumerator *enumer;
- GFileInfo *info;
- GFileMonitor *monitor;
- GError *error;
- GList *files;
- NetworkFile *file;
- char *file_name, *link_uri;
-
- files = NULL;
- error = NULL;
- if (backend->have_smb)
- {
- char *workgroup;
-
- /* smb:/// root link */
- file = network_file_new ("smb-root", _("Windows Network"),
- "smb:///", backend->workgroup_icon);
- files = g_list_prepend (files, file);
-
- if (backend->current_workgroup == NULL ||
- backend->current_workgroup[0] == 0)
- workgroup = g_strconcat ("smb://", DEFAULT_WORKGROUP_NAME, "/", NULL);
- else
- workgroup = g_strconcat ("smb://", backend->current_workgroup, "/", NULL);
-
- server_file = g_file_new_for_uri (workgroup);
-
- /* recreate monitor if our workgroup changed or we don't have a monitor */
- if (backend->smb_monitor == NULL)
- {
- monitor = g_file_monitor_directory (server_file, G_FILE_MONITOR_NONE, NULL, &error);
- if (monitor)
- {
- g_signal_connect (monitor, "changed",
- (GCallback)notify_smb_files_changed, (gpointer)backend);
- /* takes ref */
- backend->smb_monitor = monitor;
- }
- else
- {
- char *uri = g_file_get_uri (server_file);
- g_warning ("Couldn't create directory monitor on %s. Error: %s",
- uri, error->message);
- g_free (uri);
- g_error_free (error);
- error = NULL;
- }
- }
-
- /* children of current workgroup */
- enumer = g_file_enumerate_children (server_file,
- NETWORK_FILE_ATTRIBUTES,
- G_FILE_QUERY_INFO_NONE,
- NULL, NULL);
- if (enumer != NULL)
- {
- info = g_file_enumerator_next_file (enumer, NULL, NULL);
- while (info != NULL)
- {
- file_name = g_strconcat("smb-server-", g_file_info_get_name (info), NULL);
- link_uri = g_strconcat("smb://", g_file_info_get_name (info), "/", NULL);
- file = network_file_new (file_name,
- g_file_info_get_display_name (info),
- link_uri,
- backend->server_icon);
- files = g_list_prepend (files, file);
-
- g_free (link_uri);
- g_free (file_name);
- g_object_unref (info);
- info = g_file_enumerator_next_file (enumer, NULL, NULL);
- }
- }
-
- g_file_enumerator_close (enumer, NULL, NULL);
- g_object_unref (enumer);
- g_object_unref (server_file);
-
- g_free (workgroup);
- }
-
- if (backend->have_dnssd)
- {
- server_file = g_file_new_for_uri ("dns-sd://local/");
- /* create directory monitor if we haven't already */
- if (backend->dnssd_monitor == NULL)
- {
- monitor = g_file_monitor_directory (server_file, G_FILE_MONITOR_NONE, NULL, &error);
- if (monitor)
- {
- g_signal_connect (monitor, "changed",
- (GCallback)notify_dnssd_local_changed, (gpointer)backend);
- /* takes ref */
- backend->dnssd_monitor = monitor;
- }
- else
- {
- char *uri = g_file_get_uri(server_file);
- g_warning ("Couldn't create directory monitor on %s. Error: %s",
- uri, error->message);
- g_free (uri);
- g_error_free (error);
- }
- }
-
- if (backend->local_setting == NETWORK_LOCAL_MERGED)
- {
- /* "merged": add local domains to network:/// */
- enumer = g_file_enumerate_children (server_file,
- NETWORK_FILE_ATTRIBUTES,
- G_FILE_QUERY_INFO_NONE,
- NULL, NULL);
- if (enumer != NULL)
- {
- info = g_file_enumerator_next_file (enumer, NULL, NULL);
- while (info != NULL)
- {
- file_name = g_strconcat("dnssd-domain-", g_file_info_get_name (info), NULL);
- link_uri = g_strdup(g_file_info_get_attribute_string (info,
- "standard::target-uri"));
- file = network_file_new (file_name,
- g_file_info_get_display_name (info),
- link_uri,
- backend->server_icon);
- files = g_list_prepend (files, file);
-
- g_free (link_uri);
- g_free (file_name);
- g_object_unref (info);
- info = g_file_enumerator_next_file (enumer, NULL, NULL);
- }
- }
-
- g_file_enumerator_close (enumer, NULL, NULL);
- g_object_unref (enumer);
- }
- else
- {
- /* "separate": a link to dns-sd://local/ */
- file = network_file_new ("dnssd-local", _("Local Network"),
- "dns-sd://local/", backend->workgroup_icon);
- files = g_list_prepend (files, file);
- }
-
- g_object_unref (server_file);
-
- /* If gconf setting "/system/dns_sd/extra_domains" is set to a list of domains:
- * links to dns-sd://$domain/ */
- if (backend->extra_domains != NULL &&
- backend->extra_domains[0] != 0)
- {
- char **domains;
- int i;
- domains = g_strsplit (backend->extra_domains, ",", 0);
- for (i=0; domains[i] != NULL; i++)
- {
- file_name = g_strconcat("dnssd-domain-", domains[i], NULL);
- link_uri = g_strconcat("dns-sd://", domains[i], "/", NULL);
- file = network_file_new (file_name,
- domains[i],
- link_uri,
- backend->server_icon);
- files = g_list_prepend (files, file);
- g_free (link_uri);
- g_free (file_name);
- }
- g_strfreev (domains);
- }
- }
-
- update_from_files (backend, files);
-}
-
-static gboolean
-idle_add_recompute (GVfsBackendNetwork *backend)
-{
- backend->idle_tag = 0;
-
- recompute_files (backend);
-
- return FALSE;
-}
-
-static void
-notify_smb_files_changed (GFileMonitor *monitor, GFile *file, GFile *other_file,
- GFileMonitorEvent event_type, gpointer user_data)
-{
- GVfsBackendNetwork *backend = G_VFS_BACKEND_NETWORK(user_data);
- switch (event_type)
- {
- case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED:
- case G_FILE_MONITOR_EVENT_CREATED:
- case G_FILE_MONITOR_EVENT_DELETED:
- if (backend->idle_tag == 0)
- backend->idle_tag = g_idle_add ((GSourceFunc)idle_add_recompute, backend);
- break;
- case G_FILE_MONITOR_EVENT_PRE_UNMOUNT:
- case G_FILE_MONITOR_EVENT_UNMOUNTED:
- /* in either event, our smb backend is/will be gone. */
- if (backend->idle_tag == 0)
- backend->idle_tag = g_idle_add ((GSourceFunc)idle_add_recompute, backend);
-
- /* stop monitoring as the backend's gone. */
- g_file_monitor_cancel (backend->smb_monitor);
- g_object_unref (backend->smb_monitor);
- backend->smb_monitor = NULL;
- break;
- default:
- break;
- }
-}
-
-static void
-notify_dnssd_local_changed (GFileMonitor *monitor, GFile *file, GFile *other_file,
- GFileMonitorEvent event_type, gpointer user_data)
-{
- GVfsBackendNetwork *backend = G_VFS_BACKEND_NETWORK(user_data);
- switch (event_type)
- {
- case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED:
- case G_FILE_MONITOR_EVENT_CREATED:
- case G_FILE_MONITOR_EVENT_DELETED:
- if (backend->idle_tag == 0)
- backend->idle_tag = g_idle_add ((GSourceFunc)idle_add_recompute, backend);
- break;
- case G_FILE_MONITOR_EVENT_PRE_UNMOUNT:
- case G_FILE_MONITOR_EVENT_UNMOUNTED:
- /* in either event, our dns-sd backend is/will be gone. */
- if (backend->idle_tag == 0)
- backend->idle_tag = g_idle_add ((GSourceFunc)idle_add_recompute, backend);
- /* stop monitoring as the backend's gone. */
- g_file_monitor_cancel (backend->dnssd_monitor);
- g_object_unref (backend->dnssd_monitor);
- backend->dnssd_monitor = NULL;
- break;
- default:
- break;
- }
-}
-
-static void
-notify_gconf_dnssd_domains_changed (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer data)
-{
- GVfsBackendNetwork *backend = G_VFS_BACKEND_NETWORK(data);
- char *extra_domains;
- extra_domains = gconf_client_get_string (client,
- PATH_GCONF_GVFS_DNS_SD_EXTRA_DOMAINS, NULL);
-
- g_free (backend->extra_domains);
- backend->extra_domains = extra_domains;
-
- /* don't re-issue recomputes if we've already queued one. */
- if (backend->idle_tag == 0)
- backend->idle_tag = g_idle_add ((GSourceFunc)idle_add_recompute, backend);
-}
-
-static void
-notify_gconf_dnssd_display_local_changed (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer data)
-{
- GVfsBackendNetwork *backend = G_VFS_BACKEND_NETWORK(data);
- char *display_local;
-
- display_local = gconf_client_get_string (client,
- PATH_GCONF_GVFS_DNS_SD_DISPLAY_LOCAL, NULL);
-
- backend->local_setting = parse_network_local_setting (display_local);
- g_free (display_local);
-
- /* don't re-issue recomputes if we've already queued one. */
- if (backend->idle_tag == 0)
- backend->idle_tag = g_idle_add ((GSourceFunc)idle_add_recompute, backend);
-}
-
-static void
-notify_gconf_smb_workgroup_changed (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer data)
-{
- GVfsBackendNetwork *backend = G_VFS_BACKEND_NETWORK(data);
- char *current_workgroup;
-
- current_workgroup = gconf_client_get_string (client,
- PATH_GCONF_GVFS_SMB_WORKGROUP, NULL);
-
- g_free (backend->current_workgroup);
- backend->current_workgroup = current_workgroup;
-
- /* cancel the smb monitor */
- g_signal_handlers_disconnect_by_func (backend->smb_monitor,
- notify_smb_files_changed,
- backend->smb_monitor);
- g_file_monitor_cancel (backend->smb_monitor);
- g_object_unref (backend->smb_monitor);
- backend->smb_monitor = NULL;
-
- /* don't re-issue recomputes if we've already queued one. */
- if (backend->idle_tag == 0)
- backend->idle_tag = g_idle_add ((GSourceFunc)idle_add_recompute, backend);
-}
-
-static NetworkFile *
-lookup_network_file (GVfsBackendNetwork *backend,
- GVfsJob *job,
- const char *file_name)
-{
- GList *l;
- NetworkFile *file;
-
- if (*file_name != '/')
- goto out;
-
- while (*file_name == '/')
- file_name++;
-
- if (*file_name == 0)
- return &root;
-
- if (strchr (file_name, '/') != NULL)
- goto out;
-
- for (l = backend->files; l != NULL; l = l->next)
- {
- file = l->data;
- if (strcmp (file->file_name, file_name) == 0)
- return file;
- }
-
- out:
- g_vfs_job_failed (job, G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("File doesn't exist"));
-
- return NULL;
-}
-
-
-static void
-file_info_from_file (NetworkFile *file,
- GFileInfo *info)
-{
- g_return_if_fail (file != NULL || info != NULL);
-
- g_file_info_set_name (info, file->file_name);
- g_file_info_set_display_name (info, file->display_name);
-
- if (file->icon)
- g_file_info_set_icon (info, file->icon);
-
- g_file_info_set_file_type (info, G_FILE_TYPE_SHORTCUT);
- g_file_info_set_size (info, 0);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL, TRUE);
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI,
- file->target_uri);
-}
-
-/* Backend Functions */
-static gboolean
-try_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *file_name,
- GFileAttributeMatcher *attribute_matcher,
- GFileQueryInfoFlags flags)
-{
- NetworkFile *file;
- GList *l;
- GFileInfo *info;
- file = lookup_network_file (G_VFS_BACKEND_NETWORK (backend),
- G_VFS_JOB (job), file_name);
-
- if (file != &root)
- {
- if (file != NULL)
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_DIRECTORY,
- _("The file is not a directory"));
- return TRUE;
- }
-
- g_vfs_job_succeeded (G_VFS_JOB(job));
-
- /* Enumerate root */
- for (l = G_VFS_BACKEND_NETWORK (backend)->files; l != NULL; l = l->next)
- {
- file = l->data;
- info = g_file_info_new ();
- file_info_from_file (file, info);
- g_vfs_job_enumerate_add_info (job, info);
- g_object_unref (info);
- }
-
- g_vfs_job_enumerate_done (job);
-
- return TRUE;
-}
-
-static gboolean
-try_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *file_name,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- NetworkFile *file;
-
- file = lookup_network_file (G_VFS_BACKEND_NETWORK (backend),
- G_VFS_JOB (job), file_name);
-
- if (file == &root)
- {
- GIcon *icon;
- g_file_info_set_name (info, "/");
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
- g_file_info_set_display_name (info, _("Network"));
- icon = g_themed_icon_new ("network-workgroup");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
- g_file_info_set_content_type (info, "inode/directory");
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else if (file != NULL)
- {
- file_info_from_file (file, info);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-
- return TRUE;
-}
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendNetwork *network_backend = G_VFS_BACKEND_NETWORK (backend);
- network_backend->root_monitor = g_vfs_monitor_new (backend);
- recompute_files (network_backend);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- return TRUE;
-}
-
-/* handles both file and dir monitors
- * for now we only fire events on the root directory.
- * are individual file monitors needed for this backend?
- */
-static gboolean
-try_create_monitor (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *file_name,
- GFileMonitorFlags flags)
-{
- NetworkFile *file;
- GVfsBackendNetwork *network_backend;
-
- network_backend = G_VFS_BACKEND_NETWORK (backend);
-
- file = lookup_network_file (network_backend, G_VFS_JOB (job), file_name);
-
- if (file != &root)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Can't monitor file or directory."));
- return TRUE;
- }
-
- g_vfs_job_create_monitor_set_monitor (job, network_backend->root_monitor);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- return TRUE;
-}
-
-static void
-g_vfs_backend_network_init (GVfsBackendNetwork *network_backend)
-{
- GVfsBackend *backend = G_VFS_BACKEND (network_backend);
- GMountSpec *mount_spec;
- GConfClient *gconf_client;
- char *display_local, *extra_domains;
- char *current_workgroup;
- const char * const* supported_vfs;
- int i;
-
- supported_vfs = g_vfs_get_supported_uri_schemes (g_vfs_get_default ());
-
- network_backend->have_smb = FALSE;
- network_backend->have_dnssd = FALSE;
- for (i=0; supported_vfs[i]!=NULL; i++)
- {
- if (strcmp(supported_vfs[i], "smb") == 0)
- network_backend->have_smb = TRUE;
-
- if (strcmp(supported_vfs[i], "dns-sd") == 0)
- network_backend->have_dnssd = TRUE;
- }
-
- gconf_client = gconf_client_get_default ();
-
- if (network_backend->have_smb)
- {
- gconf_client_add_dir (gconf_client, PATH_GCONF_GVFS_SMB,
- GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-
- current_workgroup = gconf_client_get_string (gconf_client,
- PATH_GCONF_GVFS_SMB_WORKGROUP, NULL);
-
- if (current_workgroup == NULL ||
- current_workgroup[0] == 0)
- /* it's okay if current_workgroup is null here,
- * it's checked before the NetworkFile is added anyway. */
- network_backend->current_workgroup = NULL;
- else
- network_backend->current_workgroup = current_workgroup;
-
- gconf_client_notify_add (gconf_client, PATH_GCONF_GVFS_SMB_WORKGROUP,
- notify_gconf_smb_workgroup_changed, network_backend, NULL, NULL);
-
- }
-
- if (network_backend->have_dnssd)
- {
- gconf_client_add_dir (gconf_client, PATH_GCONF_GVFS_DNS_SD,
- GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-
- display_local = gconf_client_get_string (gconf_client,
- PATH_GCONF_GVFS_DNS_SD_DISPLAY_LOCAL, NULL);
- extra_domains = gconf_client_get_string (gconf_client,
- PATH_GCONF_GVFS_DNS_SD_EXTRA_DOMAINS, NULL);
-
- if (display_local != NULL && display_local[0] != 0)
- network_backend->local_setting = parse_network_local_setting (display_local);
-
- g_free (display_local);
- network_backend->extra_domains = extra_domains;
-
- gconf_client_notify_add (gconf_client, PATH_GCONF_GVFS_DNS_SD_EXTRA_DOMAINS,
- notify_gconf_dnssd_domains_changed, network_backend, NULL, NULL);
-
- gconf_client_notify_add (gconf_client, PATH_GCONF_GVFS_DNS_SD_DISPLAY_LOCAL,
- notify_gconf_dnssd_display_local_changed, network_backend, NULL, NULL);
-
- }
-
- g_object_unref (gconf_client);
-
- g_vfs_backend_set_display_name (backend, _("Network"));
- g_vfs_backend_set_stable_name (backend, _("Network"));
- g_vfs_backend_set_icon_name (backend, "network-workgroup");
- g_vfs_backend_set_user_visible (backend, FALSE);
-
- mount_spec = g_mount_spec_new ("network");
- g_vfs_backend_set_mount_spec (backend, mount_spec);
- network_backend->mount_spec = mount_spec;
-
- network_backend->workgroup_icon = g_themed_icon_new ("network-workgroup");
- network_backend->server_icon = g_themed_icon_new ("network-server");
-}
-
-static void
-g_vfs_backend_network_finalize (GObject *object)
-{
- GVfsBackendNetwork *backend;
- backend = G_VFS_BACKEND_NETWORK (object);
-
- g_mount_spec_unref (backend->mount_spec);
- g_object_unref (backend->root_monitor);
- g_object_unref (backend->workgroup_icon);
- g_object_unref (backend->server_icon);
-
- if (G_OBJECT_CLASS (g_vfs_backend_network_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_network_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_network_class_init (GVfsBackendNetworkClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_network_finalize;
-
- backend_class->try_mount = try_mount;
- backend_class->try_query_info = try_query_info;
- backend_class->try_enumerate = try_enumerate;
- backend_class->try_create_dir_monitor = try_create_monitor;
- backend_class->try_create_file_monitor = try_create_monitor;
-}
-
-void
-g_vfs_network_daemon_init (void)
-{
- /* Translators: this is the friendly name of the 'network://' backend that
- * shows computers in your local network. */
- g_set_application_name (_("Network Location Monitor"));
-}
-
diff --git a/daemon/gvfsbackendnetwork.h b/daemon/gvfsbackendnetwork.h
deleted file mode 100644
index 8acbfeef..00000000
--- a/daemon/gvfsbackendnetwork.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* gvfs-backend-network.h - GIO - GLib Input, Output and Streaming Library
- * Original work, Copyright (C) 2003 Red Hat, Inc
- * GVFS port, Copyright (c) 2008 Andrew Walton.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with the Gnome Library; see the file COPYING.LIB. If not,
- * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors:
- * Alexander Larsson <alexl@redhat.com>
- * Andrew Walton <awalton@svn.gnome.org>
- */
-
-#ifndef __G_VFS_BACKEND_NETWORK_H__
-#define __G_VFS_BACKEND_NETWORK_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_NETWORK (g_vfs_backend_network_get_type ())
-#define G_VFS_BACKEND_NETWORK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_NETWORK, GVfsBackendNetwork))
-#define G_VFS_BACKEND_NETWORK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_NETWORK, GVfsBackendNetworkClass))
-#define G_VFS_IS_BACKEND_NETWORK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_NETWORK))
-#define G_VFS_IS_BACKEND_NETWORK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_NETWORK))
-#define G_VFS_BACKEND_NETWORK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_NETWORK, GVfsBackendNetworkClass))
-
-typedef struct _GVfsBackendNetworkClass GVfsBackendNetworkClass;
-
-struct _GVfsBackendNetworkClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_network_get_type (void) G_GNUC_CONST;
-
-#define BACKEND_SETUP_FUNC g_vfs_network_daemon_init
-void g_vfs_network_daemon_init (void);
-
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_NETWORK_H__ */
diff --git a/daemon/gvfsbackendobexftp-cap-parser.c b/daemon/gvfsbackendobexftp-cap-parser.c
deleted file mode 100644
index 183195e7..00000000
--- a/daemon/gvfsbackendobexftp-cap-parser.c
+++ /dev/null
@@ -1,595 +0,0 @@
-/*
- * Copyright (C) 2004-2005 Nokia Corporation.
- * Copyright (C) 2008 Bastien Nocera <hadess@hadess.net>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; version 2 of the
- * License.
- *
- * This program 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include <glib.h>
-#include <expat.h>
-
-#include "gvfsbackendobexftp-cap-parser.h"
-
-#define d(x)
-
-struct _OvuCaps {
- GList *memory_entries;
-
- /* FIXME: Add "Services" and "Inbox" data here later. */
-};
-
-struct _OvuCapsMemory {
- gchar *type;
- goffset free;
- goffset used;
- guint has_free : 1;
- guint has_used : 1;
- guint case_sensitive : 1;
-};
-
-typedef enum {
- PARSER_STATE_INVALID,
-
- PARSER_STATE_START,
- PARSER_STATE_CAPABILITY,
-
- PARSER_STATE_GENERAL,
-
- PARSER_STATE_MEMORY,
- PARSER_STATE_MEMORY_TYPE,
- PARSER_STATE_MEMORY_LOCATION,
- PARSER_STATE_MEMORY_FREE,
- PARSER_STATE_MEMORY_USED,
- PARSER_STATE_MEMORY_SHARED,
- PARSER_STATE_MEMORY_FILESIZE,
- PARSER_STATE_MEMORY_FOLDERSIZE,
- PARSER_STATE_MEMORY_FILELEN,
- PARSER_STATE_MEMORY_FOLDERLEN,
- PARSER_STATE_MEMORY_CASE,
- PARSER_STATE_MEMORY_EXT,
-
- PARSER_STATE_INBOX,
- PARSER_STATE_SERVICE,
-
- PARSER_STATE_SKIP
-} ParserState;
-
-
-typedef struct {
- GList *state;
-
- GList *memory_entries;
-
- gchar *memory_type;
- goffset memory_free;
- goffset memory_used;
- gboolean memory_has_free;
- gboolean memory_has_used;
- gboolean memory_case_sensitive;
-
- GError **error;
-} ParserData;
-
-static void cap_parser_start_node_cb (void *user_data,
- const char *node_name,
- const char **attr);
-
-static void cap_parser_end_node_cb (void *user_data,
- const char *node_name);
-static void cap_parser_text_cb (void *user_data,
- const XML_Char *s,
- int len);
-static XML_Parser
-cap_parser_create_parser (ParserData *data);
-
-
-static void
-cap_parser_push_state (ParserData *data, ParserState state)
-{
- data->state = g_list_prepend (data->state,
- GINT_TO_POINTER (state));
-}
-
-static ParserState
-cap_parser_pop_state (ParserData *data)
-{
- ParserState state;
-
- if (!data->state) {
- return PARSER_STATE_INVALID;
- }
-
- state = GPOINTER_TO_INT (data->state->data);
- data->state = g_list_delete_link (data->state, data->state);
-
- return state;
-}
-
-static ParserState
-cap_parser_peek_state (ParserData *data)
-{
- if (!data->state) {
- return PARSER_STATE_START;
- }
-
- return GPOINTER_TO_INT (data->state->data);
-}
-
-static const char *
-cap_parser_get_attribute_value (const char *name, const char **attr)
-{
- gint i = 0;
-
- while (attr[i]) {
- if (strcmp (name, attr[i]) == 0) {
- return attr[i + 1];
- }
- i += 2;
- }
-
- return "";
-}
-
-static void
-cap_parser_start_node_cb (void *user_data,
- const char *node_name,
- const char **attr)
-{
- ParserData *data;
- ParserState state;
- const gchar *version;
-
- data = (ParserData *) user_data;
-
- state = cap_parser_peek_state (data);
-
- switch (state) {
- case PARSER_STATE_START:
- if (strcmp (node_name, "Capability") != 0) {
- g_set_error (data->error,
- G_MARKUP_ERROR,
- G_MARKUP_ERROR_INVALID_CONTENT,
- "Outermost element must be a <Capability>, not <%s>",
- node_name);
- return;
- }
-
- version = cap_parser_get_attribute_value ("version", attr);
- /* Assume an empty version is fine */
- if (strcmp (version, "1.0") != 0 && version[0] != '\0') {
- g_warning ("Version expected is '1.0', not '%s'\n", version);
- }
-
- cap_parser_push_state (data, PARSER_STATE_CAPABILITY);
- break;
-
- case PARSER_STATE_CAPABILITY:
- if (strcmp (node_name, "General") == 0) {
- cap_parser_push_state (data, PARSER_STATE_GENERAL);
- }
- else if (strcmp (node_name, "Inbox") == 0) {
- cap_parser_push_state (data, PARSER_STATE_INBOX);
- }
- else if (strcmp (node_name, "Service") == 0) {
- cap_parser_push_state (data, PARSER_STATE_SERVICE);
- } else {
- g_set_error (data->error,
- G_MARKUP_ERROR,
- G_MARKUP_ERROR_INVALID_CONTENT,
- "Don't expect node '%s' as child of 'Cap'",
- node_name);
- return;
- }
- break;
-
- case PARSER_STATE_GENERAL:
- if (strcmp (node_name, "Memory") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY);
- }
- else if (strcmp (node_name, "Manufacturer") == 0 ||
- strcmp (node_name, "Model") == 0 ||
- strcmp (node_name, "SN") == 0 ||
- strcmp (node_name, "OEM") == 0 ||
- strcmp (node_name, "SW") == 0 ||
- strcmp (node_name, "FW") == 0 ||
- strcmp (node_name, "HW") == 0 ||
- strcmp (node_name, "Language") == 0 ||
- strcmp (node_name, "Ext") == 0) {
-
- /* Skip these for now. */
- cap_parser_push_state (data, PARSER_STATE_SKIP);
- } else {
- g_set_error (data->error,
- G_MARKUP_ERROR,
- G_MARKUP_ERROR_INVALID_CONTENT,
- "Don't expect node '%s' as child of 'General'",
- node_name);
- return;
- }
-
- break;
-
- case PARSER_STATE_MEMORY:
- if (strcmp (node_name, "MemType") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY_TYPE);
- }
- else if (strcmp (node_name, "Location") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY_LOCATION);
- }
- else if (strcmp (node_name, "Free") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY_FREE);
- }
- else if (strcmp (node_name, "Used") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY_USED);
- }
- else if (strcmp (node_name, "Shared") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY_SHARED);
- }
- else if (strcmp (node_name, "FileSize") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY_FILESIZE);
- }
- else if (strcmp (node_name, "FolderSize") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY_FOLDERSIZE);
- }
- else if (strcmp (node_name, "FileNLen") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY_FILELEN);
- }
- else if (strcmp (node_name, "FolderNLen") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY_FOLDERLEN);
- }
- else if (strcmp (node_name, "CaseSenN") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY_CASE);
- data->memory_case_sensitive = TRUE;
- }
- else if (strcmp (node_name, "Ext") == 0) {
- cap_parser_push_state (data, PARSER_STATE_MEMORY_EXT);
- } else {
- g_set_error (data->error,
- G_MARKUP_ERROR,
- G_MARKUP_ERROR_INVALID_CONTENT,
- "Don't expect node '%s' as child of 'Memory'",
- node_name);
- return;
- }
- break;
-
- case PARSER_STATE_INBOX:
- case PARSER_STATE_SERVICE:
- /* Skip these for now. */
- cap_parser_push_state (data, PARSER_STATE_SKIP);
- break;
-
- case PARSER_STATE_SKIP:
- cap_parser_push_state (data, PARSER_STATE_SKIP);
- break;
-
- default:
- g_warning ("Node not handled: '%s'\n", node_name);
- cap_parser_push_state (data, PARSER_STATE_SKIP);
- break;
- }
-}
-
-static void
-cap_parser_reset_memory (ParserData *data)
-{
- g_free (data->memory_type);
- data->memory_type = NULL;
- data->memory_free = 0;
- data->memory_used = 0;
- data->memory_has_free = FALSE;
- data->memory_has_used = FALSE;
- data->memory_case_sensitive = FALSE;
-}
-
-static void
-cap_parser_end_node_cb (void *user_data, const char *node_name)
-{
- ParserData *data;
- ParserState state;
- OvuCapsMemory *memory;
-
- data = (ParserData *) user_data;
-
- state = cap_parser_pop_state (data);
-
- switch (state) {
- case PARSER_STATE_INVALID:
- return;
-
- case PARSER_STATE_MEMORY:
- memory = ovu_caps_memory_new (data->memory_type,
- data->memory_free,
- data->memory_used,
- data->memory_has_free,
- data->memory_has_used,
- data->memory_case_sensitive);
-
- data->memory_entries = g_list_prepend (data->memory_entries,
- memory);
- cap_parser_reset_memory (data);
- break;
-
- case PARSER_STATE_CAPABILITY:
- data->memory_entries = g_list_reverse (data->memory_entries);
- break;
-
- default:
- break;
- }
-}
-
-/* Parse a long, return -1 if input is not strictly valid or null. */
-static goffset
-parse_long (const gchar *str, gboolean *success)
-{
- gchar *endptr;
- glong l;
-
- *success = TRUE;
-
- if (!str) {
- *success = FALSE;
- return 0;
- }
-
- l = strtol (str, &endptr, 10);
- if (endptr[0] != '\0' || l < 0) {
- *success = FALSE;
- l = 0;
- }
-
- return l;
-}
-
-static void
-cap_parser_text_cb (void *user_data,
- const XML_Char *s,
- int len)
-{
- ParserData *data;
- ParserState state;
- gchar *tmp;
-
- data = (ParserData *) user_data;
-
- /* text is not null terminated. */
- tmp = g_strndup (s, len);
-
- state = cap_parser_peek_state (data);
-
- switch (state) {
- case PARSER_STATE_MEMORY_TYPE:
- data->memory_type = g_strdup (tmp);
- break;
- case PARSER_STATE_MEMORY_FREE:
- data->memory_free = parse_long (tmp, &data->memory_has_free);
- break;
- case PARSER_STATE_MEMORY_USED:
- data->memory_used = parse_long (tmp, &data->memory_has_used);
- break;
-
- default:
- break;
- }
-
- g_free (tmp);
-}
-
-static XML_Parser
-cap_parser_create_parser (ParserData *data)
-{
- XML_Parser parser;
-
- parser = XML_ParserCreate (NULL);
-
- XML_SetElementHandler (parser,
- cap_parser_start_node_cb,
- cap_parser_end_node_cb);
-
- XML_SetCharacterDataHandler (parser, cap_parser_text_cb);
-
- XML_SetUserData (parser, data);
-
- return parser;
-}
-
-static void
-cap_parser_free (ParserData *data, gboolean free_data)
-{
- cap_parser_reset_memory (data);
-
- if (free_data) {
- g_list_foreach (data->memory_entries,
- (GFunc) ovu_caps_memory_free, NULL);
- }
-
- g_free (data);
-}
-
-OvuCaps *
-ovu_caps_parser_parse (const gchar *buf,
- gint len,
- GError **error)
-{
- ParserData *data;
- XML_Parser parser;
- OvuCaps *caps;
-
- data = g_new0 (ParserData, 1);
-
- data->error = error;
- parser = cap_parser_create_parser (data);
-
- if (XML_Parse (parser, buf, len, TRUE) == 0) {
- caps = NULL;
-
- if (*error == NULL) {
- g_set_error_literal (error,
- G_MARKUP_ERROR,
- G_MARKUP_ERROR_INVALID_CONTENT,
- "Couldn't parse the incoming data");
- }
-
- cap_parser_free (data, TRUE);
- } else {
- caps = g_new0 (OvuCaps, 1);
- caps->memory_entries = data->memory_entries;
-
- cap_parser_free (data, FALSE);
- }
-
- XML_ParserFree (parser);
-
- return caps;
-}
-
-OvuCapsMemory *
-ovu_caps_memory_new (const gchar *type,
- goffset free,
- goffset used,
- gboolean has_free,
- gboolean has_used,
- gboolean case_sensitive)
-{
- OvuCapsMemory *memory;
-
- memory = g_new0 (OvuCapsMemory, 1);
-
- memory->type = g_strdup (type);
- memory->free = free;
- memory->used = used;
- memory->has_free = has_free;
- memory->has_used = has_used;
- memory->case_sensitive = case_sensitive;
-
- return memory;
-}
-
-void
-ovu_caps_memory_free (OvuCapsMemory *memory)
-{
- g_free (memory->type);
- g_free (memory);
-}
-
-gboolean
-ovu_caps_memory_equal (OvuCapsMemory *m1, OvuCapsMemory *m2)
-{
- if (strcmp (m1->type, m2->type) != 0) {
- d(g_print ("type mismatch: %s %s\n",
- m1->type, m2->type));
- return FALSE;
- }
-
- if (m1->free != m2->free) {
- d(g_print ("free mismatch: %d %d\n",
- (int) m1->free, (int) m2->free));
- return FALSE;
- }
-
- if (m1->used != m2->used) {
- d(g_print ("used mismatch: %d %d\n",
- (int) m1->used, (int) m2->used));
- return FALSE;
- }
-
- if (m1->case_sensitive != m2->case_sensitive) {
- d(g_print ("case mismatch: %d %d\n",
- m1->case_sensitive,
- m2->case_sensitive));
- return FALSE;
- }
-
- return TRUE;
-}
-
-void
-ovu_caps_free (OvuCaps *caps)
-{
- g_list_foreach (caps->memory_entries,
- (GFunc) ovu_caps_memory_free, NULL);
-
- g_list_free (caps->memory_entries);
-
- g_free (caps);
-}
-
-GList *
-ovu_caps_get_memory_entries (OvuCaps *caps)
-{
- g_return_val_if_fail (caps != NULL, NULL);
-
- return caps->memory_entries;
-}
-
-OvuCapsMemory *
-ovu_caps_get_memory_type (OvuCaps *caps,
- const gchar *mem_type)
-{
- GList *tmp;
-
- g_return_val_if_fail (caps != NULL, NULL);
-
- for (tmp = caps->memory_entries; tmp != NULL; tmp = tmp->next) {
- OvuCapsMemory *memory = tmp->data;
-
- /* treat a NULL memory type as matching anything */
- if (mem_type == NULL || (memory->type != NULL &&
- !strcmp(mem_type, memory->type)))
- return memory;
- }
- return NULL;
-}
-
-const gchar *
-ovu_caps_memory_get_type (OvuCapsMemory *memory)
-{
- return memory->type;
-}
-
-goffset
-ovu_caps_memory_get_used (OvuCapsMemory *memory)
-{
- return memory->used;
-}
-
-goffset
-ovu_caps_memory_get_free (OvuCapsMemory *memory)
-{
- return memory->free;
-}
-
-gboolean
-ovu_caps_memory_has_used (OvuCapsMemory *memory)
-{
- return memory->has_used;
-}
-
-gboolean
-ovu_caps_memory_has_free (OvuCapsMemory *memory)
-{
- return memory->has_free;
-}
-
-gboolean
-ovu_caps_memory_get_case_sensitive (OvuCapsMemory *memory)
-{
- return memory->case_sensitive;
-}
diff --git a/daemon/gvfsbackendobexftp-cap-parser.h b/daemon/gvfsbackendobexftp-cap-parser.h
deleted file mode 100644
index bfa58ca2..00000000
--- a/daemon/gvfsbackendobexftp-cap-parser.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2004 Nokia Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; version 2 of the
- * License.
- *
- * This program 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __OVU_CAP_PARSER_H__
-#define __OVU_CAP_PARSER_H__
-
-#include <glib.h>
-
-typedef struct _OvuCaps OvuCaps;
-typedef struct _OvuCapsMemory OvuCapsMemory;
-
-OvuCaps * ovu_caps_parser_parse (const gchar *buf,
- gint len,
- GError **error);
-
-GList * ovu_caps_get_memory_entries (OvuCaps *caps);
-OvuCapsMemory *ovu_caps_get_memory_type (OvuCaps *caps,
- const gchar *mem_type);
-void ovu_caps_free (OvuCaps *caps);
-OvuCapsMemory * ovu_caps_memory_new (const gchar *type,
- goffset free,
- goffset used,
- gboolean has_free,
- gboolean has_used,
- gboolean case_sensitive);
-void ovu_caps_memory_free (OvuCapsMemory *memory);
-gboolean ovu_caps_memory_equal (OvuCapsMemory *m1,
- OvuCapsMemory *m2);
-const gchar * ovu_caps_memory_get_type (OvuCapsMemory *memory);
-goffset ovu_caps_memory_get_used (OvuCapsMemory *memory);
-goffset ovu_caps_memory_get_free (OvuCapsMemory *memory);
-gboolean ovu_caps_memory_has_used (OvuCapsMemory *memory);
-gboolean ovu_caps_memory_has_free (OvuCapsMemory *memory);
-gboolean ovu_caps_memory_get_case_sensitive (OvuCapsMemory *memory);
-
-#endif /* __OVU_CAP_PARSER_H__ */
-
diff --git a/daemon/gvfsbackendobexftp-fl-parser.c b/daemon/gvfsbackendobexftp-fl-parser.c
deleted file mode 100644
index 9c491688..00000000
--- a/daemon/gvfsbackendobexftp-fl-parser.c
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Copyright (C) 2004-2005 Nokia Corporation.
- * Copyright (C) 2008 Bastien Nocera <hadess@hadess.net> (gio port)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; version 2 of the
- * License.
- *
- * This program 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <gio/gio.h>
-#include <expat.h>
-
-#include "gvfsbackendobexftp-fl-parser.h"
-
-#define d(x)
-
-typedef struct {
- GError **error;
- GList *elements;
-
- gint depth;
-} ParserData;
-
-/* Static functions declaration */
-static void fl_parser_start_node_cb (void *data,
- const char *el,
- const char **attr);
-static void fl_parser_end_node_cb (void *data,
- const char *el);
-static XML_Parser fl_parser_create_context (ParserData *data);
-static gboolean fl_parser_fill_file_info (GFileInfo *file_info,
- const char **attr);
-static void fl_parser_free_parser_data (ParserData *data,
- gboolean free_list);
-
-
-/* Function implementations */
-static void
-fl_parser_start_node_cb (void *user_data,
- const char *node_name,
- const char **attr)
-{
- ParserData *data;
- GFileInfo *info;
-
- data = (ParserData *) user_data;
-
- data->depth++;
-
- d(g_print ("%d: %s\n", data->depth, node_name));
-
- if (data->depth > 2) {
- g_set_error (data->error,
- G_MARKUP_ERROR,
- G_MARKUP_ERROR_INVALID_CONTENT,
- "Don't expect node '%s' as child of 'file', 'folder' or 'parent-folder'",
- node_name);
- return;
- }
- else if (data->depth == 1) {
- if (strcmp (node_name, "folder-listing") != 0) {
- g_set_error (data->error,
- G_MARKUP_ERROR,
- G_MARKUP_ERROR_INVALID_CONTENT,
- "Expected 'folder-listing', got '%s'",
- node_name);
- return;
- }
-
- return;
- }
-
- if (strcmp (node_name, "parent-folder") == 0) {
- /* Just ignore parent-folder items */
- return;
- }
-
- info = g_file_info_new ();
-
- if (strcmp (node_name, "file") == 0) {
- g_file_info_set_file_type (info, G_FILE_TYPE_REGULAR);
- }
- else if (strcmp (node_name, "folder") == 0) {
- GIcon *icon;
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
- g_file_info_set_content_type (info, "inode/directory");
-
- icon = g_themed_icon_new ("folder");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- } else {
- g_set_error (data->error,
- G_MARKUP_ERROR,
- G_MARKUP_ERROR_UNKNOWN_ELEMENT,
- "Unknown element '%s'",
- node_name);
- return;
- }
-
- if (!fl_parser_fill_file_info (info, attr)) {
- d(g_print ("Failed to fill GnomeVFSFileInfo from node '%s'\n",
- node_name));
- g_object_unref (info);
- return;
- }
-
- if (g_file_info_get_content_type (info) == NULL) {
- char *mime_type;
- mime_type = g_content_type_guess (g_file_info_get_name (info), NULL, 0, NULL);
- g_file_info_set_content_type (info, mime_type);
- g_free (mime_type);
- }
-
- if (g_file_info_get_content_type (info) == NULL) {
- g_file_info_set_content_type (info, "application/octet-stream");
- }
-
- if (g_file_info_get_file_type (info) == G_FILE_TYPE_REGULAR) {
- GIcon *icon;
-
- icon = g_content_type_get_icon (g_file_info_get_content_type (info));
- if (icon != NULL) {
- if (G_IS_THEMED_ICON (icon))
- g_themed_icon_append_name (G_THEMED_ICON (icon), "text-x-generic");
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- }
- }
-
- /* Permissions on folders in OBEX has different semantics than POSIX.
- * In POSIX, if a folder is not writable, it means that it's content
- * can't be removed, whereas in OBEX, it just means that the folder
- * itself can't be removed. Therefore we must set all folders to RWD and
- * handle the error when it happens. */
- if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY) {
- g_file_info_set_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_READ,
- TRUE);
- g_file_info_set_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
- TRUE);
- }
-
- data->elements = g_list_prepend (data->elements, info);
-}
-
-static void
-fl_parser_end_node_cb (void *user_data, const char *node_name)
-{
- ParserData *data;
-
- data = (ParserData *) user_data;
-
- data->depth--;
-
- if (data->depth < 0) {
- g_set_error (data->error,
- G_MARKUP_ERROR,
- G_MARKUP_ERROR_INVALID_CONTENT,
- "Closing non-open node '%s'",
- node_name);
- return;
- }
-
- d(g_print ("%d: /%s\n", data->depth, node_name));
-}
-
-static XML_Parser
-fl_parser_create_context (ParserData *data)
-{
- XML_Parser parser;
-
- parser = XML_ParserCreate (NULL);
-
- XML_SetElementHandler(parser,
- (XML_StartElementHandler) fl_parser_start_node_cb,
- (XML_EndElementHandler) fl_parser_end_node_cb);
- XML_SetUserData (parser, data);
-
- return parser;
-}
-
-static gboolean
-fl_parser_fill_file_info (GFileInfo *info, const char **attr)
-{
- gint i;
-
- for (i = 0; attr[i]; ++i) {
- const gchar *name;
- const gchar *value;
-
- name = attr[i];
- value = attr[++i];
-
- if (strcmp (name, "name") == 0) {
- char *display_name;
- /* Apparently someone decided it was a good idea
- * to send name="" mem-type="MMC"
- */
- if (!value || strcmp (value, "") == 0) {
- return FALSE;
- }
-
- g_file_info_set_name (info, value);
- display_name = g_filename_display_name (value);
- g_file_info_set_display_name (info, display_name);
- d(g_print ("Name: '%s'\n", display_name));
- g_free (display_name);
- }
- else if (strcmp (name, "size") == 0) {
- g_file_info_set_size (info, strtoll (value, NULL, 10));
- d(g_print ("Size: '%"G_GINT64_FORMAT"'\n", g_file_info_get_size (info)));
- }
- else if (strcmp (name, "modified") == 0) {
- GTimeVal time;
-
- if (g_time_val_from_iso8601 (value, &time) == FALSE)
- continue;
- g_file_info_set_modification_time (info, &time);
- d(g_print ("Modified: '%s' = '%d'\n",
- value, (int)time.tv_sec));
- }
- else if (strcmp (name, "created") == 0) {
- GTimeVal time;
-
- if (g_time_val_from_iso8601 (value, &time) == FALSE)
- continue;
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_TIME_CREATED,
- time.tv_sec);
- g_file_info_set_attribute_uint32 (info,
- G_FILE_ATTRIBUTE_TIME_CREATED_USEC,
- time.tv_usec);
- d(g_print ("Created: '%s' = '%d'\n",
- value, (int)time.tv_sec));
- }
- else if (strcmp (name, "accessed") == 0) {
- GTimeVal time;
-
- if (g_time_val_from_iso8601 (value, &time) == FALSE)
- continue;
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_TIME_ACCESS,
- time.tv_sec);
- g_file_info_set_attribute_uint32 (info,
- G_FILE_ATTRIBUTE_TIME_ACCESS_USEC,
- time.tv_usec);
- d(g_print ("Accessed: '%s' = '%d'\n",
- value, (int)time.tv_sec));
- }
- else if (strcmp (name, "user-perm") == 0) {
- /* The permissions don't map well to unix semantics,
- * since the user is most likely not the same on both
- * sides. We map the user permissions to "other" on the
- * local side. D is treated as write, otherwise files
- * can't be deleted through the module, even if it
- * should be possible.
- */
- if (strstr (value, "R")) {
- g_file_info_set_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_READ,
- TRUE);
- }
- if (strstr (value, "W") || strstr (value, "D")) {
- g_file_info_set_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
- TRUE);
- }
- }
- else if (strcmp (name, "group-perm") == 0) {
- /* Ignore for now */
- d(g_print ("Group permissions: '%s'\n", value));
- }
- else if (strcmp (name, "other-perm") == 0) {
- /* Ignore for now */
- d(g_print ("Other permissions: '%s'\n", value));
- }
- else if (strcmp (name, "owner") == 0) {
- /* Ignore for now */
- d(g_print ("Owner: '%s'\n", value));
- }
- else if (strcmp (name, "group") == 0) {
- /* Ignore for now */
- d(g_print ("Group: '%s'\n", value));
- }
- else if (strcmp (name, "type") == 0) {
- g_file_info_set_content_type (info, value);
- d(g_print ("Mime-Type: '%s'\n", value));
- }
- else if (strcmp (name, "xml:lang") == 0) {
- d(g_print ("Lang: '%s'\n", value));
- }
- else if (strcmp (name, "mem-type") == 0) {
- guint device;
-
- if (value == NULL || value[0] == '\0')
- continue;
-
- device = om_mem_type_id_from_string (value);
- g_file_info_set_attribute_uint32 (info,
- G_FILE_ATTRIBUTE_UNIX_RDEV,
- device);
- d(g_print ("Mem-Type: '%s' (%d)\n",
- value, device));
- }
- else {
- d(g_print ("Unknown Attribute: %s = %s\n",
- name, value));
- }
- }
-
- if (g_file_info_get_name (info) == NULL) { /* Required attribute */
- /* Set error */
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-fl_parser_free_parser_data (ParserData *data, gboolean free_list)
-{
- if (free_list) {
- g_list_foreach (data->elements, (GFunc) g_object_unref, NULL);
- g_list_free (data->elements);
- data->elements = NULL;
- }
-
- g_free (data);
-}
-
-gboolean
-gvfsbackendobexftp_fl_parser_parse (const gchar *buf, gint len, GList **elements,
- GError **error)
-{
- ParserData *data;
- XML_Parser parser;
-
- data = g_new0 (ParserData, 1);
- data->error = error;
- data->elements = NULL;
- data->depth = 0;
-
- parser = fl_parser_create_context (data);
- if (!parser) {
- g_free (data);
- return FALSE;
- }
-
- if (XML_Parse (parser, buf, len, TRUE) == 0) {
- XML_ParserFree (parser);
- fl_parser_free_parser_data (data, TRUE);
-
- if (*error == NULL) {
- g_set_error_literal (error,
- G_MARKUP_ERROR,
- G_MARKUP_ERROR_INVALID_CONTENT,
- "Couldn't parse the incoming data");
- }
- return FALSE;
- }
-
- XML_ParserFree (parser);
-
- *elements = data->elements;
-
- fl_parser_free_parser_data (data, FALSE);
-
- return TRUE;
-}
-
-static GPtrArray *mem_types = NULL;
-static GHashTable *mem_types_ht = NULL;
-
-guint
-om_mem_type_id_from_string (const gchar *memtype)
-{
- guint mem_id;
- gchar *value;
-
- if (memtype == NULL || memtype[0] == '\0')
- return 0;
-
- if (mem_types_ht != NULL) {
- mem_id = GPOINTER_TO_UINT (g_hash_table_lookup
- (mem_types_ht, memtype));
- if (mem_id != 0)
- return mem_id;
- } else {
- mem_types = g_ptr_array_new ();
- /* Insert a dummy entry, so that we don't use 0 as a mem_id */
- g_ptr_array_add (mem_types, NULL);
- mem_types_ht = g_hash_table_new (g_str_hash, g_str_equal);
- }
- value = g_strdup (memtype);
- mem_id = mem_types->len;
- g_ptr_array_add (mem_types, value);
- g_hash_table_insert (mem_types_ht, value, GUINT_TO_POINTER (mem_id));
- return mem_id;
-}
-
-const gchar *
-om_mem_type_id_to_string (guint mem_id)
-{
- if (mem_types == NULL || mem_id >= mem_types->len)
- return NULL;
- else
- return g_ptr_array_index (mem_types, mem_id);
-}
diff --git a/daemon/gvfsbackendobexftp-fl-parser.h b/daemon/gvfsbackendobexftp-fl-parser.h
deleted file mode 100644
index 61303d29..00000000
--- a/daemon/gvfsbackendobexftp-fl-parser.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2004 Nokia Corporation.
- * Copyright (C) 2008 Bastien Nocera <hadess@hadess.net> (gio port)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; version 2 of the
- * License.
- *
- * This program 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GVFSBACKENDOBEXFTP_FL_PARSER_H__
-#define __GVFSBACKENDOBEXFTP_FL_PARSER_H__
-
-#include <glib.h>
-
-gboolean gvfsbackendobexftp_fl_parser_parse (const gchar *buf,
- gint len,
- GList **elements,
- GError **error);
-void gvfsbackendobexftp_fl_parser_free_element_list (GSList *elements);
-
-
-
-guint om_mem_type_id_from_string (const gchar *memtype);
-const gchar *om_mem_type_id_to_string (guint mem_id);
-
-#endif /* __GVFSBACKENDOBEXFTP_FL_PARSER_H__ */
diff --git a/daemon/gvfsbackendobexftp.c b/daemon/gvfsbackendobexftp.c
deleted file mode 100644
index 23bea15f..00000000
--- a/daemon/gvfsbackendobexftp.c
+++ /dev/null
@@ -1,1489 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Bastien Nocera <hadess@hadess.net>
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-#include <dbus/dbus-glib.h>
-#include <bluetooth/bluetooth.h>
-
-#include "gvfsbackendobexftp.h"
-#include "gvfsbackendobexftp-fl-parser.h"
-#include "gvfsbackendobexftp-cap-parser.h"
-#include "obexftp-marshal.h"
-
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobmount.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobclosewrite.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobqueryfsinfo.h"
-#include "gvfsjobqueryattributes.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsdaemonprotocol.h"
-
-#define BDADDR_LEN 17
-
-#define ASYNC_SUCCESS 1
-#define ASYNC_PENDING 0
-#define ASYNC_ERROR -1
-
-#define CACHE_LIFESPAN 3
-
-struct _GVfsBackendObexftp
-{
- GVfsBackend parent_instance;
-
- char *display_name;
- char *bdaddr;
- guint type;
-
- DBusGConnection *connection;
- DBusGProxy *manager_proxy;
- DBusGProxy *session_proxy;
-
- /* Use for the async notifications and errors */
- GCond *cond;
- GMutex *mutex;
- int status;
- gboolean doing_io;
- GError *error;
-
- /* Folders listing cache */
- char *files_listing;
- char *directory;
- time_t time_captured;
-};
-
-typedef struct {
- char *source;
- goffset size;
- int fd;
-} ObexFTPOpenHandle;
-
-G_DEFINE_TYPE (GVfsBackendObexftp, g_vfs_backend_obexftp, G_VFS_TYPE_BACKEND);
-
-/* This should all live in bluez-gnome, and we
- * should depend on it */
-enum {
- BLUETOOTH_TYPE_ANY = 1,
- BLUETOOTH_TYPE_PHONE = 1 << 1,
- BLUETOOTH_TYPE_MODEM = 1 << 2,
- BLUETOOTH_TYPE_COMPUTER = 1 << 3,
- BLUETOOTH_TYPE_NETWORK = 1 << 4,
- BLUETOOTH_TYPE_HEADSET = 1 << 5,
- BLUETOOTH_TYPE_KEYBOARD = 1 << 6,
- BLUETOOTH_TYPE_MOUSE = 1 << 7,
- BLUETOOTH_TYPE_CAMERA = 1 << 8,
- BLUETOOTH_TYPE_PRINTER = 1 << 9
-};
-
-static const char *
-_get_icon_from_type (guint type)
-{
- switch (type)
- {
- case BLUETOOTH_TYPE_PHONE:
- return "phone";
- break;
- case BLUETOOTH_TYPE_MODEM:
- return "modem";
- break;
- case BLUETOOTH_TYPE_COMPUTER:
- return "network-server";
- break;
- case BLUETOOTH_TYPE_NETWORK:
- return "network-wireless";
- break;
- case BLUETOOTH_TYPE_HEADSET:
- return "stock_headphones";
- break;
- case BLUETOOTH_TYPE_KEYBOARD:
- return "input-keyboard";
- break;
- case BLUETOOTH_TYPE_MOUSE:
- return "input-mouse";
- break;
- case BLUETOOTH_TYPE_CAMERA:
- return "camera-photo";
- break;
- case BLUETOOTH_TYPE_PRINTER:
- return "printer";
- break;
- default:
- return "bluetooth";
- break;
- }
-}
-
-static int
-_get_type_from_class (guint class)
-{
- switch ((class & 0x1f00) >> 8)
- {
- case 0x01:
- return BLUETOOTH_TYPE_COMPUTER;
- case 0x02:
- switch ((class & 0xfc) >> 2)
- {
- case 0x01:
- case 0x02:
- case 0x03:
- case 0x05:
- return BLUETOOTH_TYPE_PHONE;
- case 0x04:
- return BLUETOOTH_TYPE_MODEM;
- }
- break;
- case 0x03:
- return BLUETOOTH_TYPE_NETWORK;
- case 0x04:
- switch ((class & 0xfc) >> 2)
- {
- case 0x01:
- return BLUETOOTH_TYPE_HEADSET;
- }
- break;
- case 0x05:
- switch ((class & 0xc0) >> 6)
- {
- case 0x01:
- return BLUETOOTH_TYPE_KEYBOARD;
- case 0x02:
- return BLUETOOTH_TYPE_MOUSE;
- }
- break;
- case 0x06:
- if (class & 0x80)
- return BLUETOOTH_TYPE_PRINTER;
- if (class & 0x20)
- return BLUETOOTH_TYPE_CAMERA;
- break;
- }
-
- return BLUETOOTH_TYPE_ANY;
-}
-
-/* Used to detect broken listings from
- * old Nokia 3650s */
-static gboolean
-_is_nokia_3650 (const char *bdaddr)
-{
- /* Don't ask, Nokia seem to use a Bluetooth
- * HCI from Murata */
- return g_str_has_prefix(bdaddr, "00:60:57");
-}
-
-static gchar *
-_get_device_properties (const char *bdaddr, guint32 *type)
-{
- DBusGConnection *connection;
- DBusGProxy *manager;
- gchar *name, **adapters;
- guint i;
-
- name = NULL;
-
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
- if (connection == NULL)
- return NULL;
-
- manager = dbus_g_proxy_new_for_name (connection, "org.bluez",
- "/org/bluez", "org.bluez.Manager");
- if (manager == NULL)
- {
- dbus_g_connection_unref (connection);
- return NULL;
- }
-
- if (dbus_g_proxy_call (manager, "ListAdapters", NULL, G_TYPE_INVALID, G_TYPE_STRV, &adapters, G_TYPE_INVALID) == FALSE)
- {
- g_object_unref (manager);
- dbus_g_connection_unref (connection);
- return NULL;
- }
-
- for (i = 0; adapters[i] != NULL; i++)
- {
- DBusGProxy *adapter;
-
- adapter = dbus_g_proxy_new_for_name (connection, "org.bluez",
- adapters[i], "org.bluez.Adapter");
- if (dbus_g_proxy_call (adapter, "GetRemoteName", NULL,
- G_TYPE_STRING, bdaddr, G_TYPE_INVALID,
- G_TYPE_STRING, &name, G_TYPE_INVALID) != FALSE)
- {
- if (name != NULL && name[0] != '\0')
- {
- guint32 class;
-
- if (dbus_g_proxy_call(adapter, "GetRemoteClass", NULL,
- G_TYPE_STRING, bdaddr, G_TYPE_INVALID,
- G_TYPE_UINT, &class, G_TYPE_INVALID) != FALSE)
- {
- *type = _get_type_from_class (class);
- }
- else
- {
- *type = BLUETOOTH_TYPE_ANY;
- }
- g_object_unref (adapter);
- break;
- }
- }
- g_object_unref (adapter);
- }
-
- g_object_unref (manager);
- dbus_g_connection_unref (connection);
-
- return name;
-}
-
-static void
-g_vfs_backend_obexftp_finalize (GObject *object)
-{
- GVfsBackendObexftp *backend;
-
- backend = G_VFS_BACKEND_OBEXFTP (object);
-
- g_free (backend->display_name);
- g_free (backend->bdaddr);
- g_free (backend->files_listing);
- g_free (backend->directory);
-
- if (backend->session_proxy != NULL)
- g_object_unref (backend->session_proxy);
- g_mutex_free (backend->mutex);
- g_cond_free (backend->cond);
-
- if (G_OBJECT_CLASS (g_vfs_backend_obexftp_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_obexftp_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_obexftp_init (GVfsBackendObexftp *backend)
-{
- GError *err = NULL;
-
- backend->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &err);
- if (backend->connection == NULL) {
- g_printerr ("Connecting to session bus failed: %s\n", err->message);
- g_error_free (err);
- return;
- }
-
- backend->mutex = g_mutex_new ();
- backend->cond = g_cond_new ();
- backend->manager_proxy = dbus_g_proxy_new_for_name (backend->connection,
- "org.openobex",
- "/org/openobex",
- "org.openobex.Manager");
-}
-
-static gboolean
-_change_directory (GVfsBackendObexftp *op_backend,
- const char *filename,
- GError **error)
-{
- char *current_path, **req_components;
- guint i;
-
- if (dbus_g_proxy_call (op_backend->session_proxy, "GetCurrentPath", error,
- G_TYPE_INVALID,
- G_TYPE_STRING, &current_path, G_TYPE_INVALID) == FALSE)
- {
- g_message ("GetCurrentPath failed");
- return FALSE;
- }
-
- if (strcmp (filename, current_path) == 0)
- {
- g_free (current_path);
- return TRUE;
- }
-
- /* Are we already at the root? */
- if (strcmp (current_path, "/") != 0)
- {
- if (dbus_g_proxy_call (op_backend->session_proxy, "ChangeCurrentFolderToRoot", error,
- G_TYPE_INVALID,
- G_TYPE_INVALID) == FALSE)
- {
- g_message ("ChangeCurrentFolderToRoot failed");
- //FIXME change the retval from org.openobex.Error.NotAuthorized to
- //no such file or directory
- return FALSE;
- }
- }
- g_free (current_path);
-
- /* If we asked for the root, we're done */
- if (strcmp (filename, "/") == 0)
- return TRUE;
-
- req_components = g_strsplit (filename, "/", -1);
- for (i = 0; req_components[i] != NULL; i++)
- {
- if (*req_components[i] == '\0')
- continue;
- if (dbus_g_proxy_call (op_backend->session_proxy, "ChangeCurrentFolder", error,
- G_TYPE_STRING, req_components[i], G_TYPE_INVALID,
- G_TYPE_INVALID) == FALSE)
- {
- g_message ("ChangeCurrentFolder failed");
- g_strfreev (req_components);
- return FALSE;
- }
- }
-
- g_strfreev (req_components);
-
- return TRUE;
-}
-
-static gboolean
-_retrieve_folder_listing (GVfsBackend *backend,
- const char *filename,
- char **files,
- GError **error)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (backend);
- time_t current;
-
- current = time (NULL);
-
- if (op_backend->directory != NULL &&
- strcmp (op_backend->directory, filename) == 0 &&
- op_backend->time_captured > current - CACHE_LIFESPAN)
- {
- *files = g_strdup (op_backend->files_listing);
- return TRUE;
- }
- else
- {
- g_free (op_backend->directory);
- op_backend->directory = NULL;
- g_free (op_backend->files_listing);
- op_backend->files_listing = NULL;
- }
-
- if (dbus_g_proxy_call (op_backend->session_proxy, "RetrieveFolderListing", error,
- G_TYPE_INVALID,
- G_TYPE_STRING, files, G_TYPE_INVALID) == FALSE)
- {
- return FALSE;
- }
-
- op_backend->directory = g_strdup (filename);
- op_backend->files_listing = g_strdup (*files);
- op_backend->time_captured = time (NULL);
-
- return TRUE;
-}
-
-static gboolean
-_query_file_info_helper (GVfsBackend *backend,
- const char *filename,
- GFileInfo *info,
- GError **error)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (backend);
- char *parent, *basename, *files;
- GList *elements, *l;
- gboolean found;
-
- g_print ("+ _query_file_info_helper, filename: %s\n", filename);
-
- if (strcmp (filename, "/") == 0)
- {
- char *display;
-
- /* That happens when you want '/'
- * and we don't have any info about it :( */
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
- g_file_info_set_content_type (info, "inode/directory");
- g_file_info_set_name (info, "/");
- g_vfs_backend_set_icon_name (backend,
- _get_icon_from_type (op_backend->type));
- display = g_strdup_printf (_("%s on %s"), "/", op_backend->display_name);
- g_file_info_set_display_name (info, display);
- g_free (display);
- return TRUE;
- }
-
- parent = g_path_get_dirname (filename);
- if (_change_directory (op_backend, parent, error) == FALSE)
- {
- g_free (parent);
- return FALSE;
- }
-
- files = NULL;
- if (_retrieve_folder_listing (backend, parent, &files, error) == FALSE)
- {
- g_free (parent);
- return FALSE;
- }
-
- g_free (parent);
-
- if (gvfsbackendobexftp_fl_parser_parse (files, strlen (files), &elements, error) == FALSE)
- {
- g_free (files);
- return FALSE;
- }
- g_free (files);
-
- basename = g_path_get_basename (filename);
- found = FALSE;
-
- for (l = elements; l != NULL; l = l->next)
- {
- if (strcmp (basename, g_file_info_get_name (l->data)) == 0)
- {
- g_file_info_copy_into (l->data, info);
- found = TRUE;
- break;
- }
- }
-
- if (found == FALSE)
- {
- g_set_error_literal (error, G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- g_strerror (ENOENT));
- }
-
- g_free (basename);
- g_list_foreach (elements, (GFunc)g_object_unref, NULL);
- g_list_free (elements);
-
- g_print ("- _query_file_info_helper\n");
-
- return found;
-}
-
-static void
-error_occurred_cb (DBusGProxy *proxy, const gchar *error_name, const gchar *error_message, gpointer user_data)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (user_data);
-
- g_message("ErrorOccurred");
- g_message("Error name: %s", error_name);
- g_message("Error message: %s", error_message);
-
- if (strcmp (error_name, "org.openobex.Error.LinkError") == 0)
- {
- g_message ("link lost to remote device");
- _exit (1);
- }
-
- /* Something is waiting on us */
- g_mutex_lock (op_backend->mutex);
- if (op_backend->doing_io)
- {
- op_backend->status = ASYNC_ERROR;
- op_backend->error = g_error_new_literal (DBUS_GERROR,
- DBUS_GERROR_REMOTE_EXCEPTION,
- error_message);
- g_cond_signal (op_backend->cond);
- g_mutex_unlock (op_backend->mutex);
- return;
- }
- g_mutex_unlock (op_backend->mutex);
-
- g_message ("Unhandled error, file a bug");
- _exit (1);
-}
-
-static void
-cancelled_cb (DBusGProxy *proxy, gpointer user_data)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (user_data);
-
- g_message ("transfer got cancelled");
-
- g_mutex_lock (op_backend->mutex);
- op_backend->status = ASYNC_ERROR;
- g_cond_signal (op_backend->cond);
- g_mutex_unlock (op_backend->mutex);
-}
-
-static void
-disconnected_cb (DBusGProxy *proxy, gpointer user_data)
-{
- g_message ("disconnected_cb");
-
- _exit (1);
-}
-
-static void
-closed_cb (DBusGProxy *proxy, gpointer user_data)
-{
- g_message ("closed_cb");
-
- _exit (1);
-}
-
-static int
-is_connected (DBusGProxy *session_proxy, GVfsJob *job)
-{
- GError *error = NULL;
- gboolean connected;
-
- if (dbus_g_proxy_call (session_proxy, "IsConnected", &error,
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN, &connected, G_TYPE_INVALID) == FALSE)
- {
- g_vfs_job_failed_from_error (job, error);
- g_error_free (error);
- return -1;
- }
-
- return connected;
-}
-
-static void
-do_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (backend);
- const char *device;
- GError *error = NULL;
- const gchar *path = NULL;
- char *server;
- GMountSpec *obexftp_mount_spec;
- gboolean connected;
-
- g_print ("+ do_mount\n");
-
- device = g_mount_spec_get (mount_spec, "host");
-
- if (device == NULL || strlen (device) != BDADDR_LEN + 2)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("Invalid mount spec"));
- return;
- }
-
- /* Strip the brackets */
- op_backend->bdaddr = g_strndup (device + 1, 17);
- if (bachk (op_backend->bdaddr) < 0)
- {
- g_free (op_backend->bdaddr);
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("Invalid mount spec"));
- return;
- }
-
- /* FIXME, Have a way for the mount to be cancelled, see:
- * http://bugs.muiline.com/view.php?id=51 */
-
- if (dbus_g_proxy_call (op_backend->manager_proxy, "CreateBluetoothSession", &error,
- G_TYPE_STRING, op_backend->bdaddr, G_TYPE_STRING, "ftp", G_TYPE_INVALID,
- DBUS_TYPE_G_OBJECT_PATH, &path, G_TYPE_INVALID) == FALSE)
- {
- g_free (op_backend->bdaddr);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- g_vfs_job_set_backend_data (G_VFS_JOB (job), backend, NULL);
- g_print (" do_mount: %s mounted\n", op_backend->bdaddr);
-
- op_backend->session_proxy = dbus_g_proxy_new_for_name (op_backend->connection,
- "org.openobex",
- path,
- "org.openobex.Session");
-
- op_backend->display_name = _get_device_properties (op_backend->bdaddr, &op_backend->type);
- if (!op_backend->display_name)
- op_backend->display_name = g_strdup (op_backend->bdaddr);
-
- g_vfs_backend_set_display_name (G_VFS_BACKEND (op_backend),
- op_backend->display_name);
- g_vfs_backend_set_icon_name (G_VFS_BACKEND (op_backend),
- _get_icon_from_type (op_backend->type));
-
- obexftp_mount_spec = g_mount_spec_new ("obex");
- server = g_strdup_printf ("[%s]", op_backend->bdaddr);
- g_mount_spec_set (obexftp_mount_spec, "host", server);
- g_free (server);
- g_vfs_backend_set_mount_spec (G_VFS_BACKEND (op_backend), obexftp_mount_spec);
- g_mount_spec_unref (obexftp_mount_spec);
-
- dbus_g_proxy_add_signal(op_backend->session_proxy, "ErrorOccurred",
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(op_backend->session_proxy, "ErrorOccurred",
- G_CALLBACK(error_occurred_cb), op_backend, NULL);
-
- dbus_g_proxy_add_signal(op_backend->session_proxy, "Cancelled",
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(op_backend->session_proxy, "Cancelled",
- G_CALLBACK(cancelled_cb), op_backend, NULL);
-
- dbus_g_proxy_add_signal(op_backend->session_proxy, "Disconnected",
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(op_backend->session_proxy, "Disconnected",
- G_CALLBACK(disconnected_cb), op_backend, NULL);
-
- dbus_g_proxy_add_signal(op_backend->session_proxy, "Closed",
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(op_backend->session_proxy, "Closed",
- G_CALLBACK(closed_cb), op_backend, NULL);
-
- dbus_g_proxy_add_signal(op_backend->session_proxy, "TransferStarted",
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_INVALID);
-
- /* Now wait until the device is connected */
- connected = is_connected (op_backend->session_proxy, G_VFS_JOB (job));
- while (connected == FALSE)
- {
- g_usleep (G_USEC_PER_SEC / 100);
- connected = is_connected (op_backend->session_proxy, G_VFS_JOB (job));
- }
-
- if (connected < 0)
- {
- g_message ("mount failed, didn't connect");
-
- g_free (op_backend->display_name);
- op_backend->display_name = NULL;
- g_free (op_backend->bdaddr);
- op_backend->bdaddr = NULL;
- g_object_unref (op_backend->session_proxy);
- op_backend->session_proxy = NULL;
-
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_BUSY,
- _("Connection to the device lost"));
- return;
- }
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- g_print ("- do_mount\n");
-}
-
-static void
-transfer_started_cb (DBusGProxy *proxy, const gchar *filename,
- const gchar *local_path, guint64 byte_count, gpointer user_data)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (user_data);
-
- g_message ("transfer of %s to %s started", filename, local_path);
-
- g_mutex_lock (op_backend->mutex);
- op_backend->status = ASYNC_SUCCESS;
- g_cond_signal (op_backend->cond);
- g_mutex_unlock (op_backend->mutex);
-}
-
-static void
-do_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (backend);
- GError *error = NULL;
- ObexFTPOpenHandle *handle;
- char *target, *basename;
- GFileInfo *info;
- goffset size;
- int fd, success;
-
- g_print ("+ do_open_for_read, filename: %s\n", filename);
-
- g_mutex_lock (op_backend->mutex);
- op_backend->doing_io = TRUE;
-
- /* Change into the directory and cache the file size */
- info = g_file_info_new ();
- if (_query_file_info_helper (backend, filename, info, &error) == FALSE)
- {
- op_backend->doing_io = FALSE;
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- g_object_unref (info);
- return;
- }
- /* If we're trying to open a directory for reading, exit out */
- if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
- {
- op_backend->doing_io = FALSE;
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_IS_DIRECTORY,
- _("Can't open directory"));
- g_object_unref (info);
- return;
- }
-
- size = g_file_info_get_size (info);
- g_object_unref (info);
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- op_backend->doing_io = FALSE;
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return;
- }
-
- fd = g_file_open_tmp ("gvfsobexftp-tmp-XXXXXX",
- &target, &error);
- if (fd < 0)
- {
- op_backend->doing_io = FALSE;
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- op_backend->doing_io = FALSE;
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return;
- }
-
- op_backend->status = ASYNC_PENDING;
-
- dbus_g_proxy_connect_signal(op_backend->session_proxy, "TransferStarted",
- G_CALLBACK(transfer_started_cb), op_backend, NULL);
-
- basename = g_path_get_basename (filename);
- if (dbus_g_proxy_call (op_backend->session_proxy, "CopyRemoteFile", &error,
- G_TYPE_STRING, basename,
- G_TYPE_STRING, target,
- G_TYPE_INVALID,
- G_TYPE_INVALID) == FALSE)
- {
- g_message ("CopyRemoteFile failed");
-
- g_free (basename);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
-
- dbus_g_proxy_disconnect_signal(op_backend->session_proxy, "TransferStarted",
- G_CALLBACK(transfer_started_cb), op_backend);
-
- /* Close the target */
- g_unlink (target);
- g_free (target);
- close (fd);
-
- op_backend->doing_io = FALSE;
- g_mutex_unlock (op_backend->mutex);
- return;
- }
-
- /* Wait for TransferStarted or ErrorOccurred to have happened */
- while (op_backend->status == ASYNC_PENDING)
- g_cond_wait (op_backend->cond, op_backend->mutex);
- success = op_backend->status;
- dbus_g_proxy_disconnect_signal(op_backend->session_proxy, "TransferStarted",
- G_CALLBACK(transfer_started_cb), op_backend);
-
- /* We either got success or an async error */
- g_assert (success != ASYNC_PENDING);
-
- g_message ("filename: %s (%s) copying to %s (retval %d)", filename, basename, target, success);
- g_free (basename);
-
- g_unlink (target);
- g_free (target);
- op_backend->status = ASYNC_PENDING;
-
- if (success == ASYNC_ERROR)
- {
- op_backend->doing_io = FALSE;
- g_mutex_unlock (op_backend->mutex);
- close (fd);
- g_vfs_job_failed_from_error (G_VFS_JOB (job),
- op_backend->error);
- g_error_free (op_backend->error);
- op_backend->error = NULL;
- return;
- }
-
- handle = g_new0 (ObexFTPOpenHandle, 1);
- handle->source = g_strdup (filename);
- handle->fd = fd;
- handle->size = size;
- g_vfs_job_open_for_read_set_handle (job, handle);
-
- g_print ("- do_open_for_read, filename: %s\n", filename);
-
- g_vfs_job_open_for_read_set_can_seek (G_VFS_JOB_OPEN_FOR_READ (job), FALSE);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- op_backend->doing_io = FALSE;
- g_mutex_unlock (op_backend->mutex);
-}
-
-static int
-is_busy (DBusGProxy *session_proxy, GVfsJob *job)
-{
- GError *error = NULL;
- gboolean busy;
-
- if (dbus_g_proxy_call (session_proxy, "IsBusy", &error,
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN, &busy, G_TYPE_INVALID) == FALSE)
- {
- g_vfs_job_failed_from_error (job, error);
- g_error_free (error);
- return -1;
- }
-
- return busy;
-}
-
-static void
-do_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize bytes_requested)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (backend);
- ObexFTPOpenHandle *backend_handle = (ObexFTPOpenHandle *) handle;
- ssize_t bytes_read = 0;
- gboolean busy = TRUE;
-
- while (bytes_read == 0 && busy != FALSE)
- {
- bytes_read = read (backend_handle->fd, buffer, bytes_requested);
- if (bytes_read != 0)
- break;
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return;
- }
-
- busy = is_busy (op_backend->session_proxy, G_VFS_JOB (job));
- if (busy < 0)
- return;
-
- g_usleep (G_USEC_PER_SEC / 100);
- }
-
- if (bytes_read < 0)
- {
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errno);
- }
- else if (bytes_read == 0)
- {
- g_vfs_job_read_set_size (job, 0);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- g_vfs_job_read_set_size (job, bytes_read);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-}
-
-static void
-do_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle handle)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (backend);
- ObexFTPOpenHandle *backend_handle = (ObexFTPOpenHandle *) handle;
- int busy;
-
- g_print ("+ do_close_read\n");
-
- busy = is_busy (op_backend->session_proxy, G_VFS_JOB (job));
- if (busy < 0) {
- g_message ("busy error");
- return;
- }
-
- g_mutex_lock (op_backend->mutex);
-
- if (busy > 0)
- {
- op_backend->status = ASYNC_PENDING;
-
- if (dbus_g_proxy_call (op_backend->session_proxy, "Cancel", NULL,
- G_TYPE_INVALID, G_TYPE_INVALID) != FALSE)
- {
- while (op_backend->status == ASYNC_PENDING)
- g_cond_wait (op_backend->cond, op_backend->mutex);
- }
- }
-
- g_mutex_unlock (op_backend->mutex);
-
- close (backend_handle->fd);
- g_free (backend_handle->source);
- g_free (backend_handle);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- g_print ("- do_close_read\n");
-}
-
-static void
-do_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (backend);
- GError *error = NULL;
-
- g_print ("+ do_query_info, filename: %s\n", filename);
-
- g_mutex_lock (op_backend->mutex);
-
- if (_query_file_info_helper (backend, filename, info, &error) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- g_mutex_unlock (op_backend->mutex);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- g_print ("- do_query_info\n");
-
- return;
-}
-
-static void
-do_query_fs_info (GVfsBackend *backend,
- GVfsJobQueryFsInfo *job,
- const char *filename,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (backend);
- OvuCaps *caps;
- OvuCapsMemory *memory;
- GError *error = NULL;
- char *caps_str;
- const char *mem_type;
- GList *l;
- gboolean has_free_memory;
-
- g_print ("+ do_query_fs_info, filename: %s\n", filename);
-
- g_mutex_lock (op_backend->mutex);
-
- /* Get the capabilities */
- if (dbus_g_proxy_call (op_backend->session_proxy, "GetCapability", &error,
- G_TYPE_INVALID,
- G_TYPE_STRING, &caps_str, G_TYPE_INVALID) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- g_free (caps_str);
- return;
- }
-
- /* No caps from the server? */
- if (caps_str == NULL)
- {
- /* Best effort, don't error out */
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- return;
- }
-
- caps = ovu_caps_parser_parse (caps_str, strlen (caps_str), &error);
- g_free (caps_str);
- if (caps == NULL)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- /* Check whether we have no free space available */
- has_free_memory = FALSE;
- for (l = ovu_caps_get_memory_entries (caps); l != NULL; l = l->next)
- {
- if (ovu_caps_memory_has_free (l->data) != FALSE)
- {
- has_free_memory = TRUE;
- break;
- }
- }
- if (has_free_memory == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- /* Best effort, don't error out */
- g_vfs_job_succeeded (G_VFS_JOB (job));
- return;
- }
-
- /* Check whether we have only one memory type */
- l = ovu_caps_get_memory_entries (caps);
- if (g_list_length (l) == 1)
- {
- memory = l->data;
- goto set_info_from_memory;
- }
-
- if (_query_file_info_helper (backend, filename, info, &error) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- ovu_caps_free (caps);
- return;
- }
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- ovu_caps_free (caps);
- return;
- }
-
- mem_type = NULL;
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_UNIX_RDEV) != FALSE)
- {
- guint rdev;
- rdev = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_RDEV);
- mem_type = om_mem_type_id_to_string (rdev);
- }
- memory = ovu_caps_get_memory_type (caps, mem_type);
-
-set_info_from_memory:
- if (memory != NULL && ovu_caps_memory_has_free (memory) != FALSE)
- {
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_FILESYSTEM_FREE,
- ovu_caps_memory_get_free (memory));
- if (ovu_caps_memory_has_used (memory) != FALSE)
- {
- g_file_info_set_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_FILESYSTEM_SIZE,
- ovu_caps_memory_get_free (memory)
- + ovu_caps_memory_get_used (memory));
- }
- }
- ovu_caps_free (caps);
-
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE, "obexftp");
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- g_mutex_unlock (op_backend->mutex);
-
- g_print ("- do_query_fs_info\n");
-}
-
-static void
-do_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *matcher,
- GFileQueryInfoFlags flags)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (backend);
- GError *error = NULL;
- char *files;
- GList *elements = NULL;
-
- g_print ("+ do_enumerate, filename: %s\n", filename);
-
- g_mutex_lock (op_backend->mutex);
-
- if (_change_directory (op_backend, filename, &error) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- files = NULL;
- if (_retrieve_folder_listing (backend, filename, &files, &error) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- if (gvfsbackendobexftp_fl_parser_parse (files, strlen (files), &elements, &error) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- /* See http://web.archive.org/web/20070826221251/http://docs.kde.org/development/en/extragear-pim/kdebluetooth/components.kio_obex.html#devices
- * for the reasoning */
- if (strstr (files, "SYSTEM\"obex-folder-listing.dtd") != NULL && _is_nokia_3650 (op_backend->bdaddr))
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Device requires a software update"));
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- }
- g_message ("gvfsbackendobexftp_fl_parser_parse failed");
- g_free (files);
- g_error_free (error);
- return;
- }
- g_free (files);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- g_vfs_job_enumerate_add_infos (job, elements);
-
- g_list_foreach (elements, (GFunc)g_object_unref, NULL);
- g_list_free (elements);
- g_vfs_job_enumerate_done (job);
-
- g_mutex_unlock (op_backend->mutex);
-
- g_print ("- do_enumerate\n");
-}
-
-static void
-do_delete (GVfsBackend *backend,
- GVfsJobDelete *job,
- const char *filename)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (backend);
- char *basename, *parent;
- GError *error = NULL;
- GFileInfo *info;
-
- g_print ("+ do_delete, filename: %s\n", filename);
-
- g_mutex_lock (op_backend->mutex);
-
- /* Check whether we have a directory */
- info = g_file_info_new ();
- if (_query_file_info_helper (backend, filename, info, &error) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- g_object_unref (info);
- return;
- }
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- g_object_unref (info);
- return;
- }
-
- /* Get the listing of the directory, and abort if it's not empty */
- if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
- {
- GList *elements;
- char *files;
- guint len;
-
- g_object_unref (info);
-
- if (_change_directory (op_backend, filename, &error) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return;
- }
-
- files = NULL;
- if (_retrieve_folder_listing (backend, filename, &files, &error) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- if (gvfsbackendobexftp_fl_parser_parse (files, strlen (files), &elements, &error) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_message ("gvfsbackendobexftp_fl_parser_parse failed");
- g_free (files);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
- g_free (files);
-
- len = g_list_length (elements);
- g_list_foreach (elements, (GFunc)g_object_unref, NULL);
- g_list_free (elements);
-
- if (len != 0)
- {
- g_mutex_unlock (op_backend->mutex);
- g_set_error_literal (&error, G_IO_ERROR,
- G_IO_ERROR_NOT_EMPTY,
- g_strerror (ENOTEMPTY));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
- }
- else
- {
- g_object_unref (info);
- }
-
- basename = g_path_get_basename (filename);
- if (strcmp (basename, G_DIR_SEPARATOR_S) == 0
- || strcmp (basename, ".") == 0)
- {
- g_mutex_unlock (op_backend->mutex);
- g_free (basename);
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), EPERM);
- return;
- }
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- g_free (basename);
- return;
- }
-
- parent = g_path_get_dirname (filename);
- if (_change_directory (op_backend, parent, &error) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_free (basename);
- g_free (parent);
- g_error_free (error);
- return;
- }
- g_free (parent);
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- g_free (basename);
- return;
- }
-
- if (dbus_g_proxy_call (op_backend->session_proxy, "DeleteRemoteFile", &error,
- G_TYPE_STRING, basename, G_TYPE_INVALID,
- G_TYPE_INVALID) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
- g_free (basename);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- g_mutex_unlock (op_backend->mutex);
-
- g_print ("- do_delete\n");
-}
-
-static void
-do_make_directory (GVfsBackend *backend,
- GVfsJobMakeDirectory *job,
- const char *filename)
-{
- GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (backend);
- char *basename, *parent;
- GError *error = NULL;
- GFileInfo *info;
-
- g_print ("+ do_make_directory, filename: %s\n", filename);
-
- g_mutex_lock (op_backend->mutex);
-
- /* Check if the folder already exists */
- info = g_file_info_new ();
- if (_query_file_info_helper (backend, filename, info, &error) != FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_object_unref (info);
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), EEXIST);
- return;
- }
- g_object_unref (info);
- if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return;
- }
-
- parent = g_path_get_dirname (filename);
- if (_change_directory (op_backend, parent, &error) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
- g_free (parent);
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return;
- }
-
- basename = g_path_get_basename (filename);
- if (dbus_g_proxy_call (op_backend->session_proxy, "CreateFolder", &error,
- G_TYPE_STRING, basename, G_TYPE_INVALID,
- G_TYPE_INVALID) == FALSE)
- {
- g_mutex_unlock (op_backend->mutex);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
- g_free (basename);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- g_mutex_unlock (op_backend->mutex);
-
- g_print ("+ do_make_directory\n");
-}
-
-static void
-g_vfs_backend_obexftp_class_init (GVfsBackendObexftpClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_obexftp_finalize;
-
- backend_class->mount = do_mount;
- backend_class->open_for_read = do_open_for_read;
- backend_class->read = do_read;
- backend_class->close_read = do_close_read;
- backend_class->query_info = do_query_info;
- backend_class->query_fs_info = do_query_fs_info;
- backend_class->enumerate = do_enumerate;
- backend_class->delete = do_delete;
- backend_class->make_directory = do_make_directory;
-
- /* ErrorOccurred */
- dbus_g_object_register_marshaller (obexftp_marshal_VOID__STRING_STRING,
- G_TYPE_NONE, G_TYPE_STRING,
- G_TYPE_STRING, G_TYPE_INVALID);
- /* TransferStarted */
- dbus_g_object_register_marshaller(obexftp_marshal_VOID__STRING_STRING_UINT64,
- G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_INVALID);
-}
-
-/*
- * vim: sw=2 ts=8 cindent expandtab cinoptions=f0,>4,n2,{2,(0,^-2,t0 ai
- */
diff --git a/daemon/gvfsbackendobexftp.h b/daemon/gvfsbackendobexftp.h
deleted file mode 100644
index 434749bb..00000000
--- a/daemon/gvfsbackendobexftp.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_OBEXFTP_H__
-#define __G_VFS_BACKEND_OBEXFTP_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_OBEXFTP (g_vfs_backend_obexftp_get_type ())
-#define G_VFS_BACKEND_OBEXFTP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_OBEXFTP, GVfsBackendObexftp))
-#define G_VFS_BACKEND_OBEXFTP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_OBEXFTP, GVfsBackendObexftpClass))
-#define G_VFS_IS_BACKEND_OBEXFTP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_OBEXFTP))
-#define G_VFS_IS_BACKEND_OBEXFTP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_OBEXFTP))
-#define G_VFS_BACKEND_OBEXFTP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_OBEXFTP, GVfsBackendObexftpClass))
-
-typedef struct _GVfsBackendObexftp GVfsBackendObexftp;
-typedef struct _GVfsBackendObexftpClass GVfsBackendObexftpClass;
-
-struct _GVfsBackendObexftpClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_obexftp_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_OBEXFTP_H__ */
diff --git a/daemon/gvfsbackendsftp.c b/daemon/gvfsbackendsftp.c
deleted file mode 100644
index 3527ebe7..00000000
--- a/daemon/gvfsbackendsftp.c
+++ /dev/null
@@ -1,3913 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-#include <gio/gunixinputstream.h>
-#include <gio/gunixoutputstream.h>
-
-#include "gvfsbackendsftp.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobclosewrite.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobmove.h"
-#include "gvfsjobdelete.h"
-#include "gvfsjobqueryfsinfo.h"
-#include "gvfsjobqueryattributes.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsdaemonprotocol.h"
-#include "gvfskeyring.h"
-#include "sftp.h"
-#include "pty_open.h"
-
-/* TODO for sftp:
- * Implement can_delete & can_rename
- * fstat
- */
-
-#ifdef HAVE_GRANTPT
-/* We only use this on systems with unix98 ptys */
-#define USE_PTY 1
-#endif
-
-static GQuark id_q;
-
-typedef enum {
- SFTP_VENDOR_INVALID = 0,
- SFTP_VENDOR_OPENSSH,
- SFTP_VENDOR_SSH
-} SFTPClientVendor;
-
-typedef struct _MultiReply MultiReply;
-
-typedef void (*ReplyCallback) (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data);
-
-typedef void (*MultiReplyCallback) (GVfsBackendSftp *backend,
- MultiReply *replies,
- int n_replies,
- GVfsJob *job,
- gpointer user_data);
-
-
-typedef struct {
- MultiReply *replies;
- int n_replies;
- int n_outstanding;
- gpointer user_data;
- MultiReplyCallback callback;
-} MultiRequest;
-
-struct _MultiReply {
- int type;
- GDataInputStream *data;
- guint32 data_len;
-
- MultiRequest *request;
-};
-
-
-
-typedef struct {
- guchar *data;
- gsize size;
-} DataBuffer;
-
-typedef struct {
- DataBuffer *raw_handle;
- goffset offset;
- char *filename;
- char *tempname;
- guint32 permissions;
- gboolean make_backup;
-} SftpHandle;
-
-
-typedef struct {
- ReplyCallback callback;
- GVfsJob *job;
- gpointer user_data;
-} ExpectedReply;
-
-struct _GVfsBackendSftp
-{
- GVfsBackend parent_instance;
-
- SFTPClientVendor client_vendor;
- char *host;
- int port;
- gboolean user_specified;
- char *user;
- char *tmp_password;
-
- guint32 my_uid;
- guint32 my_gid;
-
- int protocol_version;
-
- GOutputStream *command_stream;
- GInputStream *reply_stream;
- GDataInputStream *error_stream;
-
- guint32 current_id;
-
- /* Output Queue */
-
- gsize command_bytes_written;
- GList *command_queue;
-
- /* Reply reading: */
- GHashTable *expected_replies;
- guint32 reply_size;
- guint32 reply_size_read;
- guint8 *reply;
-
- GMountSource *mount_source; /* Only used/set during mount */
- int mount_try;
- gboolean mount_try_again;
-};
-
-static void parse_attributes (GVfsBackendSftp *backend,
- GFileInfo *info,
- const char *basename,
- GDataInputStream *reply,
- GFileAttributeMatcher *attribute_matcher);
-
-
-G_DEFINE_TYPE (GVfsBackendSftp, g_vfs_backend_sftp, G_VFS_TYPE_BACKEND)
-
-static void
-data_buffer_free (DataBuffer *buffer)
-{
- if (buffer)
- {
- g_free (buffer->data);
- g_slice_free (DataBuffer, buffer);
- }
-}
-
-static void
-make_fd_nonblocking (int fd)
-{
- fcntl (fd, F_SETFL, O_NONBLOCK | fcntl (fd, F_GETFL));
-}
-
-static SFTPClientVendor
-get_sftp_client_vendor (void)
-{
- char *ssh_stderr;
- char *args[3];
- gint ssh_exitcode;
- SFTPClientVendor res = SFTP_VENDOR_INVALID;
-
- args[0] = g_strdup (SSH_PROGRAM);
- args[1] = g_strdup ("-V");
- args[2] = NULL;
- if (g_spawn_sync (NULL, args, NULL,
- G_SPAWN_SEARCH_PATH | G_SPAWN_STDOUT_TO_DEV_NULL,
- NULL, NULL,
- NULL, &ssh_stderr,
- &ssh_exitcode, NULL))
- {
- if (ssh_stderr == NULL)
- res = SFTP_VENDOR_INVALID;
- else if ((strstr (ssh_stderr, "OpenSSH") != NULL) ||
- (strstr (ssh_stderr, "Sun_SSH") != NULL))
- res = SFTP_VENDOR_OPENSSH;
- else if (strstr (ssh_stderr, "SSH Secure Shell") != NULL)
- res = SFTP_VENDOR_SSH;
- else
- res = SFTP_VENDOR_INVALID;
- }
-
- g_free (ssh_stderr);
- g_free (args[0]);
- g_free (args[1]);
-
- return res;
-}
-
-static void
-g_vfs_backend_sftp_finalize (GObject *object)
-{
- GVfsBackendSftp *backend;
-
- backend = G_VFS_BACKEND_SFTP (object);
-
- g_hash_table_destroy (backend->expected_replies);
-
- if (backend->command_stream)
- g_object_unref (backend->command_stream);
-
- if (backend->reply_stream)
- g_object_unref (backend->reply_stream);
-
- if (backend->error_stream)
- g_object_unref (backend->error_stream);
-
- if (G_OBJECT_CLASS (g_vfs_backend_sftp_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_sftp_parent_class)->finalize) (object);
-}
-
-static void
-expected_reply_free (ExpectedReply *reply)
-{
- g_object_unref (reply->job);
- g_slice_free (ExpectedReply, reply);
-}
-
-static void
-g_vfs_backend_sftp_init (GVfsBackendSftp *backend)
-{
- backend->expected_replies = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)expected_reply_free);
-}
-
-static void
-look_for_stderr_errors (GVfsBackend *backend, GError **error)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- char *line;
-
- while (1)
- {
- line = g_data_input_stream_read_line (op_backend->error_stream, NULL, NULL, NULL);
-
- if (line == NULL)
- {
- /* Error (real or WOULDBLOCK) or EOF */
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("ssh program unexpectedly exited"));
- return;
- }
-
- if (strstr (line, "Permission denied") != NULL)
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
- _("Permission denied"));
- return;
- }
- else if (strstr (line, "Name or service not known") != NULL)
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_HOST_NOT_FOUND,
- _("Hostname not known"));
- return;
- }
- else if (strstr (line, "No route to host") != NULL)
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_HOST_NOT_FOUND,
- _("No route to host"));
- return;
- }
- else if (strstr (line, "Connection refused") != NULL)
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
- _("Connection refused by server"));
- return;
- }
- else if (strstr (line, "Host key verification failed") != NULL)
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Host key verification failed"));
- return;
- }
-
- g_free (line);
- }
-}
-
-static char **
-setup_ssh_commandline (GVfsBackend *backend)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- guint last_arg;
- gchar **args;
-
- args = g_new0 (gchar *, 20); /* 20 is enought for now, bump size if code below changes */
-
- /* Fill in the first few args */
- last_arg = 0;
- args[last_arg++] = g_strdup (SSH_PROGRAM);
-
- if (op_backend->client_vendor == SFTP_VENDOR_OPENSSH)
- {
- args[last_arg++] = g_strdup ("-oForwardX11 no");
- args[last_arg++] = g_strdup ("-oForwardAgent no");
- args[last_arg++] = g_strdup ("-oClearAllForwardings yes");
- args[last_arg++] = g_strdup ("-oProtocol 2");
- args[last_arg++] = g_strdup ("-oNoHostAuthenticationForLocalhost yes");
-#ifndef USE_PTY
- args[last_arg++] = g_strdup ("-oBatchMode yes");
-#endif
-
- }
- else if (op_backend->client_vendor == SFTP_VENDOR_SSH)
- args[last_arg++] = g_strdup ("-x");
-
- if (op_backend->port != -1)
- {
- args[last_arg++] = g_strdup ("-p");
- args[last_arg++] = g_strdup_printf ("%d", op_backend->port);
- }
-
-
- args[last_arg++] = g_strdup ("-l");
- args[last_arg++] = g_strdup (op_backend->user);
-
- args[last_arg++] = g_strdup ("-s");
-
- if (op_backend->client_vendor == SFTP_VENDOR_SSH)
- {
- args[last_arg++] = g_strdup ("sftp");
- args[last_arg++] = g_strdup (op_backend->host);
- }
- else
- {
- args[last_arg++] = g_strdup (op_backend->host);
- args[last_arg++] = g_strdup ("sftp");
- }
-
- args[last_arg++] = NULL;
-
- return args;
-}
-
-static gboolean
-spawn_ssh (GVfsBackend *backend,
- char *args[],
- pid_t *pid,
- int *tty_fd,
- int *stdin_fd,
- int *stdout_fd,
- int *stderr_fd,
- GError **error)
-{
-#ifdef USE_PTY
- *tty_fd = pty_open(pid, PTY_REAP_CHILD, NULL,
- args[0], args, NULL,
- 300, 300,
- stdin_fd, stdout_fd, stderr_fd);
- if (*tty_fd == -1)
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Unable to spawn ssh program"));
- return FALSE;
- }
-#else
- GError *my_error;
- GPid gpid;
-
- *tty_fd = -1;
-
- my_error = NULL;
- if (!g_spawn_async_with_pipes (NULL, args, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL,
- &gpid,
- stdin_fd, stdout_fd, stderr_fd, &my_error))
- {
- g_set_error (error,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Unable to spawn ssh program: %s"), my_error->message);
- g_error_free (my_error);
- return FALSE;
- }
- *pid = gpid;
-#endif
-
- return TRUE;
-}
-
-static guint32
-get_new_id (GVfsBackendSftp *backend)
-{
- return backend->current_id++;
-}
-
-static GDataOutputStream *
-new_command_stream (GVfsBackendSftp *backend, int type)
-{
- GOutputStream *mem_stream;
- GDataOutputStream *data_stream;
- guint32 id;
-
- mem_stream = g_memory_output_stream_new (NULL, 0, (GReallocFunc)g_realloc, NULL);
- data_stream = g_data_output_stream_new (mem_stream);
- g_object_unref (mem_stream);
-
- g_data_output_stream_put_int32 (data_stream, 0, NULL, NULL); /* LEN */
- g_data_output_stream_put_byte (data_stream, type, NULL, NULL);
- if (type != SSH_FXP_INIT)
- {
- id = get_new_id (backend);
- g_data_output_stream_put_uint32 (data_stream, id, NULL, NULL);
- g_object_set_qdata (G_OBJECT (data_stream), id_q, GUINT_TO_POINTER (id));
- }
-
- return data_stream;
-}
-
-static gsize
-get_data_size (GMemoryOutputStream *stream)
-{
- g_seekable_seek (G_SEEKABLE (stream),
- 0,
- G_SEEK_END,
- NULL, NULL);
- return g_seekable_tell (G_SEEKABLE (stream));
-}
-
-static gpointer
-get_data_from_command_stream (GDataOutputStream *command_stream, gsize *len)
-{
- GOutputStream *mem_stream;
- gpointer data;
- guint32 *len_ptr;
-
- mem_stream = g_filter_output_stream_get_base_stream (G_FILTER_OUTPUT_STREAM (command_stream));
- data = g_memory_output_stream_get_data (G_MEMORY_OUTPUT_STREAM (mem_stream));
- *len = get_data_size (G_MEMORY_OUTPUT_STREAM (mem_stream));
-
- len_ptr = (guint32 *)data;
- *len_ptr = GUINT32_TO_BE (*len - 4);
-
- return data;
-}
-
-static gboolean
-send_command_sync_and_unref_command (GVfsBackendSftp *backend,
- GDataOutputStream *command_stream,
- GCancellable *cancellable,
- GError **error)
-{
- gpointer data;
- gsize len;
- gsize bytes_written;
- gboolean res;
-
- data = get_data_from_command_stream (command_stream, &len);
-
- res = g_output_stream_write_all (backend->command_stream,
- data, len,
- &bytes_written,
- cancellable, error);
-
- if (error == NULL && !res)
- g_warning ("Ignored send_command error\n");
-
- g_free (data);
- g_object_unref (command_stream);
-
- return res;
-}
-
-static gboolean
-wait_for_reply (GVfsBackend *backend, int stdout_fd, GError **error)
-{
- fd_set ifds;
- struct timeval tv;
- int ret;
-
- FD_ZERO (&ifds);
- FD_SET (stdout_fd, &ifds);
-
- tv.tv_sec = 20;
- tv.tv_usec = 0;
-
- ret = select (stdout_fd+1, &ifds, NULL, NULL, &tv);
-
- if (ret <= 0)
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_TIMED_OUT,
- _("Timed out when logging in"));
- return FALSE;
- }
- return TRUE;
-}
-
-static GDataInputStream *
-make_reply_stream (guint8 *data, gsize len)
-{
- GInputStream *mem_stream;
- GDataInputStream *data_stream;
-
- mem_stream = g_memory_input_stream_new_from_data (data, len, g_free);
- data_stream = g_data_input_stream_new (mem_stream);
- g_object_unref (mem_stream);
-
- return data_stream;
-}
-
-static GDataInputStream *
-read_reply_sync (GVfsBackendSftp *backend, gsize *len_out, GError **error)
-{
- guint32 len;
- gsize bytes_read;
- GByteArray *array;
- guint8 *data;
-
- if (!g_input_stream_read_all (backend->reply_stream,
- &len, 4,
- &bytes_read, NULL, error))
- return NULL;
-
-
- len = GUINT32_FROM_BE (len);
-
- array = g_byte_array_sized_new (len);
-
- if (!g_input_stream_read_all (backend->reply_stream,
- array->data, len,
- &bytes_read, NULL, error))
- {
- g_byte_array_free (array, TRUE);
- return NULL;
- }
-
- if (len_out)
- *len_out = len;
-
- data = array->data;
- g_byte_array_free (array, FALSE);
-
- return make_reply_stream (data, len);
-}
-
-static void
-put_string (GDataOutputStream *stream, const char *str)
-{
- g_data_output_stream_put_uint32 (stream, strlen (str), NULL, NULL);
- g_data_output_stream_put_string (stream, str, NULL, NULL);
-}
-
-static void
-put_data_buffer (GDataOutputStream *stream, DataBuffer *buffer)
-{
- g_data_output_stream_put_uint32 (stream, buffer->size, NULL, NULL);
- g_output_stream_write_all (G_OUTPUT_STREAM (stream),
- buffer->data, buffer->size,
- NULL,
- NULL, NULL);
-}
-
-static char *
-read_string (GDataInputStream *stream, gsize *len_out)
-{
- guint32 len;
- char *data;
- GError *error;
-
- error = NULL;
- len = g_data_input_stream_read_uint32 (stream, NULL, &error);
- if (error)
- {
- g_error_free (error);
- return NULL;
- }
-
- data = g_malloc (len + 1);
-
- if (!g_input_stream_read_all (G_INPUT_STREAM (stream), data, len, NULL, NULL, NULL))
- {
- g_free (data);
- return NULL;
- }
-
- data[len] = 0;
-
- if (len_out)
- *len_out = len;
-
- return data;
-}
-
-static DataBuffer *
-read_data_buffer (GDataInputStream *stream)
-{
- DataBuffer *buffer;
-
- buffer = g_slice_new (DataBuffer);
- buffer->data = (guchar *)read_string (stream, &buffer->size);
-
- return buffer;
-}
-
-static gboolean
-get_hostname_and_fingerprint_from_line (const gchar *buffer,
- gchar **hostname_out,
- gchar **fingerprint_out)
-{
- gchar *pos;
- gchar *startpos;
- gchar *endpos;
- gchar *hostname = NULL;
- gchar *fingerprint = NULL;
-
- if (g_str_has_prefix (buffer, "The authenticity of host '"))
- {
- /* OpenSSH */
- pos = strchr (&buffer[26], '\'');
- if (pos == NULL)
- return FALSE;
-
- hostname = g_strndup (&buffer[26], pos - (&buffer[26]));
-
- startpos = strstr (pos, " key fingerprint is ");
- if (startpos == NULL)
- {
- g_free (hostname);
- return FALSE;
- }
-
- startpos = startpos + 20;
- endpos = strchr (startpos, '.');
- if (endpos == NULL)
- {
- g_free (hostname);
- return FALSE;
- }
-
- fingerprint = g_strndup (startpos, endpos - startpos);
- }
- else if (strstr (buffer, "Key fingerprint:") != NULL)
- {
- /* SSH.com*/
- startpos = strstr (buffer, "Key fingerprint:");
- if (startpos == NULL)
- {
- g_free (hostname);
- return FALSE;
- }
-
- startpos = startpos + 18;
- endpos = strchr (startpos, '\r');
- fingerprint = g_strndup (startpos, endpos - startpos);
- }
-
- *hostname_out = hostname;
- *fingerprint_out = fingerprint;
-
- return TRUE;
-}
-
-static const gchar *
-get_authtype_from_password_line (const char *password_line)
-{
- return g_str_has_prefix (password_line, "Enter passphrase for key") ?
- "publickey" : "password";
-}
-
-static char *
-get_object_from_password_line (const char *password_line)
-{
- char *chr, *ptr, *object = NULL;
-
- if (g_str_has_prefix (password_line, "Enter passphrase for key"))
- {
- ptr = strchr (password_line, '\'');
- if (ptr != NULL)
- {
- ptr += 1;
- chr = strchr (ptr, '\'');
- if (chr != NULL)
- {
- object = g_strndup (ptr, chr - ptr);
- }
- else
- {
- object = g_strdup (ptr);
- }
- }
- }
- return object;
-}
-
-static gboolean
-handle_login (GVfsBackend *backend,
- GMountSource *mount_source,
- int tty_fd, int stdout_fd, int stderr_fd,
- GError **error)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GInputStream *prompt_stream;
- GOutputStream *reply_stream;
- fd_set ifds;
- struct timeval tv;
- int ret;
- int prompt_fd;
- char buffer[1024];
- gsize len;
- gboolean aborted = FALSE;
- gboolean ret_val;
- char *new_password = NULL;
- char *new_user = NULL;
- GPasswordSave password_save = G_PASSWORD_SAVE_NEVER;
- gsize bytes_written;
- gboolean password_in_keyring = FALSE;
- const gchar *authtype = NULL;
- gchar *object = NULL;
-
- if (op_backend->client_vendor == SFTP_VENDOR_SSH)
- prompt_fd = stderr_fd;
- else
- prompt_fd = tty_fd;
-
- prompt_stream = g_unix_input_stream_new (prompt_fd, FALSE);
- reply_stream = g_unix_output_stream_new (tty_fd, FALSE);
-
- ret_val = TRUE;
- while (1)
- {
- FD_ZERO (&ifds);
- FD_SET (stdout_fd, &ifds);
- FD_SET (prompt_fd, &ifds);
-
- tv.tv_sec = 20;
- tv.tv_usec = 0;
-
- ret = select (MAX (stdout_fd, prompt_fd)+1, &ifds, NULL, NULL, &tv);
-
- if (ret <= 0)
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_TIMED_OUT,
- _("Timed out when logging in"));
- ret_val = FALSE;
- break;
- }
-
- if (FD_ISSET (stdout_fd, &ifds))
- break; /* Got reply to initial INIT request */
-
- g_assert (FD_ISSET (prompt_fd, &ifds));
-
-
- len = g_input_stream_read (prompt_stream,
- buffer, sizeof (buffer) - 1,
- NULL, error);
-
- if (len == -1)
- {
- ret_val = FALSE;
- break;
- }
-
- buffer[len] = 0;
-
- /*
- * If the input URI contains a username
- * if the input URI contains a password, we attempt one login and return GNOME_VFS_ERROR_ACCESS_DENIED on failure.
- * if the input URI contains no password, we query the user until he provides a correct one, or he cancels.
- *
- * If the input URI contains no username
- * (a) the user is queried for a user name and a password, with the default login being his
- * local login name.
- *
- * (b) if the user decides to change his remote login name, we go to tty_retry because we need a
- * new SSH session, attempting one login with his provided credentials, and if that fails proceed
- * with (a), but use his desired remote login name as default.
- *
- * The "password" variable is only used for the very first login attempt,
- * or for the first re-login attempt when the user decided to change his name.
- * Otherwise, we "new_password" and "new_user_name" is used, as output variable
- * for user and keyring input.
- */
- if (g_str_has_suffix (buffer, "password: ") ||
- g_str_has_suffix (buffer, "Password: ") ||
- g_str_has_suffix (buffer, "Password:") ||
- g_str_has_prefix (buffer, "Password for ") ||
- g_str_has_prefix (buffer, "Enter Kerberos password") ||
- g_str_has_prefix (buffer, "Enter passphrase for key"))
- {
- authtype = get_authtype_from_password_line (buffer);
- object = get_object_from_password_line (buffer);
-
- /* If password is in keyring at this point is because it failed */
- if (!op_backend->tmp_password && (password_in_keyring ||
- !g_vfs_keyring_lookup_password (op_backend->user,
- op_backend->host,
- NULL,
- "sftp",
- object,
- authtype,
- op_backend->port != -1 ?
- op_backend->port
- :
- 0,
- NULL,
- NULL,
- &new_password)))
- {
- GAskPasswordFlags flags = G_ASK_PASSWORD_NEED_PASSWORD;
-
- if (g_vfs_keyring_is_available ())
- flags |= G_ASK_PASSWORD_SAVING_SUPPORTED;
- if (!op_backend->user_specified)
- flags |= G_ASK_PASSWORD_NEED_USERNAME;
-
- g_free (new_password);
-
- if (!g_mount_source_ask_password (mount_source,
- g_str_has_prefix (buffer, "Enter passphrase for key") ?
- _("Enter passphrase for key")
- :
- _("Enter password"),
- op_backend->user,
- NULL,
- flags,
- &aborted,
- &new_password,
- &new_user,
- NULL,
- NULL,
- &password_save) ||
- aborted)
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
- _("Password dialog cancelled"));
- ret_val = FALSE;
- break;
- }
- }
- else if (op_backend->tmp_password)
- {
- /* I already a have a password of a previous login attempt
- * that failed because the user provided a new user name
- */
- new_password = op_backend->tmp_password;
- op_backend->tmp_password = NULL;
- }
- else
- password_in_keyring = TRUE;
-
- if (new_user && strcmp (new_user, op_backend->user) != 0)
- {
- g_free (op_backend->user);
- op_backend->user = new_user;
-
- g_free (op_backend->tmp_password);
- op_backend->tmp_password = new_password;
- new_password = NULL;
-
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- "Invalid user name");
- ret_val = FALSE;
- break;
- }
- else if (new_user)
- {
- g_free (new_user);
- }
-
- if (!g_output_stream_write_all (reply_stream,
- new_password, strlen (new_password),
- &bytes_written,
- NULL, NULL) ||
- !g_output_stream_write_all (reply_stream,
- "\n", 1,
- &bytes_written,
- NULL, NULL))
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
- _("Can't send password"));
- ret_val = FALSE;
- break;
- }
- }
- else if (g_str_has_prefix (buffer, "The authenticity of host '") ||
- strstr (buffer, "Key fingerprint:") != NULL)
- {
- const gchar *choices[] = {_("Log In Anyway"), _("Cancel Login")};
- const gchar *v_choices = (const gchar *)choices;
- const gchar *choice_string;
- gchar *hostname = NULL;
- gchar *fingerprint = NULL;
- gint choice;
- gchar *message;
-
- get_hostname_and_fingerprint_from_line (buffer, &hostname, &fingerprint);
-
- message = g_strdup_printf (_("The identity of the remote computer (%s) is unknown.\n"
- "This happens when you log in to a computer the first time.\n\n"
- "The identity sent by the remote computer is %s. "
- "If you want to be absolutely sure it is safe to continue, "
- "contact the system administrator."),
- hostname ? hostname : op_backend->host, fingerprint);
-
- g_free (hostname);
- g_free (fingerprint);
-
- if (!g_mount_source_ask_question (mount_source,
- message,
- &v_choices,
- 2,
- &aborted,
- &choice) ||
- aborted)
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
- _("Login dialog cancelled"));
- g_free (message);
- ret_val = FALSE;
- break;
- }
- g_free (message);
-
- choice_string = (choice == 0) ? "yes" : "no";
- if (!g_output_stream_write_all (reply_stream,
- choice_string,
- strlen (choice_string),
- &bytes_written,
- NULL, NULL) ||
- !g_output_stream_write_all (reply_stream,
- "\n", 1,
- &bytes_written,
- NULL, NULL))
- {
- g_set_error_literal (error,
- G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
- _("Can't send host identity confirmation"));
- ret_val = FALSE;
- break;
- }
- }
- }
-
- if (ret_val)
- {
- /* Login succeed, save password in keyring */
- g_vfs_keyring_save_password (op_backend->user,
- op_backend->host,
- NULL,
- "sftp",
- object,
- authtype,
- op_backend->port != -1 ?
- op_backend->port
- :
- 0,
- new_password,
- password_save);
- }
-
- g_free (object);
- g_free (new_password);
- g_object_unref (prompt_stream);
- g_object_unref (reply_stream);
- return ret_val;
-}
-
-static void
-fail_jobs_and_die (GVfsBackendSftp *backend, GError *error)
-{
- GHashTableIter iter;
- gpointer key, value;
-
- g_hash_table_iter_init (&iter, backend->expected_replies);
- while (g_hash_table_iter_next (&iter, &key, &value))
- {
- ExpectedReply *expected_reply = (ExpectedReply *) value;
- g_vfs_job_failed_from_error (expected_reply->job, error);
- }
-
- g_error_free (error);
-
- _exit (1);
-}
-
-static void
-check_input_stream_read_result (GVfsBackendSftp *backend, gssize res, GError *error)
-{
- if (G_UNLIKELY (res <= 0))
- {
- if (res == 0 || error == NULL)
- {
- g_clear_error (&error);
- g_set_error (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Internal error: %s"),
- res == 0 ? "The underlying ssh process died" : "Unkown Error");
- }
-
- fail_jobs_and_die (backend, error);
- }
-}
-
-static void read_reply_async (GVfsBackendSftp *backend);
-
-static void
-read_reply_async_got_data (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GVfsBackendSftp *backend = user_data;
- gssize res;
- GDataInputStream *reply;
- ExpectedReply *expected_reply;
- guint32 id;
- int type;
- GError *error;
-
- error = NULL;
- res = g_input_stream_read_finish (G_INPUT_STREAM (source_object), result, &error);
-
- check_input_stream_read_result (backend, res, error);
-
- backend->reply_size_read += res;
-
- if (backend->reply_size_read < backend->reply_size)
- {
- g_input_stream_read_async (backend->reply_stream,
- backend->reply + backend->reply_size_read, backend->reply_size - backend->reply_size_read,
- 0, NULL, read_reply_async_got_data, backend);
- return;
- }
-
- reply = make_reply_stream (backend->reply, backend->reply_size);
- backend->reply = NULL;
-
- type = g_data_input_stream_read_byte (reply, NULL, NULL);
- id = g_data_input_stream_read_uint32 (reply, NULL, NULL);
-
- expected_reply = g_hash_table_lookup (backend->expected_replies, GINT_TO_POINTER (id));
- if (expected_reply)
- {
- if (expected_reply->callback != NULL)
- (expected_reply->callback) (backend, type, reply, backend->reply_size,
- expected_reply->job, expected_reply->user_data);
- g_hash_table_remove (backend->expected_replies, GINT_TO_POINTER (id));
- }
- else
- g_warning ("Got unhandled reply of size %"G_GUINT32_FORMAT" for id %"G_GUINT32_FORMAT"\n", backend->reply_size, id);
-
- g_object_unref (reply);
-
- read_reply_async (backend);
-
-}
-
-static void
-read_reply_async_got_len (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GVfsBackendSftp *backend = user_data;
- gssize res;
- GError *error;
-
- error = NULL;
- res = g_input_stream_read_finish (G_INPUT_STREAM (source_object), result, &error);
-
- check_input_stream_read_result (backend, res, error);
-
- backend->reply_size_read += res;
-
- if (backend->reply_size_read < 4)
- {
- g_input_stream_read_async (backend->reply_stream,
- &backend->reply_size + backend->reply_size_read, 4 - backend->reply_size_read,
- 0, NULL, read_reply_async_got_len, backend);
- return;
- }
- backend->reply_size = GUINT32_FROM_BE (backend->reply_size);
-
- backend->reply_size_read = 0;
- backend->reply = g_malloc (backend->reply_size);
- g_input_stream_read_async (backend->reply_stream,
- backend->reply, backend->reply_size,
- 0, NULL, read_reply_async_got_data, backend);
-}
-
-static void
-read_reply_async (GVfsBackendSftp *backend)
-{
- backend->reply_size_read = 0;
- g_input_stream_read_async (backend->reply_stream,
- &backend->reply_size, 4,
- 0, NULL, read_reply_async_got_len, backend);
-}
-
-static void send_command (GVfsBackendSftp *backend);
-
-static void
-send_command_data (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GVfsBackendSftp *backend = user_data;
- gssize res;
- DataBuffer *buffer;
-
- res = g_output_stream_write_finish (G_OUTPUT_STREAM (source_object), result, NULL);
-
- if (res <= 0)
- {
- /* TODO: unmount, etc */
- g_warning ("Error sending command");
- return;
- }
-
- buffer = backend->command_queue->data;
-
- backend->command_bytes_written += res;
-
- if (backend->command_bytes_written < buffer->size)
- {
- g_output_stream_write_async (backend->command_stream,
- buffer->data + backend->command_bytes_written,
- buffer->size - backend->command_bytes_written,
- 0,
- NULL,
- send_command_data,
- backend);
- return;
- }
-
- data_buffer_free (buffer);
-
- backend->command_queue = g_list_delete_link (backend->command_queue, backend->command_queue);
-
- if (backend->command_queue != NULL)
- send_command (backend);
-}
-
-static void
-send_command (GVfsBackendSftp *backend)
-{
- DataBuffer *buffer;
-
- buffer = backend->command_queue->data;
-
- backend->command_bytes_written = 0;
- g_output_stream_write_async (backend->command_stream,
- buffer->data,
- buffer->size,
- 0,
- NULL,
- send_command_data,
- backend);
-}
-
-static void
-expect_reply (GVfsBackendSftp *backend,
- guint32 id,
- ReplyCallback callback,
- GVfsJob *job,
- gpointer user_data)
-{
- ExpectedReply *expected;
-
- expected = g_slice_new (ExpectedReply);
- expected->callback = callback;
- expected->job = g_object_ref (job);
- expected->user_data = user_data;
-
- g_hash_table_replace (backend->expected_replies, GINT_TO_POINTER (id), expected);
-}
-
-static DataBuffer *
-data_buffer_new (guchar *data, gsize len)
-{
- DataBuffer *buffer;
-
- buffer = g_slice_new (DataBuffer);
- buffer->data = data;
- buffer->size = len;
-
- return buffer;
-}
-
-static void
-queue_command_buffer (GVfsBackendSftp *backend,
- DataBuffer *buffer)
-{
- gboolean first;
-
- first = backend->command_queue == NULL;
-
- backend->command_queue = g_list_append (backend->command_queue, buffer);
-
- if (first)
- send_command (backend);
-}
-
-static void
-queue_command_stream_and_free (GVfsBackendSftp *backend,
- GDataOutputStream *command_stream,
- ReplyCallback callback,
- GVfsJob *job,
- gpointer user_data)
-{
- gpointer data;
- gsize len;
- DataBuffer *buffer;
- guint32 id;
-
- id = GPOINTER_TO_UINT (g_object_get_qdata (G_OBJECT (command_stream), id_q));
- data = get_data_from_command_stream (command_stream, &len);
-
- buffer = data_buffer_new (data, len);
- g_object_unref (command_stream);
-
- expect_reply (backend, id, callback, job, user_data);
- queue_command_buffer (backend, buffer);
-}
-
-
-static void
-multi_request_cb (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply_stream,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- MultiReply *reply;
- MultiRequest *request;
- int i;
-
- reply = user_data;
- request = reply->request;
-
- reply->type = reply_type;
- reply->data = g_object_ref (reply_stream);
- reply->data_len = len;
-
- if (--request->n_outstanding == 0)
- {
- /* Call callback */
- if (request->callback != NULL)
- (request->callback) (backend,
- request->replies,
- request->n_replies,
- job,
- request->user_data);
-
- /* Free request data */
-
- for (i = 0; i < request->n_replies; i++)
- {
- reply = &request->replies[i];
- if (reply->data)
- g_object_unref (reply->data);
- }
- g_free (request->replies);
-
- g_free (request);
-
- }
-}
-
-static void
-queue_command_streams_and_free (GVfsBackendSftp *backend,
- GDataOutputStream **commands,
- int n_commands,
- MultiReplyCallback callback,
- GVfsJob *job,
- gpointer user_data)
-{
- MultiRequest *data;
- MultiReply *reply;
-
- int i;
-
- data = g_new0 (MultiRequest, 1);
-
- data->user_data = user_data;
- data->n_replies = n_commands;
- data->n_outstanding = n_commands;
- data->replies = g_new0 (MultiReply, n_commands);
- data->callback = callback;
-
- for (i = 0; i < n_commands; i++)
- {
- reply = &data->replies[i];
- reply->request = data;
- queue_command_stream_and_free (backend,
- commands[i],
- multi_request_cb,
- job,
- reply);
- }
-}
-
-static gboolean
-get_uid_sync (GVfsBackendSftp *backend)
-{
- GDataOutputStream *command;
- GDataInputStream *reply;
- int type;
-
- command = new_command_stream (backend, SSH_FXP_STAT);
- put_string (command, ".");
- send_command_sync_and_unref_command (backend, command, NULL, NULL);
-
- reply = read_reply_sync (backend, NULL, NULL);
- if (reply == NULL)
- return FALSE;
-
- type = g_data_input_stream_read_byte (reply, NULL, NULL);
- /*id =*/ (void) g_data_input_stream_read_uint32 (reply, NULL, NULL);
-
- /* On error, set uid to -1 and ignore */
- backend->my_uid = (guint32)-1;
- backend->my_gid = (guint32)-1;
- if (type == SSH_FXP_ATTRS)
- {
- GFileInfo *info;
-
- info = g_file_info_new ();
- parse_attributes (backend, info, NULL, reply, NULL);
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_UNIX_UID))
- {
- /* Both are always set if set */
- backend->my_uid = g_file_info_get_attribute_uint32 (info,
- G_FILE_ATTRIBUTE_UNIX_UID);
- backend->my_gid = g_file_info_get_attribute_uint32 (info,
- G_FILE_ATTRIBUTE_UNIX_GID);
- }
-
- g_object_unref (info);
- }
-
- g_object_unref (reply);
-
- return TRUE;
-}
-
-static void
-do_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- gchar **args; /* Enough for now, extend if you add more args */
- pid_t pid;
- int tty_fd, stdout_fd, stdin_fd, stderr_fd;
- GError *error;
- GInputStream *is;
- GDataOutputStream *command;
- GDataInputStream *reply;
- gboolean res;
- GMountSpec *sftp_mount_spec;
- char *extension_name, *extension_data;
- char *display_name;
-
- args = setup_ssh_commandline (backend);
-
- error = NULL;
- if (!spawn_ssh (backend,
- args, &pid,
- &tty_fd, &stdin_fd, &stdout_fd, &stderr_fd,
- &error))
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- g_strfreev (args);
- return;
- }
-
- g_strfreev (args);
-
- op_backend->command_stream = g_unix_output_stream_new (stdin_fd, TRUE);
-
- command = new_command_stream (op_backend, SSH_FXP_INIT);
- g_data_output_stream_put_int32 (command,
- SSH_FILEXFER_VERSION, NULL, NULL);
- send_command_sync_and_unref_command (op_backend, command, NULL, NULL);
-
- if (tty_fd == -1)
- res = wait_for_reply (backend, stdout_fd, &error);
- else
- res = handle_login (backend, mount_source, tty_fd, stdout_fd, stderr_fd, &error);
-
- if (!res)
- {
- if (error->code == G_IO_ERROR_INVALID_ARGUMENT)
- {
- /* New username provided by the user,
- * we need to re-spawn the ssh command
- */
- g_error_free (error);
- do_mount (backend, job, mount_spec, mount_source, is_automount);
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-
- return;
- }
-
- op_backend->reply_stream = g_unix_input_stream_new (stdout_fd, TRUE);
-
- make_fd_nonblocking (stderr_fd);
- is = g_unix_input_stream_new (stderr_fd, TRUE);
- op_backend->error_stream = g_data_input_stream_new (is);
- g_object_unref (is);
-
- reply = read_reply_sync (op_backend, NULL, NULL);
- if (reply == NULL)
- {
- look_for_stderr_errors (backend, &error);
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- if (g_data_input_stream_read_byte (reply, NULL, NULL) != SSH_FXP_VERSION)
- {
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Protocol error"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- op_backend->protocol_version = g_data_input_stream_read_uint32 (reply, NULL, NULL);
-
- while ((extension_name = read_string (reply, NULL)) != NULL)
- {
- extension_data = read_string (reply, NULL);
- if (extension_data)
- {
- /* TODO: Do something with this */
- }
- g_free (extension_name);
- g_free (extension_data);
- }
-
- g_object_unref (reply);
-
- if (!get_uid_sync (op_backend))
- {
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Protocol error"));
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- return;
- }
-
- read_reply_async (op_backend);
-
- sftp_mount_spec = g_mount_spec_new ("sftp");
- if (op_backend->user_specified)
- g_mount_spec_set (sftp_mount_spec, "user", op_backend->user);
- g_mount_spec_set (sftp_mount_spec, "host", op_backend->host);
- if (op_backend->port != -1)
- {
- char *v;
- v = g_strdup_printf ("%d", op_backend->port);
- g_mount_spec_set (sftp_mount_spec, "port", v);
- g_free (v);
- }
-
- g_vfs_backend_set_mount_spec (backend, sftp_mount_spec);
- g_mount_spec_unref (sftp_mount_spec);
-
- /* Translators: This is the name of an sftp share, like "sftp on <hostname>" */
- display_name = g_strdup_printf (_("sftp on %s"), op_backend->host);
- g_vfs_backend_set_display_name (backend, display_name);
- g_free (display_name);
- g_vfs_backend_set_icon_name (backend, "folder-remote");
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- const char *user, *host, *port;
-
- op_backend->client_vendor = get_sftp_client_vendor ();
-
- if (op_backend->client_vendor == SFTP_VENDOR_INVALID)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Unable to find supported ssh command"));
- return TRUE;
- }
-
- host = g_mount_spec_get (mount_spec, "host");
-
- if (host == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("No hostname specified"));
- return TRUE;
- }
-
- port = g_mount_spec_get (mount_spec, "port");
- op_backend->port = -1;
- if (port != NULL)
- {
- int p = atoi (port);
- if (p != 22)
- op_backend->port = p;
- }
-
- user = g_mount_spec_get (mount_spec, "user");
-
- op_backend->host = g_strdup (host);
- op_backend->user = g_strdup (user);
- if (op_backend->user)
- op_backend->user_specified = TRUE;
- else
- op_backend->user = g_strdup (g_get_user_name ());
-
- return FALSE;
-}
-
-static int
-io_error_code_for_sftp_error (guint32 code, int failure_error)
-{
- int error_code;
-
- error_code = G_IO_ERROR_FAILED;
-
- switch (code)
- {
- default:
- case SSH_FX_EOF:
- case SSH_FX_BAD_MESSAGE:
- case SSH_FX_NO_CONNECTION:
- case SSH_FX_CONNECTION_LOST:
- break;
-
- case SSH_FX_FAILURE:
- error_code = failure_error;
- break;
-
- case SSH_FX_NO_SUCH_FILE:
- error_code = G_IO_ERROR_NOT_FOUND;
- break;
-
- case SSH_FX_PERMISSION_DENIED:
- error_code = G_IO_ERROR_PERMISSION_DENIED;
- break;
-
- case SSH_FX_OP_UNSUPPORTED:
- error_code = G_IO_ERROR_NOT_SUPPORTED;
- break;
- }
- return error_code;
-}
-
-static gboolean
-error_from_status (GVfsJob *job,
- GDataInputStream *reply,
- int failure_error,
- int allowed_sftp_error,
- GError **error)
-{
- guint32 code;
- gint error_code;
- char *message;
-
- if (failure_error == -1)
- failure_error = G_IO_ERROR_FAILED;
-
- code = g_data_input_stream_read_uint32 (reply, NULL, NULL);
-
- if (code == SSH_FX_OK ||
- (allowed_sftp_error != -1 &&
- code == allowed_sftp_error))
- return TRUE;
-
- if (error)
- {
- error_code = io_error_code_for_sftp_error (code, failure_error);
- message = read_string (reply, NULL);
- if (message == NULL)
- message = g_strdup ("Unknown reason");
-
- *error = g_error_new_literal (G_IO_ERROR, error_code, message);
- g_free (message);
- }
-
- return FALSE;
-}
-
-static gboolean
-failure_from_status (GVfsJob *job,
- GDataInputStream *reply,
- int failure_error,
- int allowed_sftp_error)
-{
- GError *error;
-
- error = NULL;
- if (error_from_status (job, reply, failure_error, allowed_sftp_error, &error))
- return TRUE;
- else
- {
- g_vfs_job_failed_from_error (job, error);
- g_error_free (error);
- }
- return FALSE;
-}
-
-
-static gboolean
-result_from_status (GVfsJob *job,
- GDataInputStream *reply,
- int failure_error,
- int allowed_sftp_error)
-{
- gboolean res;
-
- res = failure_from_status (job, reply,
- failure_error,
- allowed_sftp_error);
- if (res)
- g_vfs_job_succeeded (job);
-
- return res;
-}
-
-static void
-set_access_attributes (GFileInfo *info,
- guint32 perm)
-{
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ,
- perm & 0x4);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
- perm & 0x2);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE,
- perm & 0x1);
-}
-
-
-static void
-parse_attributes (GVfsBackendSftp *backend,
- GFileInfo *info,
- const char *basename,
- GDataInputStream *reply,
- GFileAttributeMatcher *matcher)
-{
- guint32 flags;
- GFileType type;
- guint32 uid, gid;
- guint32 mode;
- gboolean has_uid, free_mimetype;
- char *mimetype;
- GIcon *icon;
-
- flags = g_data_input_stream_read_uint32 (reply, NULL, NULL);
-
- if (basename != NULL && basename[0] == '.')
- g_file_info_set_is_hidden (info, TRUE);
-
- if (basename != NULL)
- g_file_info_set_name (info, basename);
- else
- g_file_info_set_name (info, "/");
-
- if (basename != NULL && basename[strlen (basename) -1] == '~')
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP, TRUE);
-
- if (flags & SSH_FILEXFER_ATTR_SIZE)
- {
- guint64 size = g_data_input_stream_read_uint64 (reply, NULL, NULL);
- g_file_info_set_size (info, size);
- }
-
- has_uid = FALSE;
- uid = gid = 0; /* Avoid warnings */
- if (flags & SSH_FILEXFER_ATTR_UIDGID)
- {
- has_uid = TRUE;
- uid = g_data_input_stream_read_uint32 (reply, NULL, NULL);
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_UID, uid);
- gid = g_data_input_stream_read_uint32 (reply, NULL, NULL);
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_GID, gid);
- }
-
- type = G_FILE_TYPE_UNKNOWN;
-
- if (flags & SSH_FILEXFER_ATTR_PERMISSIONS)
- {
- mode = g_data_input_stream_read_uint32 (reply, NULL, NULL);
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE, mode);
-
- mimetype = NULL;
- if (S_ISREG (mode))
- type = G_FILE_TYPE_REGULAR;
- else if (S_ISDIR (mode))
- {
- type = G_FILE_TYPE_DIRECTORY;
- mimetype = "inode/directory";
- }
- else if (S_ISFIFO (mode))
- {
- type = G_FILE_TYPE_SPECIAL;
- mimetype = "inode/fifo";
- }
- else if (S_ISSOCK (mode))
- {
- type = G_FILE_TYPE_SPECIAL;
- mimetype = "inode/socket";
- }
- else if (S_ISCHR (mode))
- {
- type = G_FILE_TYPE_SPECIAL;
- mimetype = "inode/chardevice";
- }
- else if (S_ISBLK (mode))
- {
- type = G_FILE_TYPE_SPECIAL;
- mimetype = "inode/blockdevice";
- }
- else if (S_ISLNK (mode))
- {
- type = G_FILE_TYPE_SYMBOLIC_LINK;
- g_file_info_set_is_symlink (info, TRUE);
- mimetype = "inode/symlink";
- }
-
- free_mimetype = FALSE;
- if (mimetype == NULL)
- {
- if (basename)
- {
- mimetype = g_content_type_guess (basename, NULL, 0, NULL);
- free_mimetype = TRUE;
- }
- else
- mimetype = "application/octet-stream";
- }
-
- g_file_info_set_content_type (info, mimetype);
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE, mimetype);
-
- if (g_file_attribute_matcher_matches (matcher,
- G_FILE_ATTRIBUTE_STANDARD_ICON))
- {
- icon = NULL;
- if (S_ISDIR(mode))
- icon = g_themed_icon_new ("folder");
- else if (mimetype)
- {
- icon = g_content_type_get_icon (mimetype);
- if (G_IS_THEMED_ICON (icon))
- g_themed_icon_append_name (G_THEMED_ICON (icon), "text-x-generic");
- }
-
- if (icon == NULL)
- icon = g_themed_icon_new ("text-x-generic");
-
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- }
-
-
- if (free_mimetype)
- g_free (mimetype);
-
- if (has_uid && backend->my_uid != (guint32)-1)
- {
- if (uid == backend->my_uid)
- set_access_attributes (info, (mode >> 6) & 0x7);
- else if (gid == backend->my_gid)
- set_access_attributes (info, (mode >> 3) & 0x7);
- else
- set_access_attributes (info, (mode >> 0) & 0x7);
- }
-
- }
-
- g_file_info_set_file_type (info, type);
-
- if (flags & SSH_FILEXFER_ATTR_ACMODTIME)
- {
- guint32 v;
- char *etag;
-
- v = g_data_input_stream_read_uint32 (reply, NULL, NULL);
- g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS, v);
- v = g_data_input_stream_read_uint32 (reply, NULL, NULL);
- g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED, v);
-
- etag = g_strdup_printf ("%lu", (long unsigned int)v);
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_ETAG_VALUE, etag);
- g_free (etag);
- }
-
- if (flags & SSH_FILEXFER_ATTR_EXTENDED)
- {
- guint32 count, i;
- char *name, *val;
- count = g_data_input_stream_read_uint32 (reply, NULL, NULL);
- for (i = 0; i < count; i++)
- {
- name = read_string (reply, NULL);
- val = read_string (reply, NULL);
-
- g_free (name);
- g_free (val);
- }
- }
-
- /* We use the same setting as for local files. Can't really
- * do better, since there is no way in this version of sftp to find out
- * the remote charset encoding
- */
- if (g_file_attribute_matcher_matches (matcher,
- G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME))
- {
- if (basename != NULL)
- {
- char *display_name = g_filename_display_name (basename);
-
- if (strstr (display_name, "\357\277\275") != NULL)
- {
- char *p = display_name;
- display_name = g_strconcat (display_name, _(" (invalid encoding)"), NULL);
- g_free (p);
- }
- g_file_info_set_display_name (info, display_name);
- g_free (display_name);
- }
- else
- {
- char *name;
-
-
- /* Translators: This is the name of the root of an sftp share, like "/ on <hostname>" */
- name = g_strdup_printf (_("/ on %s"), G_VFS_BACKEND_SFTP (backend)->host);
- g_file_info_set_display_name (info, name);
- g_free (name);
- }
- }
-
- if (basename != NULL &&
- g_file_attribute_matcher_matches (matcher,
- G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME))
- {
- char *edit_name = g_filename_display_name (basename);
- g_file_info_set_edit_name (info, edit_name);
- g_free (edit_name);
- }
-}
-
-static SftpHandle *
-sftp_handle_new (GDataInputStream *reply)
-{
- SftpHandle *handle;
-
- handle = g_slice_new0 (SftpHandle);
- handle->raw_handle = read_data_buffer (reply);
- handle->offset = 0;
-
- return handle;
-}
-
-static void
-sftp_handle_free (SftpHandle *handle)
-{
- data_buffer_free (handle->raw_handle);
- g_free (handle->filename);
- g_free (handle->tempname);
- g_slice_free (SftpHandle, handle);
-}
-
-static void
-open_stat_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- if (g_vfs_job_is_finished (job))
- {
- /* Handled in stat reply */
- return;
- }
-
- if (reply_type == SSH_FXP_ATTRS)
- {
- GFileType type;
- GFileInfo *info = g_file_info_new ();
-
- parse_attributes (backend, info, NULL,
- reply, NULL);
- type = g_file_info_get_file_type (info);
- g_object_unref (info);
-
- if (type == G_FILE_TYPE_DIRECTORY)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_IS_DIRECTORY,
- _("File is directory"));
- return;
- }
- }
-
- if (GPOINTER_TO_INT (G_VFS_JOB(job)->backend_data) == 1)
- {
- /* We ran the read_reply and it was a generic failure */
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Failure"));
- }
-}
-
-static void
-open_for_read_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- SftpHandle *handle;
-
- if (g_vfs_job_is_finished (job))
- {
- /* Handled in stat reply */
-
- /* Normally this should not happen as we
- sent an is_dir error. But i guess we can
- race */
- if (reply_type == SSH_FXP_HANDLE)
- {
- GDataOutputStream *command;
- DataBuffer *bhandle;
-
- bhandle = read_data_buffer (reply);
-
- command = new_command_stream (backend, SSH_FXP_CLOSE);
- put_data_buffer (command, bhandle);
- queue_command_stream_and_free (backend, command, NULL, G_VFS_JOB (job), NULL);
-
- data_buffer_free (bhandle);
- }
-
- return;
- }
-
- if (reply_type == SSH_FXP_STATUS)
- {
- if (failure_from_status (job,
- reply,
- -1,
- SSH_FX_FAILURE))
- {
- /* Unknown failure type, mark that we got this and
- return result from stat result */
- G_VFS_JOB(job)->backend_data = GINT_TO_POINTER (1);
- }
-
- return;
- }
-
- if (reply_type != SSH_FXP_HANDLE)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- return;
- }
-
- handle = sftp_handle_new (reply);
-
- g_vfs_job_open_for_read_set_handle (G_VFS_JOB_OPEN_FOR_READ (job), handle);
- g_vfs_job_open_for_read_set_can_seek (G_VFS_JOB_OPEN_FOR_READ (job), TRUE);
- g_vfs_job_succeeded (job);
-}
-
-static gboolean
-try_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- G_VFS_JOB(job)->backend_data = GINT_TO_POINTER (0);
-
- command = new_command_stream (op_backend,
- SSH_FXP_STAT);
- put_string (command, filename);
- queue_command_stream_and_free (op_backend, command, open_stat_reply, G_VFS_JOB (job), NULL);
-
- command = new_command_stream (op_backend,
- SSH_FXP_OPEN);
- put_string (command, filename);
- g_data_output_stream_put_uint32 (command, SSH_FXF_READ, NULL, NULL); /* open flags */
- g_data_output_stream_put_uint32 (command, 0, NULL, NULL); /* Attr flags */
-
- queue_command_stream_and_free (op_backend, command, open_for_read_reply, G_VFS_JOB (job), NULL);
-
- return TRUE;
-}
-
-static void
-read_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- SftpHandle *handle;
- guint32 count;
-
- handle = user_data;
-
- if (reply_type == SSH_FXP_STATUS)
- {
- result_from_status (job, reply, -1, SSH_FX_EOF);
- return;
- }
-
- if (reply_type != SSH_FXP_DATA)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- return;
- }
-
- count = g_data_input_stream_read_uint32 (reply, NULL, NULL);
-
- if (!g_input_stream_read_all (G_INPUT_STREAM (reply),
- G_VFS_JOB_READ (job)->buffer, count,
- NULL, NULL, NULL))
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- return;
- }
-
- handle->offset += count;
-
- g_vfs_job_read_set_size (G_VFS_JOB_READ (job), count);
- g_vfs_job_succeeded (job);
-}
-
-static gboolean
-try_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle _handle,
- char *buffer,
- gsize bytes_requested)
-{
- SftpHandle *handle = _handle;
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend,
- SSH_FXP_READ);
- put_data_buffer (command, handle->raw_handle);
- g_data_output_stream_put_uint64 (command, handle->offset, NULL, NULL);
- g_data_output_stream_put_uint32 (command, bytes_requested, NULL, NULL);
-
- queue_command_stream_and_free (op_backend, command, read_reply, G_VFS_JOB (job), handle);
-
- return TRUE;
-}
-
-static void
-seek_read_fstat_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- SftpHandle *handle;
- GFileInfo *info;
- goffset file_size;
- GVfsJobSeekRead *op_job;
-
- handle = user_data;
-
- if (reply_type == SSH_FXP_STATUS)
- {
- result_from_status (job, reply, -1, -1);
- return;
- }
-
- if (reply_type != SSH_FXP_ATTRS)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- return;
- }
-
- info = g_file_info_new ();
- parse_attributes (backend, info, NULL,
- reply, NULL);
- file_size = g_file_info_get_size (info);
- g_object_unref (info);
-
- op_job = G_VFS_JOB_SEEK_READ (job);
-
- switch (op_job->seek_type)
- {
- case G_SEEK_CUR:
- handle->offset += op_job->requested_offset;
- break;
- case G_SEEK_SET:
- handle->offset = op_job->requested_offset;
- break;
- case G_SEEK_END:
- handle->offset = file_size + op_job->requested_offset;
- break;
- }
-
- if (handle->offset < 0)
- handle->offset = 0;
- if (handle->offset > file_size)
- handle->offset = file_size;
-
- g_vfs_job_seek_read_set_offset (op_job, handle->offset);
- g_vfs_job_succeeded (job);
-}
-
-static gboolean
-try_seek_on_read (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle _handle,
- goffset offset,
- GSeekType type)
-{
- SftpHandle *handle = _handle;
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend,
- SSH_FXP_FSTAT);
- put_data_buffer (command, handle->raw_handle);
-
- queue_command_stream_and_free (op_backend, command, seek_read_fstat_reply, G_VFS_JOB (job), handle);
-
- return TRUE;
-}
-
-static void
-delete_temp_file (GVfsBackendSftp *backend,
- SftpHandle *handle,
- GVfsJob *job)
-{
- GDataOutputStream *command;
-
- if (handle->tempname)
- {
- command = new_command_stream (backend,
- SSH_FXP_REMOVE);
- put_string (command, handle->tempname);
- queue_command_stream_and_free (backend, command, NULL, job, NULL);
- }
-}
-
-static void
-close_moved_tempfile (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- SftpHandle *handle;
-
- handle = user_data;
-
- if (reply_type == SSH_FXP_STATUS)
- result_from_status (job, reply, -1, -1);
- else
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-
- /* On failure, don't remove tempfile, since we removed the new original file */
- sftp_handle_free (handle);
-}
-
-static void
-close_restore_permissions (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- GDataOutputStream *command;
- SftpHandle *handle;
-
- handle = user_data;
-
- /* Here we don't really care whether or not setting the permissions succeeded
- or not. We just take the last step and rename the temp file to the
- actual file */
- command = new_command_stream (backend,
- SSH_FXP_RENAME);
- put_string (command, handle->tempname);
- put_string (command, handle->filename);
- queue_command_stream_and_free (backend, command, close_moved_tempfile, G_VFS_JOB (job), handle);
-}
-
-static void
-close_deleted_file (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- GDataOutputStream *command;
- GError *error;
- gboolean res;
- SftpHandle *handle;
-
- handle = user_data;
-
- error = NULL;
- res = FALSE;
- if (reply_type == SSH_FXP_STATUS)
- res = error_from_status (job, reply, -1, -1, &error);
- else
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-
- if (res)
- {
- /* Removed original file, now first try to restore permissions */
- command = new_command_stream (backend,
- SSH_FXP_SETSTAT);
- put_string (command, handle->tempname);
- g_data_output_stream_put_uint32 (command, SSH_FILEXFER_ATTR_PERMISSIONS, NULL, NULL);
- g_data_output_stream_put_uint32 (command, handle->permissions, NULL, NULL);
- queue_command_stream_and_free (backend, command, close_restore_permissions, G_VFS_JOB (job), handle);
- }
- else
- {
- /* The delete failed, remove any temporary files */
- delete_temp_file (backend,
- handle,
- G_VFS_JOB (job));
-
- g_vfs_job_failed_from_error (job, error);
- g_error_free (error);
- sftp_handle_free (handle);
- }
-}
-
-static void
-close_moved_file (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- GDataOutputStream *command;
- GError *error;
- gboolean res;
- SftpHandle *handle;
-
- handle = user_data;
-
- error = NULL;
- res = FALSE;
- if (reply_type == SSH_FXP_STATUS)
- res = error_from_status (job, reply, -1, -1, &error);
- else
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-
- if (res)
- {
- /* moved original file to backup, now move new file in place */
-
- command = new_command_stream (backend,
- SSH_FXP_RENAME);
- put_string (command, handle->tempname);
- put_string (command, handle->filename);
- queue_command_stream_and_free (backend, command, close_moved_tempfile, G_VFS_JOB (job), handle);
- }
- else
- {
- /* Move original file to backup name failed, remove any temporary files */
- delete_temp_file (backend,
- handle,
- G_VFS_JOB (job));
-
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_CANT_CREATE_BACKUP,
- _("Error creating backup file: %s"), error->message);
- g_error_free (error);
- sftp_handle_free (handle);
- }
-}
-
-static void
-close_deleted_backup (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- SftpHandle *handle;
- GDataOutputStream *command;
- char *backup_name;
-
- /* Ignore result here, if it failed we'll just get a new error when moving over it
- * This is simpler than ignoring NOEXIST errors
- */
-
- handle = user_data;
-
- command = new_command_stream (backend,
- SSH_FXP_RENAME);
- backup_name = g_strconcat (handle->filename, "~", NULL);
- put_string (command, handle->filename);
- put_string (command, backup_name);
- g_free (backup_name);
- queue_command_stream_and_free (backend, command, close_moved_file, G_VFS_JOB (job), handle);
-}
-
-static void
-close_write_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- GDataOutputStream *command;
- GError *error;
- gboolean res;
- char *backup_name;
- SftpHandle *handle;
-
- handle = user_data;
-
- error = NULL;
- res = FALSE;
- if (reply_type == SSH_FXP_STATUS)
- res = error_from_status (job, reply, -1, -1, &error);
- else
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-
- if (res)
- {
- if (handle->tempname)
- {
- if (handle->make_backup)
- {
- command = new_command_stream (backend,
- SSH_FXP_REMOVE);
- backup_name = g_strconcat (handle->filename, "~", NULL);
- put_string (command, backup_name);
- g_free (backup_name);
- queue_command_stream_and_free (backend, command, close_deleted_backup, G_VFS_JOB (job), handle);
- }
- else
- {
- command = new_command_stream (backend,
- SSH_FXP_REMOVE);
- put_string (command, handle->filename);
- queue_command_stream_and_free (backend, command, close_deleted_file, G_VFS_JOB (job), handle);
- }
- }
- else
- {
- g_vfs_job_succeeded (job);
- sftp_handle_free (handle);
- }
- }
- else
- {
- /* The close failed, remove any temporary files */
- delete_temp_file (backend,
- handle,
- G_VFS_JOB (job));
-
- g_vfs_job_failed_from_error (job, error);
- g_error_free (error);
-
- sftp_handle_free (handle);
- }
-}
-
-static void
-close_write_fstat_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- SftpHandle *handle = user_data;
- GDataOutputStream *command;
- GFileInfo *info;
- const char *etag;
-
- if (reply_type == SSH_FXP_ATTRS)
- {
- info = g_file_info_new ();
- parse_attributes (backend, info, NULL,
- reply, NULL);
- etag = g_file_info_get_etag (info);
- if (etag)
- g_vfs_job_close_write_set_etag (G_VFS_JOB_CLOSE_WRITE (job), etag);
- g_object_unref (info);
- }
-
- command = new_command_stream (backend, SSH_FXP_CLOSE);
- put_data_buffer (command, handle->raw_handle);
-
- queue_command_stream_and_free (backend, command, close_write_reply, G_VFS_JOB (job), handle);
-}
-
-static gboolean
-try_close_write (GVfsBackend *backend,
- GVfsJobCloseWrite *job,
- GVfsBackendHandle _handle)
-{
- SftpHandle *handle = _handle;
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend, SSH_FXP_FSTAT);
- put_data_buffer (command, handle->raw_handle);
-
- queue_command_stream_and_free (op_backend, command, close_write_fstat_reply, G_VFS_JOB (job), handle);
-
- return TRUE;
-}
-
-
-static void
-close_read_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- SftpHandle *handle;
-
- handle = user_data;
-
- if (reply_type == SSH_FXP_STATUS)
- result_from_status (job, reply, -1, -1);
- else
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- sftp_handle_free (handle);
-}
-
-static gboolean
-try_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle _handle)
-{
- SftpHandle *handle = _handle;
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend, SSH_FXP_CLOSE);
- put_data_buffer (command, handle->raw_handle);
-
- queue_command_stream_and_free (op_backend, command, close_read_reply, G_VFS_JOB (job), handle);
-
- return TRUE;
-}
-
-static void
-create_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- SftpHandle *handle;
-
- if (reply_type == SSH_FXP_STATUS)
- {
- result_from_status (job, reply, G_IO_ERROR_EXISTS, -1);
- return;
- }
-
- if (reply_type != SSH_FXP_HANDLE)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- return;
- }
-
- handle = sftp_handle_new (reply);
-
- g_vfs_job_open_for_write_set_handle (G_VFS_JOB_OPEN_FOR_WRITE (job), handle);
- g_vfs_job_open_for_write_set_can_seek (G_VFS_JOB_OPEN_FOR_WRITE (job), TRUE);
- g_vfs_job_succeeded (job);
-}
-
-static gboolean
-try_create (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend,
- SSH_FXP_OPEN);
- put_string (command, filename);
- g_data_output_stream_put_uint32 (command, SSH_FXF_WRITE|SSH_FXF_CREAT|SSH_FXF_EXCL, NULL, NULL); /* open flags */
- g_data_output_stream_put_uint32 (command, 0, NULL, NULL); /* Attr flags */
-
- queue_command_stream_and_free (op_backend, command, create_reply, G_VFS_JOB (job), NULL);
-
- return TRUE;
-}
-
-static void
-append_to_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- SftpHandle *handle;
-
- if (reply_type == SSH_FXP_STATUS)
- {
- result_from_status (job, reply, -1, -1);
- return;
- }
-
- if (reply_type != SSH_FXP_HANDLE)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- return;
- }
-
- handle = sftp_handle_new (reply);
-
- g_vfs_job_open_for_write_set_handle (G_VFS_JOB_OPEN_FOR_WRITE (job), handle);
- g_vfs_job_open_for_write_set_can_seek (G_VFS_JOB_OPEN_FOR_WRITE (job), FALSE);
- g_vfs_job_succeeded (job);
-}
-
-static gboolean
-try_append_to (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend,
- SSH_FXP_OPEN);
- put_string (command, filename);
- g_data_output_stream_put_uint32 (command, SSH_FXF_WRITE|SSH_FXF_CREAT|SSH_FXF_APPEND, NULL, NULL); /* open flags */
- g_data_output_stream_put_uint32 (command, 0, NULL, NULL); /* Attr flags */
-
- queue_command_stream_and_free (op_backend, command, append_to_reply, G_VFS_JOB (job), NULL);
-
- return TRUE;
-}
-
-typedef struct {
- guint32 permissions;
- char *tempname;
- int temp_count;
-} ReplaceData;
-
-static void
-replace_data_free (ReplaceData *data)
-{
- g_free (data->tempname);
- g_slice_free (ReplaceData, data);
-}
-
-static void replace_create_temp (GVfsBackendSftp *backend,
- GVfsJobOpenForWrite *job);
-
-static void
-replace_create_temp_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- GVfsJobOpenForWrite *op_job;
- SftpHandle *handle;
- ReplaceData *data;
- GError *error;
-
- op_job = G_VFS_JOB_OPEN_FOR_WRITE (job);
- data = G_VFS_JOB (job)->backend_data;
-
- if (reply_type == SSH_FXP_STATUS)
- {
- error = NULL;
- if (error_from_status (job, reply, G_IO_ERROR_EXISTS, -1, &error))
- /* Open should not return OK */
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- else if (error->code == G_IO_ERROR_EXISTS)
- {
- /* It was *probably* the EXCL flag failing. I wish we had
- an actual real error code for that, grumble */
- g_error_free (error);
-
- replace_create_temp (backend, op_job);
- }
- else
- {
- g_vfs_job_failed_from_error (job, error);
- g_error_free (error);
- }
- return;
- }
-
- if (reply_type != SSH_FXP_HANDLE)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- return;
- }
-
- handle = sftp_handle_new (reply);
- handle->filename = g_strdup (op_job->filename);
- handle->tempname = g_strdup (data->tempname);
- handle->permissions = data->permissions;
- handle->make_backup = op_job->make_backup;
-
- g_vfs_job_open_for_write_set_handle (op_job, handle);
- g_vfs_job_open_for_write_set_can_seek (op_job, TRUE);
-
- g_vfs_job_succeeded (job);
-}
-
-static void
-random_text (char *s)
-{
- static const char letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- static const int NLETTERS = sizeof (letters) - 1;
- static int counter = 0;
-
- GTimeVal tv;
- glong value;
-
- /* Get some more or less random data. */
- g_get_current_time (&tv);
- value = (tv.tv_usec ^ tv.tv_sec) + counter++;
-
- /* Fill in the random bits. */
- s[0] = letters[value % NLETTERS];
- value /= NLETTERS;
- s[1] = letters[value % NLETTERS];
- value /= NLETTERS;
- s[2] = letters[value % NLETTERS];
- value /= NLETTERS;
- s[3] = letters[value % NLETTERS];
- value /= NLETTERS;
- s[4] = letters[value % NLETTERS];
- value /= NLETTERS;
- s[5] = letters[value % NLETTERS];
-}
-
-static void
-replace_create_temp (GVfsBackendSftp *backend,
- GVfsJobOpenForWrite *job)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
- char *dirname;
- ReplaceData *data;
- char basename[] = ".giosaveXXXXXX";
-
- data = G_VFS_JOB (job)->backend_data;
-
- data->temp_count++;
-
- if (data->temp_count == 100)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Unable to create temporary file"));
- return;
- }
-
- g_free (data->tempname);
-
- dirname = g_path_get_dirname (job->filename);
- random_text (basename + 8);
- data->tempname = g_build_filename (dirname, basename, NULL);
- g_free (dirname);
-
- command = new_command_stream (op_backend,
- SSH_FXP_OPEN);
- put_string (command, data->tempname);
- g_data_output_stream_put_uint32 (command, SSH_FXF_WRITE|SSH_FXF_CREAT|SSH_FXF_EXCL, NULL, NULL); /* open flags */
- g_data_output_stream_put_uint32 (command, SSH_FILEXFER_ATTR_PERMISSIONS, NULL, NULL); /* Attr flags */
- g_data_output_stream_put_uint32 (command, data->permissions, NULL, NULL);
- queue_command_stream_and_free (op_backend, command, replace_create_temp_reply, G_VFS_JOB (job), NULL);
-}
-
-static void
-replace_stat_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- GFileInfo *info;
- GVfsJobOpenForWrite *op_job;
- const char *current_etag;
- guint32 permissions;
- ReplaceData *data;
-
- op_job = G_VFS_JOB_OPEN_FOR_WRITE (job);
-
- permissions = 0644;
-
- if (reply_type == SSH_FXP_ATTRS)
- {
- info = g_file_info_new ();
- parse_attributes (backend, info, NULL,
- reply, NULL);
-
- if (op_job->etag != NULL)
- {
- current_etag = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_ETAG_VALUE);
-
- if (current_etag == NULL ||
- strcmp (op_job->etag, current_etag) != 0)
- {
- g_vfs_job_failed (job,
- G_IO_ERROR, G_IO_ERROR_WRONG_ETAG,
- _("The file was externally modified"));
- g_object_unref (info);
- return;
- }
- }
-
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_UNIX_MODE))
- permissions = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE) & 0777;
- }
-
- data = g_slice_new0 (ReplaceData);
- data->permissions = permissions;
- g_vfs_job_set_backend_data (job, data, (GDestroyNotify)replace_data_free);
-
- replace_create_temp (backend, op_job);
-}
-
-static void
-replace_exclusive_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- GVfsJobOpenForWrite *op_job;
- GDataOutputStream *command;
- SftpHandle *handle;
- GError *error;
-
- op_job = G_VFS_JOB_OPEN_FOR_WRITE (job);
- if (reply_type == SSH_FXP_STATUS)
- {
- error = NULL;
- if (error_from_status (job, reply, G_IO_ERROR_EXISTS, -1, &error))
- /* Open should not return OK */
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- else if (error->code == G_IO_ERROR_EXISTS)
- {
- /* It was *probably* the EXCL flag failing. I wish we had
- an actual real error code for that, grumble */
- g_error_free (error);
-
- /* Replace existing file code: */
-
- command = new_command_stream (backend,
- SSH_FXP_STAT);
- put_string (command, op_job->filename);
- queue_command_stream_and_free (backend, command, replace_stat_reply, G_VFS_JOB (job), NULL);
- }
- else
- {
- g_vfs_job_failed_from_error (job, error);
- g_error_free (error);
- }
- return;
- }
-
- if (reply_type != SSH_FXP_HANDLE)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- return;
- }
-
- handle = sftp_handle_new (reply);
-
- g_vfs_job_open_for_write_set_handle (op_job, handle);
- g_vfs_job_open_for_write_set_can_seek (op_job, TRUE);
-
- g_vfs_job_succeeded (job);
-}
-
-static gboolean
-try_replace (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- const char *etag,
- gboolean make_backup,
- GFileCreateFlags flags)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend,
- SSH_FXP_OPEN);
- put_string (command, filename);
- g_data_output_stream_put_uint32 (command, SSH_FXF_WRITE|SSH_FXF_CREAT|SSH_FXF_EXCL, NULL, NULL); /* open flags */
- g_data_output_stream_put_uint32 (command, 0, NULL, NULL); /* Attr flags */
-
- queue_command_stream_and_free (op_backend, command, replace_exclusive_reply, G_VFS_JOB (job), NULL);
-
- return TRUE;
-}
-
-static void
-write_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- SftpHandle *handle;
-
- handle = user_data;
-
- if (reply_type == SSH_FXP_STATUS)
- {
- if (result_from_status (job, reply, -1, -1))
- {
- handle->offset += G_VFS_JOB_WRITE (job)->data_size;
- }
- }
- else
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-}
-
-static gboolean
-try_write (GVfsBackend *backend,
- GVfsJobWrite *job,
- GVfsBackendHandle _handle,
- char *buffer,
- gsize buffer_size)
-{
- SftpHandle *handle = _handle;
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend,
- SSH_FXP_WRITE);
- put_data_buffer (command, handle->raw_handle);
- g_data_output_stream_put_uint64 (command, handle->offset, NULL, NULL);
- g_data_output_stream_put_uint32 (command, buffer_size, NULL, NULL);
- /* Ideally we shouldn't do this copy, but doing the writes as multiple writes
- caused problems on the read side in openssh */
- g_output_stream_write_all (G_OUTPUT_STREAM (command),
- buffer, buffer_size,
- NULL, NULL, NULL);
-
- queue_command_stream_and_free (op_backend, command, write_reply, G_VFS_JOB (job), handle);
-
- /* We always write the full size (on success) */
- g_vfs_job_write_set_written_size (job, buffer_size);
-
- return TRUE;
-}
-
-static void
-seek_write_fstat_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- SftpHandle *handle;
- GFileInfo *info;
- goffset file_size;
- GVfsJobSeekWrite *op_job;
-
- handle = user_data;
-
- if (reply_type == SSH_FXP_STATUS)
- {
- result_from_status (job, reply, -1, -1);
- return;
- }
-
- if (reply_type != SSH_FXP_ATTRS)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- return;
- }
-
- info = g_file_info_new ();
- parse_attributes (backend, info, NULL,
- reply, NULL);
- file_size = g_file_info_get_size (info);
- g_object_unref (info);
-
- op_job = G_VFS_JOB_SEEK_WRITE (job);
-
- switch (op_job->seek_type)
- {
- case G_SEEK_CUR:
- handle->offset += op_job->requested_offset;
- break;
- case G_SEEK_SET:
- handle->offset = op_job->requested_offset;
- break;
- case G_SEEK_END:
- handle->offset = file_size + op_job->requested_offset;
- break;
- }
-
- if (handle->offset < 0)
- handle->offset = 0;
- if (handle->offset > file_size)
- handle->offset = file_size;
-
- g_vfs_job_seek_write_set_offset (op_job, handle->offset);
- g_vfs_job_succeeded (job);
-}
-
-static gboolean
-try_seek_on_write (GVfsBackend *backend,
- GVfsJobSeekWrite *job,
- GVfsBackendHandle _handle,
- goffset offset,
- GSeekType type)
-{
- SftpHandle *handle = _handle;
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend,
- SSH_FXP_FSTAT);
- put_data_buffer (command, handle->raw_handle);
-
- queue_command_stream_and_free (op_backend, command, seek_write_fstat_reply, G_VFS_JOB (job), handle);
-
- return TRUE;
-}
-
-typedef struct {
- DataBuffer *handle;
- int outstanding_requests;
-} ReadDirData;
-
-static
-void
-read_dir_data_free (ReadDirData *data)
-{
- data_buffer_free (data->handle);
- g_slice_free (ReadDirData, data);
-}
-
-static void
-read_dir_readlink_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- ReadDirData *data;
- GFileInfo *info = user_data;
- char *target;
-
- data = job->backend_data;
-
- if (reply_type == SSH_FXP_NAME)
- {
- /* count = */ (void) g_data_input_stream_read_uint32 (reply, NULL, NULL);
-
- target = read_string (reply, NULL);
- if (target)
- {
- g_file_info_set_symlink_target (info, target);
- g_free (target);
- }
- }
-
- g_vfs_job_enumerate_add_info (G_VFS_JOB_ENUMERATE (job), info);
- g_object_unref (info);
-
- if (--data->outstanding_requests == 0)
- g_vfs_job_enumerate_done (G_VFS_JOB_ENUMERATE (job));
-}
-
-static void
-read_dir_got_stat_info (GVfsBackendSftp *backend,
- GVfsJob *job,
- GFileInfo *info)
-{
- GVfsJobEnumerate *enum_job;
- GDataOutputStream *command;
- ReadDirData *data;
- char *abs_name;
-
- data = job->backend_data;
-
- enum_job = G_VFS_JOB_ENUMERATE (job);
-
- if (g_file_attribute_matcher_matches (enum_job->attribute_matcher,
- G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET))
- {
- data->outstanding_requests++;
- command = new_command_stream (backend,
- SSH_FXP_READLINK);
- abs_name = g_build_filename (enum_job->filename, g_file_info_get_name (info), NULL);
- put_string (command, abs_name);
- g_free (abs_name);
- queue_command_stream_and_free (backend, command, read_dir_readlink_reply, G_VFS_JOB (job), g_object_ref (info));
- }
- else
- g_vfs_job_enumerate_add_info (enum_job, info);
-}
-
-
-static void
-read_dir_symlink_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- const char *name;
- GFileInfo *info;
- GFileInfo *lstat_info;
- ReadDirData *data;
-
- lstat_info = user_data;
- name = g_file_info_get_name (lstat_info);
- data = job->backend_data;
-
- if (reply_type == SSH_FXP_ATTRS)
- {
- info = g_file_info_new ();
- g_file_info_set_name (info, name);
- g_file_info_set_is_symlink (info, TRUE);
-
- parse_attributes (backend, info, name, reply, G_VFS_JOB_ENUMERATE (job)->attribute_matcher);
-
- read_dir_got_stat_info (backend, job, info);
-
- g_object_unref (info);
- }
- else
- read_dir_got_stat_info (backend, job, lstat_info);
-
- g_object_unref (lstat_info);
-
- if (--data->outstanding_requests == 0)
- g_vfs_job_enumerate_done (G_VFS_JOB_ENUMERATE (job));
-}
-
-static void
-read_dir_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- GVfsJobEnumerate *enum_job;
- guint32 count;
- int i;
- GDataOutputStream *command;
- ReadDirData *data;
-
- data = job->backend_data;
- enum_job = G_VFS_JOB_ENUMERATE (job);
-
- if (reply_type != SSH_FXP_NAME)
- {
- /* Ignore all error, including the expected END OF FILE.
- * Real errors are expected in open_dir anyway */
-
- /* Close handle */
-
- command = new_command_stream (backend,
- SSH_FXP_CLOSE);
- put_data_buffer (command, data->handle);
- queue_command_stream_and_free (backend, command, NULL, G_VFS_JOB (job), NULL);
-
- if (--data->outstanding_requests == 0)
- g_vfs_job_enumerate_done (enum_job);
-
- return;
- }
-
- count = g_data_input_stream_read_uint32 (reply, NULL, NULL);
- for (i = 0; i < count; i++)
- {
- GFileInfo *info;
- char *name;
- char *longname;
- char *abs_name;
-
- info = g_file_info_new ();
- name = read_string (reply, NULL);
- g_file_info_set_name (info, name);
-
- longname = read_string (reply, NULL);
- g_free (longname);
-
- parse_attributes (backend, info, name, reply, enum_job->attribute_matcher);
-
- if (g_file_info_get_file_type (info) == G_FILE_TYPE_SYMBOLIC_LINK &&
- ! (enum_job->flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS))
- {
- /* Default (at least for openssh) is for readdir to not follow symlinks.
- This was a symlink, and follow links was requested, so we need to manually follow it */
- command = new_command_stream (backend,
- SSH_FXP_STAT);
- abs_name = g_build_filename (enum_job->filename, name, NULL);
- put_string (command, abs_name);
- g_free (abs_name);
-
- queue_command_stream_and_free (backend, command, read_dir_symlink_reply, G_VFS_JOB (job), g_object_ref (info));
- data->outstanding_requests ++;
- }
- else if (strcmp (".", name) != 0 &&
- strcmp ("..", name) != 0)
- read_dir_got_stat_info (backend, job, info);
-
- g_object_unref (info);
- g_free (name);
- }
-
- command = new_command_stream (backend,
- SSH_FXP_READDIR);
- put_data_buffer (command, data->handle);
- queue_command_stream_and_free (backend, command, read_dir_reply, G_VFS_JOB (job), NULL);
-}
-
-static void
-open_dir_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
- ReadDirData *data;
-
- data = job->backend_data;
-
- if (reply_type == SSH_FXP_STATUS)
- {
- result_from_status (job, reply, -1, -1);
- return;
- }
-
- if (reply_type != SSH_FXP_HANDLE)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- return;
- }
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- data->handle = read_data_buffer (reply);
-
- command = new_command_stream (op_backend,
- SSH_FXP_READDIR);
- put_data_buffer (command, data->handle);
-
- data->outstanding_requests = 1;
-
- queue_command_stream_and_free (op_backend, command, read_dir_reply, G_VFS_JOB (job), NULL);
-}
-
-static gboolean
-try_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *attribute_matcher,
- GFileQueryInfoFlags flags)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
- ReadDirData *data;
-
- data = g_slice_new0 (ReadDirData);
-
- g_vfs_job_set_backend_data (G_VFS_JOB (job), data, (GDestroyNotify)read_dir_data_free);
- command = new_command_stream (op_backend,
- SSH_FXP_OPENDIR);
- put_string (command, filename);
-
- queue_command_stream_and_free (op_backend, command, open_dir_reply, G_VFS_JOB (job), NULL);
-
- return TRUE;
-}
-
-static void
-query_info_reply (GVfsBackendSftp *backend,
- MultiReply *replies,
- int n_replies,
- GVfsJob *job,
- gpointer user_data)
-{
- char *basename;
- int i;
- MultiReply *lstat_reply, *reply;
- GFileInfo *lstat_info;
- GVfsJobQueryInfo *op_job;
-
- op_job = G_VFS_JOB_QUERY_INFO (job);
-
- i = 0;
- lstat_reply = &replies[i++];
-
- if (lstat_reply->type == SSH_FXP_STATUS)
- {
- result_from_status (job, lstat_reply->data, -1, -1);
- return;
- }
- else if (lstat_reply->type != SSH_FXP_ATTRS)
- {
- g_vfs_job_failed (job,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- "%s", _("Invalid reply received"));
- return;
- }
-
- basename = NULL;
- if (strcmp (op_job->filename, "/") != 0)
- basename = g_path_get_basename (op_job->filename);
-
- if (op_job->flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS)
- {
- parse_attributes (backend, op_job->file_info, basename,
- lstat_reply->data, op_job->attribute_matcher);
- }
- else
- {
- /* Look at stat results */
- reply = &replies[i++];
-
- if (reply->type == SSH_FXP_ATTRS)
- {
- parse_attributes (backend, op_job->file_info, basename,
- reply->data, op_job->attribute_matcher);
-
-
- lstat_info = g_file_info_new ();
- parse_attributes (backend, lstat_info, basename,
- lstat_reply->data, op_job->attribute_matcher);
- if (g_file_info_get_is_symlink (lstat_info))
- g_file_info_set_is_symlink (op_job->file_info, TRUE);
- g_object_unref (lstat_info);
- }
- else
- {
- /* Broken symlink, use lstat data */
- parse_attributes (backend, op_job->file_info, basename,
- lstat_reply->data, op_job->attribute_matcher);
- }
-
- }
-
- g_free (basename);
-
- if (g_file_attribute_matcher_matches (op_job->attribute_matcher,
- G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET))
- {
- /* Look at readlink results */
- reply = &replies[i++];
-
- if (reply->type == SSH_FXP_NAME)
- {
- char *symlink_target;
- guint32 count;
-
- count = g_data_input_stream_read_uint32 (reply->data, NULL, NULL);
- symlink_target = read_string (reply->data, NULL);
- g_file_info_set_symlink_target (op_job->file_info, symlink_target);
- g_free (symlink_target);
- }
- }
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static gboolean
-try_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *commands[3];
- GDataOutputStream *command;
- int n_commands;
-
- n_commands = 0;
-
- command = commands[n_commands++] =
- new_command_stream (op_backend,
- SSH_FXP_LSTAT);
- put_string (command, filename);
-
- if (! (job->flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS))
- {
- command = commands[n_commands++] =
- new_command_stream (op_backend,
- SSH_FXP_STAT);
- put_string (command, filename);
- }
-
- if (g_file_attribute_matcher_matches (job->attribute_matcher,
- G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET))
- {
- command = commands[n_commands++] =
- new_command_stream (op_backend,
- SSH_FXP_READLINK);
- put_string (command, filename);
- }
-
- queue_command_streams_and_free (op_backend, commands, n_commands, query_info_reply, G_VFS_JOB (job), NULL);
-
- return TRUE;
-}
-
-static void
-move_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- goffset *file_size;
-
- /* on any unknown error, return NOT_SUPPORTED to get the fallback implementation */
- if (reply_type == SSH_FXP_STATUS)
- {
- if (failure_from_status (job, reply, G_IO_ERROR_NOT_SUPPORTED, -1))
- {
- /* Succeeded, report file size */
- file_size = job->backend_data;
- if (file_size != NULL)
- g_vfs_job_move_progress_callback (*file_size, *file_size, job);
- g_vfs_job_succeeded (job);
- }
- }
- else
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-}
-
-static void
-move_do_rename (GVfsBackendSftp *backend,
- GVfsJob *job)
-{
- GVfsJobMove *op_job;
- GDataOutputStream *command;
-
- op_job = G_VFS_JOB_MOVE (job);
-
- command = new_command_stream (backend,
- SSH_FXP_RENAME);
- put_string (command, op_job->source);
- put_string (command, op_job->destination);
-
- queue_command_stream_and_free (backend, command, move_reply, G_VFS_JOB (job), NULL);
-}
-
-static void
-move_delete_target_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- if (reply_type == SSH_FXP_STATUS)
- {
- if (failure_from_status (job, reply, -1, -1))
- move_do_rename (backend, job);
- }
- else
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-}
-
-
-static void
-move_lstat_reply (GVfsBackendSftp *backend,
- MultiReply *replies,
- int n_replies,
- GVfsJob *job,
- gpointer user_data)
-{
- GVfsJobMove *op_job;
- gboolean destination_exist, source_is_dir, dest_is_dir;
- GDataOutputStream *command;
- GFileInfo *info;
- goffset *file_size;
-
- op_job = G_VFS_JOB_MOVE (job);
-
- if (replies[0].type == SSH_FXP_STATUS)
- {
- result_from_status (job, replies[0].data, -1, -1);
- return;
- }
- else if (replies[0].type != SSH_FXP_ATTRS)
- {
- g_vfs_job_failed (job,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- "%s", _("Invalid reply received"));
- return;
- }
-
- info = g_file_info_new ();
- parse_attributes (backend, info, NULL,
- replies[0].data, NULL);
- source_is_dir = g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY;
- file_size = g_new (goffset, 1);
- *file_size = g_file_info_get_size (info);
- g_vfs_job_set_backend_data (G_VFS_JOB (job), file_size, g_free);
- g_object_unref (info);
-
- destination_exist = FALSE;
- if (replies[1].type == SSH_FXP_ATTRS)
- {
- destination_exist = TRUE; /* Target file exists */
-
- info = g_file_info_new ();
- parse_attributes (backend, info, NULL,
- replies[1].data, NULL);
- dest_is_dir = g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY;
- g_object_unref (info);
-
- if (op_job->flags & G_FILE_COPY_OVERWRITE)
- {
-
- /* Always fail on dirs, even with overwrite */
- if (dest_is_dir)
- {
- if (source_is_dir)
- g_vfs_job_failed (job,
- G_IO_ERROR,
- G_IO_ERROR_WOULD_MERGE,
- _("Can't move directory over directory"));
- else
- g_vfs_job_failed (job,
- G_IO_ERROR,
- G_IO_ERROR_IS_DIRECTORY,
- _("File is directory"));
- return;
- }
- }
- else
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_EXISTS,
- _("Target file already exists"));
- return;
- }
- }
-
- /* TODO: Check flags & G_FILE_COPY_BACKUP */
-
- if (destination_exist && (op_job->flags & G_FILE_COPY_OVERWRITE))
- {
- command = new_command_stream (backend,
- SSH_FXP_REMOVE);
- put_string (command, op_job->destination);
- queue_command_stream_and_free (backend, command, move_delete_target_reply, G_VFS_JOB (job), NULL);
- return;
- }
-
- move_do_rename (backend, job);
-}
-
-
-static gboolean
-try_move (GVfsBackend *backend,
- GVfsJobMove *job,
- const char *source,
- const char *destination,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
- GDataOutputStream *commands[2];
-
- command = commands[0] =
- new_command_stream (op_backend,
- SSH_FXP_LSTAT);
- put_string (command, source);
-
- command = commands[1] =
- new_command_stream (op_backend,
- SSH_FXP_LSTAT);
- put_string (command, destination);
-
- queue_command_streams_and_free (op_backend, commands, 2, move_lstat_reply, G_VFS_JOB (job), NULL);
-
- return TRUE;
-}
-
-static void
-set_display_name_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- if (reply_type == SSH_FXP_STATUS)
- result_from_status (job, reply, -1, -1);
- else
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-}
-
-static gboolean
-try_set_display_name (GVfsBackend *backend,
- GVfsJobSetDisplayName *job,
- const char *filename,
- const char *display_name)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
- char *dirname, *basename, *new_name;
-
- /* We use the same setting as for local files. Can't really
- * do better, since there is no way in this version of sftp to find out
- * the remote charset encoding
- */
-
- dirname = g_path_get_dirname (filename);
- basename = g_filename_from_utf8 (display_name, -1, NULL, NULL, NULL);
- if (basename == NULL)
- basename = g_strdup (display_name);
- new_name = g_build_filename (dirname, basename, NULL);
- g_free (dirname);
- g_free (basename);
-
- g_vfs_job_set_display_name_set_new_path (job,
- new_name);
-
- command = new_command_stream (op_backend,
- SSH_FXP_RENAME);
- put_string (command, filename);
- put_string (command, new_name);
-
- queue_command_stream_and_free (op_backend, command, set_display_name_reply, G_VFS_JOB (job), NULL);
-
- g_free (new_name);
-
- return TRUE;
-}
-
-
-static void
-make_symlink_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- if (reply_type == SSH_FXP_STATUS)
- result_from_status (job, reply, -1, -1);
- else
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-}
-
-static gboolean
-try_make_symlink (GVfsBackend *backend,
- GVfsJobMakeSymlink *job,
- const char *filename,
- const char *symlink_value)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend,
- SSH_FXP_SYMLINK);
- put_string (command, filename);
- put_string (command, symlink_value);
-
- queue_command_stream_and_free (op_backend, command, make_symlink_reply, G_VFS_JOB (job), NULL);
-
- return TRUE;
-}
-
-static void
-make_directory_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- if (reply_type == SSH_FXP_STATUS)
- result_from_status (job, reply, -1, -1);
- else
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-}
-
-static gboolean
-try_make_directory (GVfsBackend *backend,
- GVfsJobMakeDirectory *job,
- const char *filename)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend,
- SSH_FXP_MKDIR);
- put_string (command, filename);
- /* No file info - flag 0 */
- g_data_output_stream_put_uint32 (command, 0, NULL, NULL);
-
- queue_command_stream_and_free (op_backend, command, make_directory_reply, G_VFS_JOB (job), NULL);
-
- return TRUE;
-}
-
-static void
-delete_remove_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- if (reply_type == SSH_FXP_STATUS)
- result_from_status (job, reply, -1, -1);
- else
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-}
-
-static void
-delete_rmdir_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- if (reply_type == SSH_FXP_STATUS)
- result_from_status (job, reply, G_IO_ERROR_NOT_EMPTY, -1);
- else
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-}
-
-static void
-delete_lstat_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- if (reply_type == SSH_FXP_STATUS)
- result_from_status (job, reply, -1, -1);
- else if (reply_type != SSH_FXP_ATTRS)
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
- else
- {
- GFileInfo *info;
- GDataOutputStream *command;
-
- info = g_file_info_new ();
- parse_attributes (backend, info, NULL, reply, NULL);
-
- if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
- {
- command = new_command_stream (backend,
- SSH_FXP_RMDIR);
- put_string (command, G_VFS_JOB_DELETE (job)->filename);
- queue_command_stream_and_free (backend, command, delete_rmdir_reply, G_VFS_JOB (job), NULL);
- }
- else
- {
- command = new_command_stream (backend,
- SSH_FXP_REMOVE);
- put_string (command, G_VFS_JOB_DELETE (job)->filename);
- queue_command_stream_and_free (backend, command, delete_remove_reply, G_VFS_JOB (job), NULL);
- }
-
- g_object_unref (info);
- }
-}
-
-static gboolean
-try_delete (GVfsBackend *backend,
- GVfsJobDelete *job,
- const char *filename)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- command = new_command_stream (op_backend,
- SSH_FXP_LSTAT);
- put_string (command, filename);
- queue_command_stream_and_free (op_backend, command, delete_lstat_reply, G_VFS_JOB (job), NULL);
-
- return TRUE;
-}
-
-static gboolean
-try_query_settable_attributes (GVfsBackend *backend,
- GVfsJobQueryAttributes *job,
- const char *filename)
-{
- GFileAttributeInfoList *list;
-
- list = g_file_attribute_info_list_new ();
-
- g_file_attribute_info_list_add (list,
- G_FILE_ATTRIBUTE_UNIX_MODE,
- G_FILE_ATTRIBUTE_TYPE_UINT32,
- G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE |
- G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED);
-
- g_vfs_job_query_attributes_set_list (job, list);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- g_file_attribute_info_list_unref (list);
-
- return TRUE;
-}
-
-static void
-set_attribute_reply (GVfsBackendSftp *backend,
- int reply_type,
- GDataInputStream *reply,
- guint32 len,
- GVfsJob *job,
- gpointer user_data)
-{
- if (reply_type == SSH_FXP_STATUS)
- result_from_status (job, reply, -1, -1);
- else
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid reply received"));
-}
-
-static gboolean
-try_set_attribute (GVfsBackend *backend,
- GVfsJobSetAttribute *job,
- const char *filename,
- const char *attribute,
- GFileAttributeType type,
- gpointer value_p,
- GFileQueryInfoFlags flags)
-{
- GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
- GDataOutputStream *command;
-
- if (strcmp (attribute, G_FILE_ATTRIBUTE_UNIX_MODE) != 0)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation unsupported"));
- return TRUE;
- }
-
- command = new_command_stream (op_backend,
- SSH_FXP_SETSTAT);
- put_string (command, filename);
- g_data_output_stream_put_uint32 (command, SSH_FILEXFER_ATTR_PERMISSIONS, NULL, NULL);
- g_data_output_stream_put_uint32 (command, (*(guint32 *)value_p) & 0777, NULL, NULL);
- queue_command_stream_and_free (op_backend, command, set_attribute_reply, G_VFS_JOB (job), NULL);
-
- return TRUE;
-}
-
-static void
-g_vfs_backend_sftp_class_init (GVfsBackendSftpClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- id_q = g_quark_from_static_string ("command-id");
-
- gobject_class->finalize = g_vfs_backend_sftp_finalize;
-
- backend_class->mount = do_mount;
- backend_class->try_mount = try_mount;
- backend_class->try_open_for_read = try_open_for_read;
- backend_class->try_read = try_read;
- backend_class->try_seek_on_read = try_seek_on_read;
- backend_class->try_close_read = try_close_read;
- backend_class->try_close_write = try_close_write;
- backend_class->try_query_info = try_query_info;
- backend_class->try_enumerate = try_enumerate;
- backend_class->try_create = try_create;
- backend_class->try_append_to = try_append_to;
- backend_class->try_replace = try_replace;
- backend_class->try_write = try_write;
- backend_class->try_seek_on_write = try_seek_on_write;
- backend_class->try_move = try_move;
- backend_class->try_make_symlink = try_make_symlink;
- backend_class->try_make_directory = try_make_directory;
- backend_class->try_delete = try_delete;
- backend_class->try_set_display_name = try_set_display_name;
- backend_class->try_query_settable_attributes = try_query_settable_attributes;
- backend_class->try_set_attribute = try_set_attribute;
-}
diff --git a/daemon/gvfsbackendsftp.h b/daemon/gvfsbackendsftp.h
deleted file mode 100644
index 7e40eba0..00000000
--- a/daemon/gvfsbackendsftp.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_SFTP_H__
-#define __G_VFS_BACKEND_SFTP_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_SFTP (g_vfs_backend_sftp_get_type ())
-#define G_VFS_BACKEND_SFTP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_SFTP, GVfsBackendSftp))
-#define G_VFS_BACKEND_SFTP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_SFTP, GVfsBackendSftpClass))
-#define G_VFS_IS_BACKEND_SFTP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_SFTP))
-#define G_VFS_IS_BACKEND_SFTP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_SFTP))
-#define G_VFS_BACKEND_SFTP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_SFTP, GVfsBackendSftpClass))
-
-typedef struct _GVfsBackendSftp GVfsBackendSftp;
-typedef struct _GVfsBackendSftpClass GVfsBackendSftpClass;
-
-struct _GVfsBackendSftpClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_sftp_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_SFTP_H__ */
diff --git a/daemon/gvfsbackendsmb.c b/daemon/gvfsbackendsmb.c
deleted file mode 100644
index 6eff57a9..00000000
--- a/daemon/gvfsbackendsmb.c
+++ /dev/null
@@ -1,1933 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include "gvfsbackendsmb.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobclosewrite.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobqueryfsinfo.h"
-#include "gvfsjobqueryattributes.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsdaemonprotocol.h"
-#include "gvfskeyring.h"
-
-#ifdef HAVE_GCONF
-#include <gconf/gconf-client.h>
-#endif
-
-/* We load a default workgroup from gconf */
-#define PATH_GCONF_GNOME_VFS_SMB_WORKGROUP "/system/smb/workgroup"
-
-#include <libsmbclient.h>
-#include "libsmb-compat.h"
-
-struct _GVfsBackendSmb
-{
- GVfsBackend parent_instance;
-
- char *server;
- char *share;
- char *user;
- char *domain;
-
- SMBCCTX *smb_context;
-
- char *last_user;
- char *last_domain;
- char *last_password;
-
- GMountSource *mount_source; /* Only used/set during mount */
- int mount_try;
- gboolean mount_try_again;
-
- gboolean password_in_keyring;
- GPasswordSave password_save;
-
- /* Cache */
- char *cached_server_name;
- char *cached_share_name;
- char *cached_domain;
- char *cached_username;
- SMBCSRV *cached_server;
-};
-
-static char *default_workgroup = NULL;
-
-G_DEFINE_TYPE (GVfsBackendSmb, g_vfs_backend_smb, G_VFS_TYPE_BACKEND)
-
-static void
-g_vfs_backend_smb_finalize (GObject *object)
-{
- GVfsBackendSmb *backend;
-
- backend = G_VFS_BACKEND_SMB (object);
-
- g_free (backend->share);
- g_free (backend->server);
- g_free (backend->user);
- g_free (backend->domain);
-
- if (G_OBJECT_CLASS (g_vfs_backend_smb_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_smb_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_smb_init (GVfsBackendSmb *backend)
-{
-}
-
-/**
- * Authentication callback function type (method that includes context)
- *
- * Type for the the authentication function called by the library to
- * obtain authentication credentals
- *
- * @param context Pointer to the smb context
- * @param srv Server being authenticated to
- * @param shr Share being authenticated to
- * @param wg Pointer to buffer containing a "hint" for the
- * workgroup to be authenticated. Should be filled in
- * with the correct workgroup if the hint is wrong.
- * @param wglen The size of the workgroup buffer in bytes
- * @param un Pointer to buffer containing a "hint" for the
- * user name to be use for authentication. Should be
- * filled in with the correct workgroup if the hint is
- * wrong.
- * @param unlen The size of the username buffer in bytes
- * @param pw Pointer to buffer containing to which password
- * copied
- * @param pwlen The size of the password buffer in bytes
- *
- */
-static void
-auth_callback (SMBCCTX *context,
- const char *server_name, const char *share_name,
- char *domain_out, int domainmaxlen,
- char *username_out, int unmaxlen,
- char *password_out, int pwmaxlen)
-{
- GVfsBackendSmb *backend;
- char *ask_password, *ask_user, *ask_domain;
- gboolean handled, abort;
-
- backend = smbc_getOptionUserData (context);
-
- strncpy (password_out, "", pwmaxlen);
-
- if (backend->domain)
- strncpy (domain_out, backend->domain, domainmaxlen);
- if (backend->user)
- strncpy (username_out, backend->user, unmaxlen);
-
- if (backend->mount_source == NULL)
- {
- /* Not during mount, use last password */
- if (backend->last_user)
- strncpy (username_out, backend->last_user, unmaxlen);
- if (backend->last_domain)
- strncpy (domain_out, backend->last_domain, domainmaxlen);
- if (backend->last_password)
- strncpy (password_out, backend->last_password, pwmaxlen);
-
- return;
- }
-
- if (backend->mount_try == 0 &&
- backend->user == NULL &&
- backend->domain == NULL)
- {
- /* Try anon login */
- strncpy (username_out, "", unmaxlen);
- strncpy (password_out, "", pwmaxlen);
- /* Try again if anon login fails */
- backend->mount_try_again = TRUE;
- }
- else
- {
- gboolean in_keyring = FALSE;
-
- if (!backend->password_in_keyring)
- {
- in_keyring = g_vfs_keyring_lookup_password (backend->user,
- backend->server,
- backend->domain,
- "smb",
- NULL,
- NULL,
- 0,
- &ask_user,
- &ask_domain,
- &ask_password);
- backend->password_in_keyring = in_keyring;
- }
-
- if (!in_keyring)
- {
- GAskPasswordFlags flags = G_ASK_PASSWORD_NEED_PASSWORD;
- char *message;
-
- if (g_vfs_keyring_is_available ())
- flags |= G_ASK_PASSWORD_SAVING_SUPPORTED;
- if (backend->domain == NULL)
- flags |= G_ASK_PASSWORD_NEED_DOMAIN;
- if (backend->user == NULL)
- flags |= G_ASK_PASSWORD_NEED_USERNAME;
-
- /* translators: First %s is a share name, second is a server name */
- message = g_strdup_printf (_("Password required for share %s on %s"),
- share_name, server_name);
- handled = g_mount_source_ask_password (backend->mount_source,
- message,
- username_out,
- domain_out,
- flags,
- &abort,
- &ask_password,
- &ask_user,
- &ask_domain,
- NULL,
- &(backend->password_save));
- g_free (message);
- if (!handled)
- goto out;
-
- if (abort)
- {
- strncpy (username_out, "ABORT", unmaxlen);
- strncpy (password_out, "", pwmaxlen);
- goto out;
- }
- }
-
- /* Try again if this fails */
- backend->mount_try_again = TRUE;
-
- strncpy (password_out, ask_password, pwmaxlen);
- if (ask_user && *ask_user)
- strncpy (username_out, ask_user, unmaxlen);
- if (ask_domain && *ask_domain)
- strncpy (domain_out, ask_domain, domainmaxlen);
-
- out:
- g_free (ask_password);
- g_free (ask_user);
- g_free (ask_domain);
- }
-
- backend->last_user = g_strdup (username_out);
- backend->last_domain = g_strdup (domain_out);
- backend->last_password = g_strdup (password_out);
-}
-
-/* Add a server to the cache system
- *
- * @param c pointer to smb context
- * @param srv pointer to server to add
- * @param server server name
- * @param share share name
- * @param workgroup workgroup used to connect
- * @param username username used to connect
- * @return 0 on success. 1 on failure.
- *
- */
-static int
-add_cached_server (SMBCCTX *context, SMBCSRV *new,
- const char *server_name, const char *share_name,
- const char *domain, const char *username)
-{
- GVfsBackendSmb *backend;
-
- backend = smbc_getOptionUserData (context);
-
- if (backend->cached_server != NULL)
- return 1;
-
- backend->cached_server_name = g_strdup (server_name);
- backend->cached_share_name = g_strdup (share_name);
- backend->cached_domain = g_strdup (domain);
- backend->cached_username = g_strdup (username);
- backend->cached_server = new;
-
- return 0;
-}
-
-/* Remove cached server
- *
- * @param c pointer to smb context
- * @param srv pointer to server to remove
- * @return 0 when found and removed. 1 on failure.
- *
- */
-static int
-remove_cached_server(SMBCCTX * context, SMBCSRV * server)
-{
- GVfsBackendSmb *backend;
-
- backend = smbc_getOptionUserData (context);
-
- if (backend->cached_server == server)
- {
- g_free (backend->cached_server_name);
- backend->cached_server_name = NULL;
- g_free (backend->cached_share_name);
- backend->cached_share_name = NULL;
- g_free (backend->cached_domain);
- backend->cached_domain = NULL;
- g_free (backend->cached_username);
- backend->cached_username = NULL;
- backend->cached_server = NULL;
- return 0;
- }
- return 1;
-}
-
-
-/* Look up a server in the cache system
- *
- * @param c pointer to smb context
- * @param server server name to match
- * @param share share name to match
- * @param workgroup workgroup to match
- * @param username username to match
- * @return pointer to SMBCSRV on success. NULL on failure.
- *
- */
-static SMBCSRV *
-get_cached_server (SMBCCTX * context,
- const char *server_name, const char *share_name,
- const char *domain, const char *username)
-{
- GVfsBackendSmb *backend;
-
- backend = smbc_getOptionUserData (context);
-
- if (backend->cached_server != NULL &&
- strcmp (backend->cached_server_name, server_name) == 0 &&
- strcmp (backend->cached_share_name, share_name) == 0 &&
- strcmp (backend->cached_domain, domain) == 0 &&
- strcmp (backend->cached_username, username) == 0)
- return backend->cached_server;
-
- return NULL;
-}
-
-/* Try to remove all servers from the cache system and disconnect
- *
- * @param c pointer to smb context
- *
- * @return 0 when found and removed. 1 on failure.
- *
- */
-static int
-purge_cached (SMBCCTX * context)
-{
- GVfsBackendSmb *backend;
-
- backend = smbc_getOptionUserData (context);
-
- if (backend->cached_server)
- remove_cached_server(context, backend->cached_server);
-
- return 0;
-}
-
-#define SUB_DELIM_CHARS "!$&'()*+,;="
-
-static gboolean
-is_valid (char c, const char *reserved_chars_allowed)
-{
- if (g_ascii_isalnum (c) ||
- c == '-' ||
- c == '.' ||
- c == '_' ||
- c == '~')
- return TRUE;
-
- if (reserved_chars_allowed &&
- strchr (reserved_chars_allowed, c) != NULL)
- return TRUE;
-
- return FALSE;
-}
-
-static void
-g_string_append_encoded (GString *string,
- const char *encoded,
- const char *reserved_chars_allowed)
-{
- char c;
- static const gchar hex[16] = "0123456789ABCDEF";
-
- while ((c = *encoded++) != 0)
- {
- if (is_valid (c, reserved_chars_allowed))
- g_string_append_c (string, c);
- else
- {
- g_string_append_c (string, '%');
- g_string_append_c (string, hex[((guchar)c) >> 4]);
- g_string_append_c (string, hex[((guchar)c) & 0xf]);
- }
- }
-}
-
-static GString *
-create_smb_uri_string (const char *server,
- const char *share,
- const char *path)
-{
- GString *uri;
-
- uri = g_string_new ("smb://");
- g_string_append_encoded (uri, server, NULL);
- g_string_append_c (uri, '/');
- g_string_append_encoded (uri, share, NULL);
- if (path != NULL)
- {
- if (*path != '/')
- g_string_append_c (uri, '/');
- g_string_append_encoded (uri, path, SUB_DELIM_CHARS ":@/");
- }
-
- while (uri->len > 0 &&
- uri->str[uri->len - 1] == '/')
- g_string_erase (uri, uri->len - 1, 1);
-
- return uri;
-}
-
-static char *
-create_smb_uri (const char *server,
- const char *share,
- const char *path)
-{
- GString *uri;
- uri = create_smb_uri_string (server, share, path);
- return g_string_free (uri, FALSE);
-}
-
-static void
-do_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- SMBCCTX *smb_context;
- struct stat st;
- char *uri;
- int res;
- char *display_name;
- const char *debug;
- int debug_val;
- GMountSpec *smb_mount_spec;
- smbc_stat_fn smbc_stat;
-
- smb_context = smbc_new_context ();
- if (smb_context == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Internal Error (%s)"), "Failed to allocate smb context");
- return;
- }
- smbc_setOptionUserData (smb_context, backend);
-
- debug = g_getenv ("GVFS_SMB_DEBUG");
- if (debug)
- debug_val = atoi (debug);
- else
- debug_val = 0;
-
- smbc_setDebug (smb_context, debug_val);
- smbc_setFunctionAuthDataWithContext (smb_context, auth_callback);
-
- smbc_setFunctionAddCachedServer (smb_context, add_cached_server);
- smbc_setFunctionGetCachedServer (smb_context, get_cached_server);
- smbc_setFunctionRemoveCachedServer (smb_context, remove_cached_server);
- smbc_setFunctionPurgeCachedServers (smb_context, purge_cached);
-
- /* FIXME: is strdup() still needed here? -- removed */
- if (default_workgroup != NULL)
- smbc_setWorkgroup (smb_context, default_workgroup);
-
-#ifndef DEPRECATED_SMBC_INTERFACE
- smb_context->flags = 0;
-#endif
-
- smbc_setOptionUseKerberos (smb_context, 1);
- smbc_setOptionFallbackAfterKerberos (smb_context, 1);
- smbc_setOptionNoAutoAnonymousLogin (smb_context, 1);
-
-
-#if 0
- smbc_setOptionDebugToStderr (smb_context, 1);
-#endif
-
- if (!smbc_init_context (smb_context))
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Internal Error (%s)"), "Failed to initialize smb context");
- smbc_free_context (smb_context, FALSE);
- return;
- }
-
- op_backend->smb_context = smb_context;
-
- /* Set the mountspec according to original uri, no matter whether user changes
- credentials during mount loop. Nautilus and other gio clients depend
- on correct mountspec, setting it to real (different) credentials would
- lead to G_IO_ERROR_NOT_MOUNTED errors
- */
-
- /* Translators: This is "<sharename> on <servername>" and is used as name for an SMB share */
- display_name = g_strdup_printf (_("%s on %s"), op_backend->share, op_backend->server);
- g_vfs_backend_set_display_name (backend, display_name);
- g_free (display_name);
- g_vfs_backend_set_icon_name (backend, "folder-remote");
-
- smb_mount_spec = g_mount_spec_new ("smb-share");
- g_mount_spec_set (smb_mount_spec, "share", op_backend->share);
- g_mount_spec_set (smb_mount_spec, "server", op_backend->server);
- if (op_backend->user)
- g_mount_spec_set (smb_mount_spec, "user", op_backend->user);
- if (op_backend->domain)
- g_mount_spec_set (smb_mount_spec, "domain", op_backend->domain);
-
- g_vfs_backend_set_mount_spec (backend, smb_mount_spec);
- g_mount_spec_unref (smb_mount_spec);
-
- uri = create_smb_uri (op_backend->server, op_backend->share, NULL);
-
- op_backend->mount_source = mount_source;
- op_backend->mount_try = 0;
- op_backend->password_save = G_PASSWORD_SAVE_NEVER;
-
- do
- {
- op_backend->mount_try_again = FALSE;
-
- smbc_stat = smbc_getFunctionStat (smb_context);
- res = smbc_stat (smb_context, uri, &st);
-
- if (res == 0 ||
- (errno != EACCES && errno != EPERM))
- break;
-
- op_backend->mount_try ++;
- }
- while (op_backend->mount_try_again);
-
- g_free (uri);
-
- op_backend->mount_source = NULL;
-
- if (res != 0)
- {
- /* TODO: Error from errno? */
- op_backend->mount_source = NULL;
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- /* translators: We tried to mount a windows (samba) share, but failed */
- _("Failed to mount Windows share"));
- return;
- }
-
- /* Mount was successful */
-
- g_vfs_keyring_save_password (op_backend->last_user,
- op_backend->server,
- op_backend->last_domain,
- "smb",
- NULL,
- NULL,
- 0,
- op_backend->last_password,
- op_backend->password_save);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- const char *server, *share, *user, *domain;
-
- server = g_mount_spec_get (mount_spec, "server");
- share = g_mount_spec_get (mount_spec, "share");
-
- if (server == NULL || share == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("Invalid mount spec"));
- return TRUE;
- }
-
- user = g_mount_spec_get (mount_spec, "user");
- domain = g_mount_spec_get (mount_spec, "domain");
-
- op_backend->server = g_strdup (server);
- op_backend->share = g_strdup (share);
- op_backend->user = g_strdup (user);
- op_backend->domain = g_strdup (domain);
-
- return FALSE;
-}
-
-static void
-do_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- char *uri;
- SMBCFILE *file;
- struct stat st;
- smbc_open_fn smbc_open;
- smbc_stat_fn smbc_stat;
- int res;
- int olderr;
-
-
- uri = create_smb_uri (op_backend->server, op_backend->share, filename);
- smbc_open = smbc_getFunctionOpen (op_backend->smb_context);
- file = smbc_open (op_backend->smb_context, uri, O_RDONLY, 0);
-
- if (file == NULL)
- {
- olderr = errno;
- smbc_stat = smbc_getFunctionStat (op_backend->smb_context);
- res = smbc_stat (op_backend->smb_context, uri, &st);
- g_free (uri);
- if ((res == 0) && (S_ISDIR (st.st_mode)))
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_IS_DIRECTORY,
- _("Can't open directory"));
- else
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), olderr);
- }
- else
- {
-
- g_vfs_job_open_for_read_set_can_seek (job, TRUE);
- g_vfs_job_open_for_read_set_handle (job, file);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-}
-
-static void
-do_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize bytes_requested)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- ssize_t res;
- smbc_read_fn smbc_read;
-
- /* For some reason requests of 65536 bytes broke for me (returned 0)
- * Maybe some smb protocol limit
- */
- if (bytes_requested > 65535)
- bytes_requested = 65535;
-
- smbc_read = smbc_getFunctionRead (op_backend->smb_context);
- res = smbc_read (op_backend->smb_context, (SMBCFILE *)handle, buffer, bytes_requested);
-
- if (res == -1)
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errno);
- else
- {
- g_vfs_job_read_set_size (job, res);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- }
-}
-
-static void
-do_seek_on_read (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle handle,
- goffset offset,
- GSeekType type)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- int whence;
- off_t res;
- smbc_lseek_fn smbc_lseek;
-
- switch (type)
- {
- case G_SEEK_SET:
- whence = SEEK_SET;
- break;
- case G_SEEK_CUR:
- whence = SEEK_CUR;
- break;
- case G_SEEK_END:
- whence = SEEK_END;
- break;
- default:
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Unsupported seek type"));
- return;
- }
-
- smbc_lseek = smbc_getFunctionLseek (op_backend->smb_context);
- res = smbc_lseek (op_backend->smb_context, (SMBCFILE *)handle, offset, whence);
-
- if (res == (off_t)-1)
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errno);
- else
- {
- g_vfs_job_seek_read_set_offset (job, res);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-
- return;
-}
-
-static void
-do_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle handle)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- ssize_t res;
- smbc_close_fn smbc_close;
-
- smbc_close = smbc_getFunctionClose (op_backend->smb_context);
- res = smbc_close (op_backend->smb_context, (SMBCFILE *)handle);
- if (res == -1)
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errno);
- else
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-typedef struct {
- SMBCFILE *file;
- char *uri;
- char *tmp_uri;
- char *backup_uri;
-} SmbWriteHandle;
-
-static void
-smb_write_handle_free (SmbWriteHandle *handle)
-{
- g_free (handle->uri);
- g_free (handle->tmp_uri);
- g_free (handle->backup_uri);
- g_free (handle);
-}
-
-static void
-do_create (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- char *uri;
- SMBCFILE *file;
- SmbWriteHandle *handle;
- smbc_open_fn smbc_open;
-
- uri = create_smb_uri (op_backend->server, op_backend->share, filename);
- smbc_open = smbc_getFunctionOpen (op_backend->smb_context);
- file = smbc_open (op_backend->smb_context, uri,
- O_CREAT|O_WRONLY|O_EXCL, 0666);
- g_free (uri);
-
- if (file == NULL)
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errno);
- else
- {
- handle = g_new0 (SmbWriteHandle, 1);
- handle->file = file;
-
- g_vfs_job_open_for_write_set_can_seek (job, TRUE);
- g_vfs_job_open_for_write_set_handle (job, handle);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-}
-
-static void
-do_append_to (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- char *uri;
- SMBCFILE *file;
- SmbWriteHandle *handle;
- off_t initial_offset;
- smbc_open_fn smbc_open;
- smbc_lseek_fn smbc_lseek;
-
- uri = create_smb_uri (op_backend->server, op_backend->share, filename);
- smbc_open = smbc_getFunctionOpen (op_backend->smb_context);
- file = smbc_open (op_backend->smb_context, uri,
- O_CREAT|O_WRONLY|O_APPEND, 0666);
- g_free (uri);
-
- if (file == NULL)
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errno);
- else
- {
- handle = g_new0 (SmbWriteHandle, 1);
- handle->file = file;
-
- smbc_lseek = smbc_getFunctionLseek (op_backend->smb_context);
- initial_offset = smbc_lseek (op_backend->smb_context, file,
- 0, SEEK_CUR);
- if (initial_offset == (off_t) -1)
- g_vfs_job_open_for_write_set_can_seek (job, FALSE);
- else
- {
- g_vfs_job_open_for_write_set_initial_offset (job, initial_offset);
- g_vfs_job_open_for_write_set_can_seek (job, TRUE);
- }
- g_vfs_job_open_for_write_set_handle (job, handle);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-}
-
-
-static void
-random_chars (char *str, int len)
-{
- int i;
- const char chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-
- for (i = 0; i < len; i++)
- str[i] = chars[g_random_int_range (0, strlen(chars))];
-}
-
-static char *
-get_dir_from_uri (const char *uri)
-{
- const char *prefix_end;
-
- prefix_end = uri + strlen (uri);
-
- /* Skip slashes at end */
- while (prefix_end > uri &&
- *(prefix_end - 1) == '/')
- prefix_end--;
-
- /* Skip to next slash */
- while (prefix_end > uri &&
- *(prefix_end - 1) != '/')
- prefix_end--;
-
- return g_strndup (uri, prefix_end - uri);
-}
-
-static SMBCFILE *
-open_tmpfile (GVfsBackendSmb *backend,
- const char *uri,
- char **tmp_uri_out)
-{
- char *dir_uri, *tmp_uri;
- char filename[] = "~gvfXXXX.tmp";
- SMBCFILE *file;
- smbc_open_fn smbc_open;
-
- dir_uri = get_dir_from_uri (uri);
-
- do {
- random_chars (filename + 4, 4);
- tmp_uri = g_strconcat (dir_uri, filename, NULL);
-
- smbc_open = smbc_getFunctionOpen (backend->smb_context);
- file = smbc_open (backend->smb_context, tmp_uri,
- O_CREAT|O_WRONLY|O_EXCL, 0666);
- } while (file == NULL && errno == EEXIST);
-
- g_free (dir_uri);
-
- if (file)
- {
- *tmp_uri_out = tmp_uri;
- return file;
- }
- else
- {
- g_free (tmp_uri);
- return NULL;
- }
-}
-
-static gboolean
-copy_file (GVfsBackendSmb *backend,
- GVfsJob *job,
- const char *from_uri,
- const char *to_uri)
-{
- SMBCFILE *from_file, *to_file;
- char buffer[4096];
- size_t buffer_size;
- ssize_t res;
- char *p;
- gboolean succeeded;
- smbc_open_fn smbc_open;
- smbc_read_fn smbc_read;
- smbc_write_fn smbc_write;
- smbc_close_fn smbc_close;
-
-
- from_file = NULL;
- to_file = NULL;
-
- succeeded = FALSE;
-
- smbc_open = smbc_getFunctionOpen (backend->smb_context);
- smbc_read = smbc_getFunctionRead (backend->smb_context);
- smbc_write = smbc_getFunctionWrite (backend->smb_context);
- smbc_close = smbc_getFunctionClose (backend->smb_context);
-
- from_file = smbc_open (backend->smb_context, from_uri,
- O_RDONLY, 0666);
- if (from_file == NULL || g_vfs_job_is_cancelled (job))
- goto out;
-
- to_file = smbc_open (backend->smb_context, to_uri,
- O_CREAT|O_WRONLY|O_TRUNC, 0666);
-
- if (from_file == NULL || g_vfs_job_is_cancelled (job))
- goto out;
-
- while (1)
- {
-
- res = smbc_read (backend->smb_context, from_file,
- buffer, sizeof(buffer));
- if (res < 0 || g_vfs_job_is_cancelled (job))
- goto out;
- if (res == 0)
- break; /* Succeeded */
-
- buffer_size = res;
- p = buffer;
- while (buffer_size > 0)
- {
- res = smbc_write (backend->smb_context, to_file,
- p, buffer_size);
- if (res < 0 || g_vfs_job_is_cancelled (job))
- goto out;
- buffer_size -= res;
- p += res;
- }
- }
- succeeded = TRUE;
-
- out:
- if (to_file)
- smbc_close (backend->smb_context, to_file);
- if (from_file)
- smbc_close (backend->smb_context, from_file);
- return succeeded;
-}
-
-static char *
-create_etag (struct stat *statbuf)
-{
- return g_strdup_printf ("%lu", (long unsigned int)statbuf->st_mtime);
-}
-
-static void
-do_replace (GVfsBackend *backend,
- GVfsJobOpenForWrite *job,
- const char *filename,
- const char *etag,
- gboolean make_backup,
- GFileCreateFlags flags)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- struct stat original_stat;
- int res;
- char *uri, *tmp_uri, *backup_uri, *current_etag;
- SMBCFILE *file;
- GError *error = NULL;
- SmbWriteHandle *handle;
- smbc_open_fn smbc_open;
- smbc_stat_fn smbc_stat;
-
- uri = create_smb_uri (op_backend->server, op_backend->share, filename);
- tmp_uri = NULL;
- if (make_backup)
- backup_uri = g_strconcat (uri, "~", NULL);
- else
- backup_uri = NULL;
-
- smbc_open = smbc_getFunctionOpen (op_backend->smb_context);
- smbc_stat = smbc_getFunctionStat (op_backend->smb_context);
-
- file = smbc_open (op_backend->smb_context, uri,
- O_CREAT|O_WRONLY|O_EXCL, 0);
- if (file == NULL && errno != EEXIST)
- {
- int errsv = errno;
-
- g_set_error_literal (&error, G_IO_ERROR,
- g_io_error_from_errno (errsv),
- g_strerror (errsv));
- goto error;
- }
- else if (file == NULL && errno == EEXIST)
- {
- if (etag != NULL)
- {
- res = smbc_stat (op_backend->smb_context, uri, &original_stat);
-
- if (res == 0)
- {
- current_etag = create_etag (&original_stat);
- if (strcmp (etag, current_etag) != 0)
- {
- g_free (current_etag);
- g_set_error_literal (&error,
- G_IO_ERROR,
- G_IO_ERROR_WRONG_ETAG,
- _("The file was externally modified"));
- goto error;
- }
- g_free (current_etag);
- }
- }
-
- /* Backup strategy:
- *
- * By default we:
- * 1) save to a tmp file (that doesn't exist already)
- * 2) rename orig file to backup file
- * (or delete it if no backup)
- * 3) rename tmp file to orig file
- *
- * However, this can fail if we can't write to the directory.
- * In that case we just truncate the file, after having
- * copied directly to the backup filename.
- */
-
- file = open_tmpfile (op_backend, uri, &tmp_uri);
- if (file == NULL)
- {
- if (make_backup)
- {
- if (!copy_file (op_backend, G_VFS_JOB (job), uri, backup_uri))
- {
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- g_set_error_literal (&error,
- G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- else
- g_set_error_literal (&error,
- G_IO_ERROR,
- G_IO_ERROR_CANT_CREATE_BACKUP,
- _("Backup file creation failed"));
- goto error;
- }
- g_free (backup_uri);
- backup_uri = NULL;
- }
-
- file = smbc_open (op_backend->smb_context, uri,
- O_CREAT|O_WRONLY|O_TRUNC, 0);
- if (file == NULL)
- {
- int errsv = errno;
-
- g_set_error_literal (&error, G_IO_ERROR,
- g_io_error_from_errno (errsv),
- g_strerror (errsv));
- goto error;
- }
- }
- }
- else
- {
- /* Doesn't exist. Just write away */
- g_free (backup_uri);
- backup_uri = NULL;
- }
-
- handle = g_new (SmbWriteHandle, 1);
- handle->file = file;
- handle->uri = uri;
- handle->tmp_uri = tmp_uri;
- handle->backup_uri = backup_uri;
-
- g_vfs_job_open_for_write_set_can_seek (job, TRUE);
- g_vfs_job_open_for_write_set_handle (job, handle);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- return;
-
- error:
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- g_free (backup_uri);
- g_free (tmp_uri);
- g_free (uri);
-}
-
-
-static void
-do_write (GVfsBackend *backend,
- GVfsJobWrite *job,
- GVfsBackendHandle _handle,
- char *buffer,
- gsize buffer_size)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- SmbWriteHandle *handle = _handle;
- ssize_t res;
- smbc_write_fn smbc_write;
-
- smbc_write = smbc_getFunctionWrite (op_backend->smb_context);
- res = smbc_write (op_backend->smb_context, handle->file,
- buffer, buffer_size);
- if (res == -1)
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errno);
- else
- {
- g_vfs_job_write_set_written_size (job, res);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-}
-
-static void
-do_seek_on_write (GVfsBackend *backend,
- GVfsJobSeekWrite *job,
- GVfsBackendHandle _handle,
- goffset offset,
- GSeekType type)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- SmbWriteHandle *handle = _handle;
- int whence;
- off_t res;
- smbc_lseek_fn smbc_lseek;
-
- switch (type)
- {
- case G_SEEK_SET:
- whence = SEEK_SET;
- break;
- case G_SEEK_CUR:
- whence = SEEK_CUR;
- break;
- case G_SEEK_END:
- whence = SEEK_END;
- break;
- default:
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Unsupported seek type"));
- return;
- }
-
- smbc_lseek = smbc_getFunctionLseek (op_backend->smb_context);
- res = smbc_lseek (op_backend->smb_context, handle->file, offset, whence);
-
- if (res == (off_t)-1)
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errno);
- else
- {
- g_vfs_job_seek_write_set_offset (job, res);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-
- return;
-}
-
-static void
-do_close_write (GVfsBackend *backend,
- GVfsJobCloseWrite *job,
- GVfsBackendHandle _handle)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- SmbWriteHandle *handle = _handle;
- struct stat stat_at_close;
- int stat_res;
- ssize_t res;
- smbc_fstat_fn smbc_fstat;
- smbc_close_fn smbc_close;
- smbc_unlink_fn smbc_unlink;
- smbc_rename_fn smbc_rename;
-
- smbc_fstat = smbc_getFunctionFstat (op_backend->smb_context);
- smbc_close = smbc_getFunctionClose (op_backend->smb_context);
- smbc_unlink = smbc_getFunctionUnlink (op_backend->smb_context);
- smbc_rename = smbc_getFunctionRename (op_backend->smb_context);
-
- stat_res = smbc_fstat (op_backend->smb_context, handle->file, &stat_at_close);
-
- res = smbc_close (op_backend->smb_context, handle->file);
-
- if (res == -1)
- {
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errno);
-
- if (handle->tmp_uri)
- smbc_unlink (op_backend->smb_context, handle->tmp_uri);
- goto out;
- }
-
- if (handle->tmp_uri)
- {
- if (handle->backup_uri)
- {
- res = smbc_rename (op_backend->smb_context, handle->uri,
- op_backend->smb_context, handle->backup_uri);
- if (res == -1)
- {
- int errsv = errno;
-
- smbc_unlink (op_backend->smb_context, handle->tmp_uri);
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_CANT_CREATE_BACKUP,
- _("Backup file creation failed: %s"), g_strerror (errsv));
- goto out;
- }
- }
- else
- smbc_unlink (op_backend->smb_context, handle->uri);
-
- res = smbc_rename (op_backend->smb_context, handle->tmp_uri,
- op_backend->smb_context, handle->uri);
- if (res == -1)
- {
- smbc_unlink (op_backend->smb_context, handle->tmp_uri);
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errno);
- goto out;
- }
- }
-
- if (stat_res == 0)
- {
- char *etag;
- etag = create_etag (&stat_at_close);
- g_vfs_job_close_write_set_etag (job, etag);
- g_free (etag);
- }
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- out:
- smb_write_handle_free (handle);
-}
-
-static void
-set_info_from_stat (GVfsBackendSmb *backend,
- GFileInfo *info,
- struct stat *statbuf,
- const char *basename,
- GFileAttributeMatcher *matcher)
-{
- GFileType file_type;
- GTimeVal t;
- GIcon *icon;
- char *content_type;
- char *display_name;
-
- if (basename)
- {
- g_file_info_set_name (info, basename);
- if (*basename == '.')
- g_file_info_set_is_hidden (info, TRUE);
- }
-
-
- if (basename != NULL &&
- g_file_attribute_matcher_matches (matcher,
- G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME))
- {
- if (strcmp (basename, "/") == 0)
- display_name = g_strdup_printf (_("%s on %s"), backend->share, backend->server);
- else
- display_name = g_filename_display_name (basename);
-
- if (strstr (display_name, "\357\277\275") != NULL)
- {
- char *p = display_name;
- display_name = g_strconcat (display_name, _(" (invalid encoding)"), NULL);
- g_free (p);
- }
- g_file_info_set_display_name (info, display_name);
- g_free (display_name);
- }
-
- if (basename != NULL &&
- g_file_attribute_matcher_matches (matcher,
- G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME))
- {
- char *edit_name = g_filename_display_name (basename);
- g_file_info_set_edit_name (info, edit_name);
- g_free (edit_name);
- }
-
-
- file_type = G_FILE_TYPE_UNKNOWN;
-
- if (S_ISREG (statbuf->st_mode))
- file_type = G_FILE_TYPE_REGULAR;
- else if (S_ISDIR (statbuf->st_mode))
- file_type = G_FILE_TYPE_DIRECTORY;
- else if (S_ISCHR (statbuf->st_mode) ||
- S_ISBLK (statbuf->st_mode) ||
- S_ISFIFO (statbuf->st_mode)
-#ifdef S_ISSOCK
- || S_ISSOCK (statbuf->st_mode)
-#endif
- )
- file_type = G_FILE_TYPE_SPECIAL;
- else if (S_ISLNK (statbuf->st_mode))
- file_type = G_FILE_TYPE_SYMBOLIC_LINK;
-
- g_file_info_set_file_type (info, file_type);
- g_file_info_set_size (info, statbuf->st_size);
-
- t.tv_sec = statbuf->st_mtime;
-#if defined (HAVE_STRUCT_STAT_ST_MTIMENSEC)
- t.tv_usec = statbuf->st_mtimensec / 1000;
-#elif defined (HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC)
- t.tv_usec = statbuf->st_mtim.tv_nsec / 1000;
-#else
- t.tv_usec = 0;
-#endif
- g_file_info_set_modification_time (info, &t);
-
-
- if (g_file_attribute_matcher_matches (matcher,
- G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE) ||
- g_file_attribute_matcher_matches (matcher,
- G_FILE_ATTRIBUTE_STANDARD_ICON))
- {
- icon = NULL;
- if (S_ISDIR(statbuf->st_mode))
- {
- content_type = g_strdup ("inode/directory");
- if (strcmp (basename, "/") == 0)
- icon = g_themed_icon_new ("folder-remote");
- else
- icon = g_themed_icon_new ("folder");
- }
- else
- {
- content_type = g_content_type_guess (basename, NULL, 0, NULL);
-
- if (content_type)
- {
- icon = g_content_type_get_icon (content_type);
- if (G_IS_THEMED_ICON (icon))
- g_themed_icon_append_name (G_THEMED_ICON (icon), "text-x-generic");
- }
- }
-
- if (content_type)
- {
- g_file_info_set_content_type (info, content_type);
- g_free (content_type);
- }
-
- if (icon == NULL)
- icon = g_themed_icon_new ("text-x-generic");
-
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- }
-
- /* Don't trust n_link, uid, gid, etc returned from libsmb, its just made up.
- These are ok though: */
-
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_DEVICE, statbuf->st_dev);
- g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_UNIX_INODE, statbuf->st_ino);
-
- /* If file is dos-readonly, libsmbclient doesn't set S_IWUSR, we use this to
- trigger ACCESS_WRITE = FALSE: */
- if (!(statbuf->st_mode & S_IWUSR))
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
-
- g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS, statbuf->st_atime);
-#if defined (HAVE_STRUCT_STAT_ST_ATIMENSEC)
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_ACCESS_USEC, statbuf->st_atimensec / 1000);
-#elif defined (HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC)
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_ACCESS_USEC, statbuf->st_atim.tv_nsec / 1000);
-#endif
- g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_CHANGED, statbuf->st_ctime);
-#if defined (HAVE_STRUCT_STAT_ST_CTIMENSEC)
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_CHANGED_USEC, statbuf->st_ctimensec / 1000);
-#elif defined (HAVE_STRUCT_STAT_ST_CTIM_TV_NSEC)
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_CHANGED_USEC, statbuf->st_ctim.tv_nsec / 1000);
-#endif
-
- /* Libsmb sets the X bit on files to indicate some special things: */
- if ((statbuf->st_mode & S_IFDIR) == 0) {
-
- if (statbuf->st_mode & S_IXOTH)
- g_file_info_set_is_hidden (info, TRUE);
-
- if (statbuf->st_mode & S_IXUSR)
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE, TRUE);
-
- if (statbuf->st_mode & S_IXGRP)
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_DOS_IS_SYSTEM, TRUE);
- }
-
- if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_ETAG_VALUE))
- {
- char *etag = create_etag (statbuf);
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_ETAG_VALUE, etag);
- g_free (etag);
- }
-}
-
-static void
-do_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- struct stat st = {0};
- char *uri;
- int res, saved_errno;
- char *basename;
- smbc_stat_fn smbc_stat;
-
- uri = create_smb_uri (op_backend->server, op_backend->share, filename);
- smbc_stat = smbc_getFunctionStat (op_backend->smb_context);
- res = smbc_stat (op_backend->smb_context, uri, &st);
- saved_errno = errno;
- g_free (uri);
-
- if (res == 0)
- {
- basename = g_path_get_basename (filename);
- set_info_from_stat (op_backend, info, &st, basename, matcher);
- g_free (basename);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), saved_errno);
-
-}
-
-static void
-do_query_fs_info (GVfsBackend *backend,
- GVfsJobQueryFsInfo *job,
- const char *filename,
- GFileInfo *info,
- GFileAttributeMatcher *attribute_matcher)
-{
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE, "cifs");
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-
-static gboolean
-try_query_settable_attributes (GVfsBackend *backend,
- GVfsJobQueryAttributes *job,
- const char *filename)
-{
- GFileAttributeInfoList *list;
-
- list = g_file_attribute_info_list_new ();
-
- /* TODO: Add all settable attributes here */
- /*
- g_file_attribute_info_list_add (list,
- "smb:test",
- G_FILE_ATTRIBUTE_TYPE_UINT32);
- */
-
- g_vfs_job_query_attributes_set_list (job, list);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- g_file_attribute_info_list_unref (list);
- return TRUE;
-}
-
-static void
-do_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *matcher,
- GFileQueryInfoFlags flags)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- struct stat st;
- int res;
- GError *error;
- SMBCFILE *dir;
- char dirents[1024*4];
- struct smbc_dirent *dirp;
- GList *files;
- GFileInfo *info;
- GString *uri;
- int uri_start_len;
- smbc_opendir_fn smbc_opendir;
- smbc_getdents_fn smbc_getdents;
- smbc_stat_fn smbc_stat;
- smbc_closedir_fn smbc_closedir;
-
- uri = create_smb_uri_string (op_backend->server, op_backend->share, filename);
-
- smbc_opendir = smbc_getFunctionOpendir (op_backend->smb_context);
- smbc_getdents = smbc_getFunctionGetdents (op_backend->smb_context);
- smbc_stat = smbc_getFunctionStat (op_backend->smb_context);
- smbc_closedir = smbc_getFunctionClosedir (op_backend->smb_context);
-
- dir = smbc_opendir (op_backend->smb_context, uri->str);
-
- if (dir == NULL)
- {
- int errsv = errno;
-
- error = NULL;
- g_set_error_literal (&error, G_IO_ERROR,
- g_io_error_from_errno (errsv),
- g_strerror (errsv));
- goto error;
- }
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- if (uri->str[uri->len - 1] != '/')
- g_string_append_c (uri, '/');
- uri_start_len = uri->len;
-
- while (TRUE)
- {
- files = NULL;
-
- res = smbc_getdents (op_backend->smb_context, dir, (struct smbc_dirent *)dirents, sizeof (dirents));
- if (res <= 0)
- break;
-
- dirp = (struct smbc_dirent *)dirents;
- while (res > 0)
- {
- unsigned int dirlen;
-
- /* TODO: Only do stat if required for flags */
-
- if ((dirp->smbc_type == SMBC_DIR ||
- dirp->smbc_type == SMBC_FILE ||
- dirp->smbc_type == SMBC_LINK) &&
- strcmp (dirp->name, ".") != 0 &&
- strcmp (dirp->name, "..") != 0)
- {
- int stat_res;
- g_string_truncate (uri, uri_start_len);
- g_string_append_encoded (uri,
- dirp->name,
- SUB_DELIM_CHARS ":@/");
-
- if (matcher == NULL ||
- g_file_attribute_matcher_matches_only (matcher, G_FILE_ATTRIBUTE_STANDARD_NAME))
- {
- info = g_file_info_new ();
- g_file_info_set_name (info, dirp->name);
- files = g_list_prepend (files, info);
- }
- else
- {
- stat_res = smbc_stat (op_backend->smb_context,
- uri->str, &st);
- if (stat_res == 0)
- {
- info = g_file_info_new ();
- set_info_from_stat (op_backend, info, &st, dirp->name, matcher);
- files = g_list_prepend (files, info);
- }
- }
- }
-
- dirlen = dirp->dirlen;
- dirp = (struct smbc_dirent *) (((char *)dirp) + dirlen);
- res -= dirlen;
- }
-
- if (files)
- {
- files = g_list_reverse (files);
- g_vfs_job_enumerate_add_infos (job, files);
- g_list_foreach (files, (GFunc)g_object_unref, NULL);
- g_list_free (files);
- }
- }
-
- res = smbc_closedir (op_backend->smb_context, dir);
-
- g_vfs_job_enumerate_done (job);
-
- g_string_free (uri, TRUE);
- return;
-
- error:
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- g_string_free (uri, TRUE);
-}
-
-static void
-do_set_display_name (GVfsBackend *backend,
- GVfsJobSetDisplayName *job,
- const char *filename,
- const char *display_name)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- char *from_uri, *to_uri;
- char *dirname, *new_path;
- int res, errsv;
- smbc_rename_fn smbc_rename;
-
- dirname = g_path_get_dirname (filename);
-
- /* TODO: display name is in utf8, atm we assume libsmb uris
- are in utf8, but this might not be true if the user changed
- the smb.conf file. Can we check this and convert? */
-
- new_path = g_build_filename (dirname, display_name, NULL);
- g_free (dirname);
-
- from_uri = create_smb_uri (op_backend->server, op_backend->share, filename);
- to_uri = create_smb_uri (op_backend->server, op_backend->share, new_path);
-
- smbc_rename = smbc_getFunctionRename (op_backend->smb_context);
- res = smbc_rename (op_backend->smb_context, from_uri,
- op_backend->smb_context, to_uri);
- errsv = errno;
- g_free (from_uri);
- g_free (to_uri);
-
- if (res != 0)
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errsv);
- else
- {
- g_vfs_job_set_display_name_set_new_path (job, new_path);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- g_free (new_path);
-}
-
-static void
-do_delete (GVfsBackend *backend,
- GVfsJobDelete *job,
- const char *filename)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- struct stat statbuf;
- char *uri;
- int errsv, res;
- smbc_stat_fn smbc_stat;
- smbc_rmdir_fn smbc_rmdir;
- smbc_unlink_fn smbc_unlink;
-
-
- uri = create_smb_uri (op_backend->server, op_backend->share, filename);
-
- smbc_stat = smbc_getFunctionStat (op_backend->smb_context);
- smbc_rmdir = smbc_getFunctionRmdir (op_backend->smb_context);
- smbc_unlink = smbc_getFunctionUnlink (op_backend->smb_context);
-
- res = smbc_stat (op_backend->smb_context, uri, &statbuf);
- if (res == -1)
- {
- errsv = errno;
-
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- g_io_error_from_errno (errsv),
- _("Error deleting file: %s"),
- g_strerror (errsv));
- g_free (uri);
- return;
- }
-
- if (S_ISDIR (statbuf.st_mode))
- res = smbc_rmdir (op_backend->smb_context, uri);
- else
- res = smbc_unlink (op_backend->smb_context, uri);
- errsv = errno;
- g_free (uri);
-
- if (res != 0)
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errsv);
- else
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static void
-do_make_directory (GVfsBackend *backend,
- GVfsJobMakeDirectory *job,
- const char *filename)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- char *uri;
- int errsv, res;
- smbc_mkdir_fn smbc_mkdir;
-
- uri = create_smb_uri (op_backend->server, op_backend->share, filename);
- smbc_mkdir = smbc_getFunctionMkdir (op_backend->smb_context);
- res = smbc_mkdir (op_backend->smb_context, uri, 0666);
- errsv = errno;
- g_free (uri);
-
- if (res != 0)
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errsv);
- else
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static void
-do_move (GVfsBackend *backend,
- GVfsJobMove *job,
- const char *source,
- const char *destination,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data)
-{
- GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
- char *source_uri, *dest_uri, *backup_uri;
- gboolean destination_exist, source_is_dir;
- struct stat statbuf;
- int res, errsv;
- smbc_stat_fn smbc_stat;
- smbc_rename_fn smbc_rename;
- smbc_unlink_fn smbc_unlink;
-
-
- source_uri = create_smb_uri (op_backend->server, op_backend->share, source);
-
- smbc_stat = smbc_getFunctionStat (op_backend->smb_context);
- smbc_rename = smbc_getFunctionRename (op_backend->smb_context);
- smbc_unlink = smbc_getFunctionUnlink (op_backend->smb_context);
-
- res = smbc_stat (op_backend->smb_context, source_uri, &statbuf);
- if (res == -1)
- {
- errsv = errno;
-
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- g_io_error_from_errno (errsv),
- _("Error moving file: %s"),
- g_strerror (errsv));
- g_free (source_uri);
- return;
- }
- else
- source_is_dir = S_ISDIR (statbuf.st_mode);
-
- dest_uri = create_smb_uri (op_backend->server, op_backend->share, destination);
-
- destination_exist = FALSE;
- res = smbc_stat (op_backend->smb_context, dest_uri, &statbuf);
- if (res == 0)
- {
- destination_exist = TRUE; /* Target file exists */
-
- if (flags & G_FILE_COPY_OVERWRITE)
- {
- /* Always fail on dirs, even with overwrite */
- if (S_ISDIR (statbuf.st_mode))
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_WOULD_MERGE,
- _("Can't move directory over directory"));
- g_free (source_uri);
- g_free (dest_uri);
- return;
- }
- }
- else
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_EXISTS,
- _("Target file already exists"));
- g_free (source_uri);
- g_free (dest_uri);
- return;
- }
- }
-
- if (flags & G_FILE_COPY_BACKUP && destination_exist)
- {
- backup_uri = g_strconcat (dest_uri, "~", NULL);
- res = smbc_rename (op_backend->smb_context, dest_uri,
- op_backend->smb_context, backup_uri);
- if (res == -1)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_CANT_CREATE_BACKUP,
- _("Backup file creation failed"));
- g_free (source_uri);
- g_free (dest_uri);
- g_free (backup_uri);
- return;
- }
- g_free (backup_uri);
- destination_exist = FALSE; /* It did, but no more */
- }
-
- if (source_is_dir && destination_exist && (flags & G_FILE_COPY_OVERWRITE))
- {
- /* Source is a dir, destination exists (and is not a dir, because that would have failed
- earlier), and we're overwriting. Manually remove the target so we can do the rename. */
- res = smbc_unlink (op_backend->smb_context, dest_uri);
- errsv = errno;
- if (res == -1)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- g_io_error_from_errno (errsv),
- _("Error removing target file: %s"),
- g_strerror (errsv));
- g_free (source_uri);
- g_free (dest_uri);
- return;
- }
- }
-
-
- res = smbc_rename (op_backend->smb_context, source_uri,
- op_backend->smb_context, dest_uri);
- errsv = errno;
- g_free (source_uri);
- g_free (dest_uri);
-
- /* Catch moves across device boundaries */
- if (res != 0)
- {
- if (errsv == EXDEV ||
- /* Unfortunately libsmbclient doesn't correctly return EXDEV, but falls back
- to EINVAL, so we try to guess when this happens: */
- (errsv == EINVAL && source_is_dir))
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_WOULD_RECURSE,
- _("Can't recursively move directory"));
- else
- g_vfs_job_failed_from_errno (G_VFS_JOB (job), errsv);
- }
- else
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static void
-g_vfs_backend_smb_class_init (GVfsBackendSmbClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-#ifdef HAVE_GCONF
- GConfClient *gclient;
-#endif
-
- gobject_class->finalize = g_vfs_backend_smb_finalize;
-
- backend_class->mount = do_mount;
- backend_class->try_mount = try_mount;
- backend_class->open_for_read = do_open_for_read;
- backend_class->read = do_read;
- backend_class->seek_on_read = do_seek_on_read;
- backend_class->close_read = do_close_read;
- backend_class->create = do_create;
- backend_class->append_to = do_append_to;
- backend_class->replace = do_replace;
- backend_class->write = do_write;
- backend_class->seek_on_write = do_seek_on_write;
- backend_class->close_write = do_close_write;
- backend_class->query_info = do_query_info;
- backend_class->query_fs_info = do_query_fs_info;
- backend_class->enumerate = do_enumerate;
- backend_class->set_display_name = do_set_display_name;
- backend_class->delete = do_delete;
- backend_class->make_directory = do_make_directory;
- backend_class->move = do_move;
- backend_class->try_query_settable_attributes = try_query_settable_attributes;
-
-#ifdef HAVE_GCONF
- gclient = gconf_client_get_default ();
- if (gclient)
- {
- char *workgroup;
-
- workgroup = gconf_client_get_string (gclient,
- PATH_GCONF_GNOME_VFS_SMB_WORKGROUP, NULL);
-
- if (workgroup && workgroup[0])
- default_workgroup = workgroup;
- else
- g_free (workgroup);
-
- g_object_unref (gclient);
- }
-#endif
-
-}
-
-void
-g_vfs_smb_daemon_init (void)
-{
- g_set_application_name (_("Windows Shares Filesystem Service"));
-}
diff --git a/daemon/gvfsbackendsmb.h b/daemon/gvfsbackendsmb.h
deleted file mode 100644
index 5f1a52b7..00000000
--- a/daemon/gvfsbackendsmb.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_SMB_H__
-#define __G_VFS_BACKEND_SMB_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_SMB (g_vfs_backend_smb_get_type ())
-#define G_VFS_BACKEND_SMB(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_SMB, GVfsBackendSmb))
-#define G_VFS_BACKEND_SMB_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_SMB, GVfsBackendSmbClass))
-#define G_VFS_IS_BACKEND_SMB(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_SMB))
-#define G_VFS_IS_BACKEND_SMB_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_SMB))
-#define G_VFS_BACKEND_SMB_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_SMB, GVfsBackendSmbClass))
-
-typedef struct _GVfsBackendSmb GVfsBackendSmb;
-typedef struct _GVfsBackendSmbClass GVfsBackendSmbClass;
-
-struct _GVfsBackendSmbClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_smb_get_type (void) G_GNUC_CONST;
-
-#define BACKEND_SETUP_FUNC g_vfs_smb_daemon_init
-void g_vfs_smb_daemon_init (void);
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_SMB_H__ */
diff --git a/daemon/gvfsbackendsmbbrowse.c b/daemon/gvfsbackendsmbbrowse.c
deleted file mode 100644
index 3ae0c87e..00000000
--- a/daemon/gvfsbackendsmbbrowse.c
+++ /dev/null
@@ -1,1225 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include "gvfsbackendsmbbrowse.h"
-#include "gvfsjobmountmountable.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsdaemonprotocol.h"
-#include "gmounttracker.h"
-
-#include <libsmbclient.h>
-#include "libsmb-compat.h"
-
-#ifdef HAVE_GCONF
-#include <gconf/gconf-client.h>
-#endif
-
-/* We load a default workgroup from gconf */
-#define PATH_GCONF_GNOME_VFS_SMB_WORKGROUP "/system/smb/workgroup"
-
-/* The magic "default workgroup" hostname */
-#define DEFAULT_WORKGROUP_NAME "X-GNOME-DEFAULT-WORKGROUP"
-
-typedef struct {
- unsigned int smbc_type;
- char *name;
- char *name_normalized;
- char *name_utf8;
- char *comment;
-} BrowseEntry;
-
-struct _GVfsBackendSmbBrowse
-{
- GVfsBackend parent_instance;
-
- char *user;
- char *domain;
- char *server;
- char *mounted_server; /* server or DEFAULT_WORKGROUP_NAME */
- SMBCCTX *smb_context;
-
- GMutex *entries_lock;
- time_t last_entry_update;
- GList *entries;
- int entry_errno;
-};
-
-static char *default_workgroup = NULL;
-
-static GHashTable *server_cache = NULL;
-static GMountTracker *mount_tracker = NULL;
-
-typedef struct {
- char *server_name;
- char *share_name;
- char *domain;
- char *username;
-} CachedServer;
-
-G_DEFINE_TYPE (GVfsBackendSmbBrowse, g_vfs_backend_smb_browse, G_VFS_TYPE_BACKEND)
-
-static char *
-normalize_smb_name_helper (const char *name, gssize len, gboolean valid_utf8)
-{
- if (valid_utf8)
- return g_utf8_casefold (name, len);
- else
- return g_ascii_strdown (name, len);
-}
-
-static char *
-normalize_smb_name (const char *name, gssize len)
-{
- gboolean valid_utf8;
-
- valid_utf8 = g_utf8_validate (name, len, NULL);
- return normalize_smb_name_helper (name, len, valid_utf8);
-}
-
-static char *
-smb_name_to_utf8 (const char *name, gboolean *valid_utf8_out)
-{
- GString *string;
- const gchar *remainder, *invalid;
- gint remaining_bytes, valid_bytes;
- gboolean valid_utf8;
-
- remainder = name;
- remaining_bytes = strlen (name);
- valid_utf8 = TRUE;
-
- string = g_string_sized_new (remaining_bytes);
- while (remaining_bytes != 0)
- {
- if (g_utf8_validate (remainder, remaining_bytes, &invalid))
- break;
- valid_utf8 = FALSE;
-
- valid_bytes = invalid - remainder;
-
- g_string_append_len (string, remainder, valid_bytes);
- /* append U+FFFD REPLACEMENT CHARACTER */
- g_string_append (string, "\357\277\275");
-
- remaining_bytes -= valid_bytes + 1;
- remainder = invalid + 1;
- }
-
- g_string_append (string, remainder);
-
- if (valid_utf8_out)
- *valid_utf8_out = valid_utf8;
-
- return g_string_free (string, FALSE);
-}
-
-static void
-browse_entry_free (BrowseEntry *entry)
-{
- g_free (entry->name);
- g_free (entry->comment);
- g_free (entry);
-}
-
-static gboolean
-cached_server_equal (gconstpointer _a,
- gconstpointer _b)
-{
- const CachedServer *a = _a;
- const CachedServer *b = _b;
-
- return
- strcmp (a->server_name, b->server_name) == 0 &&
- strcmp (a->share_name, b->share_name) == 0 &&
- strcmp (a->domain, b->domain) == 0 &&
- strcmp (a->username, b->username) == 0;
-}
-
-static guint
-cached_server_hash (gconstpointer key)
-{
- const CachedServer *server = key;
-
- return
- g_str_hash (server->server_name) ^
- g_str_hash (server->share_name) ^
- g_str_hash (server->domain) ^
- g_str_hash (server->username);
-}
-
-static void
-cached_server_free (CachedServer *server)
-{
- g_free (server->server_name);
- g_free (server->share_name);
- g_free (server->domain);
- g_free (server->username);
- g_free (server);
-}
-
-static void
-g_vfs_backend_smb_browse_finalize (GObject *object)
-{
- GVfsBackendSmbBrowse *backend;
-
- backend = G_VFS_BACKEND_SMB_BROWSE (object);
-
- g_free (backend->user);
- g_free (backend->domain);
- g_free (backend->mounted_server);
- g_free (backend->server);
-
- g_mutex_free (backend->entries_lock);
-
- smbc_free_context (backend->smb_context, TRUE);
-
- g_list_foreach (backend->entries, (GFunc)browse_entry_free, NULL);
- g_list_free (backend->entries);
-
- if (G_OBJECT_CLASS (g_vfs_backend_smb_browse_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_smb_browse_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_smb_browse_init (GVfsBackendSmbBrowse *backend)
-{
- backend->entries_lock = g_mutex_new ();
-
- if (mount_tracker == NULL)
- mount_tracker = g_mount_tracker_new (NULL);
-}
-
-/**
- * Authentication callback function type (method that includes context)
- *
- * Type for the the authentication function called by the library to
- * obtain authentication credentals
- *
- * @param context Pointer to the smb context
- * @param srv Server being authenticated to
- * @param shr Share being authenticated to
- * @param wg Pointer to buffer containing a "hint" for the
- * workgroup to be authenticated. Should be filled in
- * with the correct workgroup if the hint is wrong.
- * @param wglen The size of the workgroup buffer in bytes
- * @param un Pointer to buffer containing a "hint" for the
- * user name to be use for authentication. Should be
- * filled in with the correct workgroup if the hint is
- * wrong.
- * @param unlen The size of the username buffer in bytes
- * @param pw Pointer to buffer containing to which password
- * copied
- * @param pwlen The size of the password buffer in bytes
- *
- */
-static void
-auth_callback (SMBCCTX *context,
- const char *server_name, const char *share_name,
- char *domain_out, int domainmaxlen,
- char *username_out, int unmaxlen,
- char *password_out, int pwmaxlen)
-{
- GVfsBackendSmbBrowse *backend;
-
- backend = smbc_getOptionUserData (context);
-
- if (backend->domain)
- strncpy (domain_out, backend->domain, domainmaxlen);
- if (backend->user)
- strncpy (username_out, backend->user, unmaxlen);
- strncpy (password_out, "", pwmaxlen);
-}
-
-/* Add a server to the cache system
- *
- * @param c pointer to smb context
- * @param srv pointer to server to add
- * @param server server name
- * @param share share name
- * @param workgroup workgroup used to connect
- * @param username username used to connect
- * @return 0 on success. 1 on failure.
- *
- */
-static int
-add_cached_server (SMBCCTX *context, SMBCSRV *new,
- const char *server_name, const char *share_name,
- const char *domain, const char *username)
-{
- CachedServer *cached_server;
-
- cached_server = g_new (CachedServer, 1);
- cached_server->server_name = g_strdup (server_name);
- cached_server->share_name = g_strdup (share_name);
- cached_server->domain = g_strdup (domain);
- cached_server->username = g_strdup (username);
-
- if (server_cache == NULL)
- server_cache = g_hash_table_new_full (cached_server_hash, cached_server_equal,
- (GDestroyNotify)cached_server_free, NULL);
-
- g_hash_table_insert (server_cache, cached_server, new);
-
- return 0;
-}
-
-static gboolean
-remove_cb (gpointer key,
- gpointer value,
- gpointer user_data)
-{
- return value == user_data;
-}
-
-/* Remove cached server
- *
- * @param c pointer to smb context
- * @param srv pointer to server to remove
- * @return 0 when found and removed. 1 on failure.
- *
- */
-static int
-remove_cached_server (SMBCCTX * context, SMBCSRV * server)
-{
- guint num;
-
- if (server_cache)
- {
- num = g_hash_table_foreach_remove (server_cache, remove_cb, server);
- if (num != 0)
- return 0;
- }
-
- return 1;
-}
-
-/* Look up a server in the cache system
- *
- * @param c pointer to smb context
- * @param server server name to match
- * @param share share name to match
- * @param workgroup workgroup to match
- * @param username username to match
- * @return pointer to SMBCSRV on success. NULL on failure.
- *
- */
-static SMBCSRV *
-get_cached_server (SMBCCTX * context,
- const char *server_name, const char *share_name,
- const char *domain, const char *username)
-{
- const CachedServer key = {
- (char *)server_name,
- (char *)share_name,
- (char *)domain,
- (char *)username
- };
-
- if (server_cache)
- return g_hash_table_lookup (server_cache, &key);
- else
- return NULL;
-}
-
-/* Try to remove all servers from the cache system and disconnect
- *
- * @param c pointer to smb context
- *
- * @return 0 when found and removed. 1 on failure.
- *
- */
-static int
-purge_cached (SMBCCTX * context)
-{
- if (server_cache)
- g_hash_table_remove_all (server_cache);
-
- return 0;
-}
-
-#define SUB_DELIM_CHARS "!$&'()*+,;="
-
-static gboolean
-is_valid (char c, const char *reserved_chars_allowed)
-{
- if (g_ascii_isalnum (c) ||
- c == '-' ||
- c == '.' ||
- c == '_' ||
- c == '~')
- return TRUE;
-
- if (reserved_chars_allowed &&
- strchr (reserved_chars_allowed, c) != NULL)
- return TRUE;
-
- return FALSE;
-}
-
-static void
-g_string_append_encoded (GString *string,
- const char *encoded,
- const char *encoded_end,
- const char *reserved_chars_allowed)
-{
- char c;
- static const gchar hex[16] = "0123456789ABCDEF";
-
- if (encoded_end == NULL)
- encoded_end = encoded + strlen (encoded);
-
- while (encoded < encoded_end)
- {
- c = *encoded++;
-
- if (is_valid (c, reserved_chars_allowed))
- g_string_append_c (string, c);
- else
- {
- g_string_append_c (string, '%');
- g_string_append_c (string, hex[((guchar)c) >> 4]);
- g_string_append_c (string, hex[((guchar)c) & 0xf]);
- }
- }
-}
-
-static void
-update_cache (GVfsBackendSmbBrowse *backend)
-{
- GString *uri;
- char dirents[1024*4];
- struct smbc_dirent *dirp;
- GList *entries;
- int entry_errno;
- SMBCFILE *dir;
- int res;
- smbc_opendir_fn smbc_opendir;
- smbc_getdents_fn smbc_getdents;
- smbc_closedir_fn smbc_closedir;
-
-
- entries = NULL;
- entry_errno = 0;
-
- /* Update Cache */
- uri = g_string_new ("smb://");
-
- if (backend->server)
- {
- g_string_append_encoded (uri, backend->server, NULL, NULL);
- g_string_append_c (uri, '/');
- }
-
- smbc_opendir = smbc_getFunctionOpendir (backend->smb_context);
- smbc_getdents = smbc_getFunctionGetdents (backend->smb_context);
- smbc_closedir = smbc_getFunctionClosedir (backend->smb_context);
-
- dir = smbc_opendir (backend->smb_context, uri->str);
- g_string_free (uri, TRUE);
- if (dir == NULL)
- {
- entry_errno = errno;
- goto out;
- }
-
- while (TRUE)
- {
- res = smbc_getdents (backend->smb_context, dir, (struct smbc_dirent *)dirents, sizeof (dirents));
- if (res <= 0)
- break;
-
- dirp = (struct smbc_dirent *)dirents;
- while (res > 0)
- {
- unsigned int dirlen;
-
- if (dirp->smbc_type != SMBC_IPC_SHARE &&
- dirp->smbc_type != SMBC_COMMS_SHARE &&
- dirp->smbc_type != SMBC_PRINTER_SHARE &&
- strcmp (dirp->name, ".") != 0 &&
- strcmp (dirp->name, "..") != 0)
- {
- BrowseEntry *entry = g_new (BrowseEntry, 1);
- gboolean valid_utf8;
-
- entry->smbc_type = dirp->smbc_type;
- entry->name = g_strdup (dirp->name);
- entry->name_utf8 = smb_name_to_utf8 (dirp->name, &valid_utf8);
- entry->name_normalized = normalize_smb_name_helper (dirp->name, -1, valid_utf8);
- entry->comment = smb_name_to_utf8 (dirp->comment, NULL);
-
- entries = g_list_prepend (entries, entry);
- }
-
- dirlen = dirp->dirlen;
- dirp = (struct smbc_dirent *) (((char *)dirp) + dirlen);
- res -= dirlen;
- }
-
- entries = g_list_reverse (entries);
- }
-
- smbc_closedir (backend->smb_context, dir);
-
-
- out:
-
- g_mutex_lock (backend->entries_lock);
-
- /* Clear old cache */
- g_list_foreach (backend->entries, (GFunc)browse_entry_free, NULL);
- g_list_free (backend->entries);
- backend->entries = entries;
- backend->entry_errno = entry_errno;
- backend->last_entry_update = time (NULL);
-
- g_mutex_unlock (backend->entries_lock);
-
-}
-
-static BrowseEntry *
-find_entry_unlocked (GVfsBackendSmbBrowse *backend,
- const char *filename)
-{
- BrowseEntry *entry, *found;
- GList *l;
- char *end;
- int len;
- char *normalized;
-
- while (*filename == '/')
- filename++;
-
- end = strchr (filename, '/');
- if (end)
- {
- len = end - filename;
-
- while (*end == '/')
- end++;
-
- if (*end != 0)
- return NULL;
- }
- else
- len = strlen (filename);
-
- /* First look for an exact filename match */
- found = NULL;
- for (l = backend->entries; l != NULL; l = l->next)
- {
- entry = l->data;
-
- if (strncmp (filename, entry->name, len) == 0 &&
- strlen (entry->name) == len)
- {
- found = entry;
- break;
- }
- }
-
- if (found == NULL)
- {
- /* That failed, try normalizing the filename */
- normalized = normalize_smb_name (filename, len);
-
- for (l = backend->entries; l != NULL; l = l->next)
- {
- entry = l->data;
-
- if (strcmp (normalized, entry->name_normalized) == 0)
- {
- found = entry;
- break;
- }
- }
- g_free (normalized);
- }
-
- return found;
-}
-
-static GMountSpec *
-get_mount_spec_for_share (const char *server,
- const char *share)
-{
- GMountSpec *mount_spec;
- char *normalized;
-
- mount_spec = g_mount_spec_new ("smb-share");
- normalized = normalize_smb_name (server, -1);
- g_mount_spec_set (mount_spec, "server", normalized);
- g_free (normalized);
- normalized = normalize_smb_name (share, -1);
- g_mount_spec_set (mount_spec, "share", normalized);
- g_free (normalized);
-
- return mount_spec;
-}
-
-static gboolean
-is_root (const char *filename)
-{
- const char *p;
-
- p = filename;
- while (*p == '/')
- p++;
-
- return *p == 0;
-}
-
-static gboolean
-has_name (GVfsBackendSmbBrowse *backend,
- const char *filename)
-{
- gboolean res;
-
- g_mutex_lock (backend->entries_lock);
- res = (find_entry_unlocked (backend, filename) != NULL);
- g_mutex_unlock (backend->entries_lock);
- return res;
-}
-
-static gboolean
-cache_needs_updating (GVfsBackendSmbBrowse *backend)
-{
- time_t now = time (NULL);
-
- return now < backend->last_entry_update ||
- (now - backend->last_entry_update) > 10;
-}
-
-static void
-do_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendSmbBrowse *op_backend = G_VFS_BACKEND_SMB_BROWSE (backend);
- SMBCCTX *smb_context;
- char *display_name;
- char *icon;
- GMountSpec *browse_mount_spec;
-
- smb_context = smbc_new_context ();
- if (smb_context == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- "Failed to allocate smb context");
- return;
- }
-
- smbc_setOptionUserData (smb_context, backend);
-
- smbc_setDebug (smb_context, 0);
- smbc_setFunctionAuthDataWithContext (smb_context, auth_callback);
-
- smbc_setFunctionAddCachedServer (smb_context, add_cached_server);
- smbc_setFunctionGetCachedServer (smb_context, get_cached_server);
- smbc_setFunctionRemoveCachedServer (smb_context, remove_cached_server);
- smbc_setFunctionPurgeCachedServers (smb_context, purge_cached);
-
- /* FIXME: is strdup() still needed here? -- removed */
- if (default_workgroup != NULL)
- smbc_setWorkgroup (smb_context, default_workgroup);
-
-#ifndef DEPRECATED_SMBC_INTERFACE
- smb_context->flags = 0;
-#endif
-
- smbc_setOptionUseKerberos (smb_context, 1);
- smbc_setOptionFallbackAfterKerberos (smb_context, 1);
- //smbc_setOptionNoAutoAnonymousLogin (smb_context, 1);
-
-
-#if 0
- smbc_setOptionDebugToStderr (smb_context, 1);
-#endif
-
- if (!smbc_init_context (smb_context))
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_FAILED,
- "Failed to initialize smb context");
- smbc_free_context (smb_context, FALSE);
- return;
- }
-
- op_backend->smb_context = smb_context;
-
- /* Convert DEFAULT_WORKGROUP_NAME to real domain */
- if (op_backend->mounted_server != NULL &&
- g_ascii_strcasecmp (op_backend->mounted_server, DEFAULT_WORKGROUP_NAME) == 0)
- op_backend->server = g_strdup (smbc_getWorkgroup (smb_context));
- else
- op_backend->server = g_strdup (op_backend->mounted_server);
-
- icon = NULL;
- if (op_backend->server == NULL)
- {
- display_name = g_strdup (_("Windows Network"));
- browse_mount_spec = g_mount_spec_new ("smb-network");
- icon = "network-workgroup";
- }
- else
- {
- /* translators: Name for the location that lists the smb shares
- availible on a server (%s is the name of the server) */
- display_name = g_strdup_printf (_("Windows shares on %s"), op_backend->server);
- browse_mount_spec = g_mount_spec_new ("smb-server");
- g_mount_spec_set (browse_mount_spec, "server", op_backend->mounted_server);
- icon = "network-server";
- }
-
- if (op_backend->user)
- g_mount_spec_set (browse_mount_spec, "user", op_backend->user);
- if (op_backend->domain)
- g_mount_spec_set (browse_mount_spec, "domain", op_backend->domain);
-
- g_vfs_backend_set_display_name (backend, display_name);
- g_free (display_name);
- if (icon)
- g_vfs_backend_set_icon_name (backend, icon);
- g_vfs_backend_set_user_visible (backend, FALSE);
- g_vfs_backend_set_mount_spec (backend, browse_mount_spec);
- g_mount_spec_unref (browse_mount_spec);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendSmbBrowse *op_backend = G_VFS_BACKEND_SMB_BROWSE (backend);
- const char *server;
- const char *user, *domain;
-
- if (strcmp (g_mount_spec_get_type (mount_spec), "smb-network") == 0)
- server = NULL;
- else
- {
- server = g_mount_spec_get (mount_spec, "server");
- if (server == NULL)
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- "No server specified for smb-server share");
- return TRUE;
- }
- }
-
- user = g_mount_spec_get (mount_spec, "user");
- domain = g_mount_spec_get (mount_spec, "domain");
-
- if (is_automount &&
- ((user != NULL) || (domain != NULL)))
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- "Can't automount smb browsing with specified user or domain");
- return TRUE;
- }
-
- op_backend->user = g_strdup (user);
- op_backend->domain = g_strdup (domain);
- op_backend->mounted_server = g_strdup (server);
-
- return FALSE;
-}
-
-static void
-run_mount_mountable (GVfsBackendSmbBrowse *backend,
- GVfsJobMountMountable *job,
- const char *filename,
- GMountSource *mount_source)
-{
- BrowseEntry *entry;
- GError *error = NULL;
- GMountSpec *mount_spec;
-
- g_mutex_lock (backend->entries_lock);
-
- entry = find_entry_unlocked (backend, filename);
-
- if (entry)
- {
- if (backend->server != NULL &&
- entry->smbc_type == SMBC_FILE_SHARE)
- {
- mount_spec = get_mount_spec_for_share (backend->server, entry->name);
- g_vfs_job_mount_mountable_set_target (job, mount_spec, "/", TRUE);
- g_mount_spec_unref (mount_spec);
- }
- else
- g_set_error_literal (&error,
- G_IO_ERROR, G_IO_ERROR_NOT_MOUNTABLE_FILE,
- _("The file is not a mountable"));
- }
- else
- g_set_error_literal (&error,
- G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
- _("File doesn't exist"));
-
- g_mutex_unlock (backend->entries_lock);
-
- if (error)
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
- else
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static void
-do_mount_mountable (GVfsBackend *backend,
- GVfsJobMountMountable *job,
- const char *filename,
- GMountSource *mount_source)
-{
- GVfsBackendSmbBrowse *op_backend = G_VFS_BACKEND_SMB_BROWSE (backend);
-
- update_cache (op_backend);
-
- run_mount_mountable (op_backend,
- job,
- filename,
- mount_source);
-}
-
-static gboolean
-try_mount_mountable (GVfsBackend *backend,
- GVfsJobMountMountable *job,
- const char *filename,
- GMountSource *mount_source)
-{
- GVfsBackendSmbBrowse *op_backend = G_VFS_BACKEND_SMB_BROWSE (backend);
-
- if (is_root (filename))
- {
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_NOT_MOUNTABLE_FILE,
- _("The file is not a mountable"));
- return TRUE;
- }
-
- if (cache_needs_updating (op_backend))
- return FALSE;
-
- run_mount_mountable (op_backend,
- job,
- filename,
- mount_source);
- return TRUE;
-}
-
-static void
-run_open_for_read (GVfsBackendSmbBrowse *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- if (has_name (backend, filename))
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_IS_DIRECTORY,
- _("Not a regular file"));
- else
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
- _("File doesn't exist"));
-}
-
-static void
-do_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- GVfsBackendSmbBrowse *op_backend = G_VFS_BACKEND_SMB_BROWSE (backend);
-
- update_cache (op_backend);
-
- run_open_for_read (op_backend, job, filename);
-}
-
-static gboolean
-try_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- GVfsBackendSmbBrowse *op_backend = G_VFS_BACKEND_SMB_BROWSE (backend);
-
- if (cache_needs_updating (op_backend))
- return FALSE;
-
- run_open_for_read (op_backend, job, filename);
-
- return TRUE;
-}
-
-static gboolean
-try_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize bytes_requested)
-{
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- "Invalid argument");
-
- return TRUE;
-}
-
-static gboolean
-try_seek_on_read (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle handle,
- goffset offset,
- GSeekType type)
-{
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- "Invalid argument");
- return TRUE;
-}
-
-static gboolean
-try_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle handle)
-{
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- "Invalid argument");
- return TRUE;
-}
-
-static void
-get_file_info_from_entry (GVfsBackendSmbBrowse *backend, BrowseEntry *entry, GFileInfo *info)
-{
- GMountSpec *mount_spec;
- GString *uri;
- GIcon *icon;
-
- g_file_info_set_name (info, entry->name);
- g_file_info_set_display_name (info, entry->name_utf8);
- g_file_info_set_edit_name (info, entry->name_utf8);
- g_file_info_set_attribute_string (info, "smb::comment", entry->comment);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL, TRUE);
-
- icon = NULL;
- if (entry->smbc_type == SMBC_WORKGROUP)
- icon = g_themed_icon_new ("network-workgroup");
- else if (entry->smbc_type == SMBC_SERVER)
- icon = g_themed_icon_new ("network-server");
- else
- icon = g_themed_icon_new ("folder-remote");
-
- if (icon)
- {
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- }
-
- mount_spec = NULL;
- if (backend->server)
- {
- /* browsing server/workgroup */
- if (entry->smbc_type == SMBC_WORKGROUP ||
- entry->smbc_type == SMBC_SERVER)
- {
- uri = g_string_new ("smb://");
- g_string_append_encoded (uri, entry->name, NULL, NULL);
- g_string_append_c (uri, '/');
- }
- else
- {
- mount_spec = get_mount_spec_for_share (backend->server, entry->name);
-
- uri = g_string_new ("smb://");
- g_string_append_encoded (uri, backend->server, NULL, NULL);
- g_string_append_c (uri, '/');
- g_string_append_encoded (uri, entry->name, NULL, NULL);
- }
- }
- else
- {
- /* browsing network */
- uri = g_string_new ("smb://");
- g_string_append_encoded (uri, entry->name, NULL, NULL);
- g_string_append_c (uri, '/');
-
- /* these are auto-mounted, so no CAN_MOUNT/UNMOUNT */
- }
-
- if (mount_spec)
- {
- g_file_info_set_file_type (info, G_FILE_TYPE_MOUNTABLE);
- if (g_mount_tracker_has_mount_spec (mount_tracker, mount_spec))
- {
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT, TRUE);
- }
- else
- {
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT, TRUE);
- g_file_info_set_attribute_boolean(info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT, FALSE);
- }
- g_mount_spec_unref (mount_spec);
- }
- else
- g_file_info_set_file_type (info, G_FILE_TYPE_SHORTCUT);
-
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI, uri->str);
- g_string_free (uri, TRUE);
-}
-
-static void
-run_query_info (GVfsBackendSmbBrowse *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- BrowseEntry *entry;
-
- g_mutex_lock (backend->entries_lock);
-
- entry = find_entry_unlocked (backend, filename);
-
- if (entry)
- get_file_info_from_entry (backend, entry, info);
-
- g_mutex_unlock (backend->entries_lock);
-
- if (entry)
- g_vfs_job_succeeded (G_VFS_JOB (job));
- else
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
- _("File doesn't exist"));
-}
-
-static void
-do_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- GVfsBackendSmbBrowse *op_backend = G_VFS_BACKEND_SMB_BROWSE (backend);
-
- update_cache (op_backend);
-
- run_query_info (op_backend, job, filename, info, matcher);
-}
-
-
-static gboolean
-try_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- GVfsBackendSmbBrowse *op_backend = G_VFS_BACKEND_SMB_BROWSE (backend);
- const char *icon_name;
- GIcon *icon;
-
- if (is_root (filename))
- {
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
- g_file_info_set_name (info, "/");
- g_file_info_set_display_name (info, g_vfs_backend_get_display_name (backend));
- icon_name = g_vfs_backend_get_icon_name (backend);
- if (icon_name)
- {
- icon = g_themed_icon_new (icon_name);
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
- }
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- return TRUE;
- }
-
- if (cache_needs_updating (op_backend))
- return FALSE;
-
- run_query_info (op_backend, job, filename, info, matcher);
-
- return TRUE;
-}
-
-static void
-run_enumerate (GVfsBackendSmbBrowse *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *matcher)
-{
- GList *files, *l;
- GFileInfo *info;
-
- if (!is_root (filename))
- {
- if (has_name (backend, filename))
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_NOT_DIRECTORY,
- _("Not a directory"));
- else
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
- _("File doesn't exist"));
- return;
- }
-
- /* TODO: limit requested to what we support */
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- files = NULL;
- g_mutex_lock (backend->entries_lock);
- for (l = backend->entries; l != NULL; l = l->next)
- {
- BrowseEntry *entry = l->data;
-
- info = g_file_info_new ();
- get_file_info_from_entry (backend, entry, info);
-
- files = g_list_prepend (files, info);
- }
- g_mutex_unlock (backend->entries_lock);
-
- files = g_list_reverse (files);
-
- g_vfs_job_enumerate_add_infos (job, files);
- g_list_foreach (files, (GFunc)g_object_unref, NULL);
- g_list_free (files);
-
- g_vfs_job_enumerate_done (job);
-}
-
-static void
-do_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *matcher,
- GFileQueryInfoFlags flags)
-{
- GVfsBackendSmbBrowse *op_backend = G_VFS_BACKEND_SMB_BROWSE (backend);
-
- update_cache (op_backend);
-
- run_enumerate (op_backend, job, filename, matcher);
-}
-
-static gboolean
-try_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *matcher,
- GFileQueryInfoFlags flags)
-{
- GVfsBackendSmbBrowse *op_backend = G_VFS_BACKEND_SMB_BROWSE (backend);
-
- if (cache_needs_updating (op_backend))
- return FALSE;
-
- run_enumerate (op_backend, job, filename, matcher);
-
- return TRUE;
-}
-
-static void
-g_vfs_backend_smb_browse_class_init (GVfsBackendSmbBrowseClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-#ifdef HAVE_GCONF
- GConfClient *gclient;
-#endif
-
- gobject_class->finalize = g_vfs_backend_smb_browse_finalize;
-
- backend_class->mount = do_mount;
- backend_class->try_mount = try_mount;
- backend_class->mount_mountable = do_mount_mountable;
- backend_class->try_mount_mountable = try_mount_mountable;
- backend_class->open_for_read = do_open_for_read;
- backend_class->try_open_for_read = try_open_for_read;
- backend_class->try_read = try_read;
- backend_class->try_seek_on_read = try_seek_on_read;
- backend_class->try_close_read = try_close_read;
- backend_class->query_info = do_query_info;
- backend_class->try_query_info = try_query_info;
- backend_class->enumerate = do_enumerate;
- backend_class->try_enumerate = try_enumerate;
-
-#ifdef HAVE_GCONF
- gclient = gconf_client_get_default ();
- if (gclient)
- {
- char *workgroup;
-
- workgroup = gconf_client_get_string (gclient,
- PATH_GCONF_GNOME_VFS_SMB_WORKGROUP, NULL);
-
- if (workgroup && workgroup[0])
- default_workgroup = workgroup;
- else
- g_free (workgroup);
-
- g_object_unref (gclient);
- }
-#endif
-
-}
-
-void
-g_vfs_smb_browse_daemon_init (void)
-{
- g_set_application_name (_("Windows Network Filesystem Service"));
-}
diff --git a/daemon/gvfsbackendsmbbrowse.h b/daemon/gvfsbackendsmbbrowse.h
deleted file mode 100644
index 4c013437..00000000
--- a/daemon/gvfsbackendsmbbrowse.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_SMB_BROWSE_H__
-#define __G_VFS_BACKEND_SMB_BROWSE_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_SMB_BROWSE (g_vfs_backend_smb_browse_get_type ())
-#define G_VFS_BACKEND_SMB_BROWSE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_SMB_BROWSE, GVfsBackendSmbBrowse))
-#define G_VFS_BACKEND_SMB_BROWSE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_SMB_BROWSE, GVfsBackendSmbBrowseClass))
-#define G_VFS_IS_BACKEND_SMB_BROWSE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_SMB_BROWSE))
-#define G_VFS_IS_BACKEND_SMB_BROWSE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_SMB_BROWSE))
-#define G_VFS_BACKEND_SMB_BROWSE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_SMB_BROWSE, GVfsBackendSmbBrowseClass))
-
-typedef struct _GVfsBackendSmbBrowse GVfsBackendSmbBrowse;
-typedef struct _GVfsBackendSmbBrowseClass GVfsBackendSmbBrowseClass;
-
-struct _GVfsBackendSmbBrowseClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_smb_browse_get_type (void) G_GNUC_CONST;
-
-#define BACKEND_SETUP_FUNC g_vfs_smb_browse_daemon_init
-void g_vfs_smb_browse_daemon_init (void);
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_SMB_BROWSE_H__ */
diff --git a/daemon/gvfsbackendtest.c b/daemon/gvfsbackendtest.c
deleted file mode 100644
index b0fb28e4..00000000
--- a/daemon/gvfsbackendtest.c
+++ /dev/null
@@ -1,352 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include "gvfsbackendtest.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobenumerate.h"
-
-G_DEFINE_TYPE (GVfsBackendTest, g_vfs_backend_test, G_VFS_TYPE_BACKEND)
-
-static void
-g_vfs_backend_test_finalize (GObject *object)
-{
- if (G_OBJECT_CLASS (g_vfs_backend_test_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_test_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_test_init (GVfsBackendTest *test_backend)
-{
- GVfsBackend *backend = G_VFS_BACKEND (test_backend);
- GMountSpec *mount_spec;
-
- g_vfs_backend_set_display_name (backend, "test");
-
- mount_spec = g_mount_spec_new ("test");
- g_vfs_backend_set_mount_spec (backend, mount_spec);
- g_mount_spec_unref (mount_spec);
-}
-
-
-static gboolean
-try_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- g_vfs_job_succeeded (G_VFS_JOB (job));
- return TRUE;
-}
-
-static gboolean
-open_idle_cb (gpointer data)
-{
- GVfsJobOpenForRead *job = data;
- int fd;
-
- if (g_vfs_job_is_cancelled (G_VFS_JOB (job)))
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- return FALSE;
- }
-
- fd = g_open (job->filename, O_RDONLY);
- if (fd == -1)
- {
- int errsv = errno;
-
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- g_io_error_from_errno (errsv),
- "Error opening file %s: %s",
- job->filename, g_strerror (errsv));
- }
- else
- {
- g_vfs_job_open_for_read_set_can_seek (job, TRUE);
- g_vfs_job_open_for_read_set_handle (job, GINT_TO_POINTER (fd));
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- return FALSE;
-}
-
-static void
-open_read_cancelled_cb (GVfsJob *job, gpointer data)
-{
- guint tag = GPOINTER_TO_INT (data);
-
- g_print ("open_read_cancelled_cb\n");
-
- if (g_source_remove (tag))
- g_vfs_job_failed (job, G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
-}
-
-static gboolean
-try_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- GError *error;
-
- g_print ("try_open_for_read (%s)\n", filename);
-
- if (strcmp (filename, "/fail") == 0)
- {
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_FAILED, "Test error");
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- }
- else
- {
- guint tag = g_timeout_add (0, open_idle_cb, job);
- g_signal_connect (job, "cancelled", (GCallback)open_read_cancelled_cb, GINT_TO_POINTER (tag));
- }
-
- return TRUE;
-}
-
-static gboolean
-read_idle_cb (gpointer data)
-{
- GVfsJobRead *job = data;
- int fd;
- ssize_t res;
-
- fd = GPOINTER_TO_INT (job->handle);
-
- res = read (fd, job->buffer, job->bytes_requested);
-
- if (res == -1)
- {
- int errsv = errno;
-
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- g_io_error_from_errno (errsv),
- "Error reading from file: %s",
- g_strerror (errsv));
- }
- else
- {
- g_vfs_job_read_set_size (job, res);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-
- return FALSE;
-}
-
-static void
-read_cancelled_cb (GVfsJob *job, gpointer data)
-{
- guint tag = GPOINTER_TO_INT (job->backend_data);
-
- g_source_remove (tag);
- g_vfs_job_failed (job, G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
-}
-
-static gboolean
-try_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle handle,
- char *buffer,
- gsize bytes_requested)
-{
- guint tag;
-
- g_print ("read (%"G_GSIZE_FORMAT")\n", bytes_requested);
-
- tag = g_timeout_add (0, read_idle_cb, job);
- G_VFS_JOB (job)->backend_data = GINT_TO_POINTER (tag);
- g_signal_connect (job, "cancelled", (GCallback)read_cancelled_cb, NULL);
-
- return TRUE;
-}
-
-static void
-do_seek_on_read (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle handle,
- goffset offset,
- GSeekType type)
-{
- int whence;
- int fd;
- off_t final_offset;
-
- g_print ("seek_on_read (%d, %u)\n", (int)offset, type);
-
- switch (type)
- {
- default:
- case G_SEEK_SET:
- whence = SEEK_SET;
- break;
- case G_SEEK_CUR:
- whence = SEEK_CUR;
- break;
- case G_SEEK_END:
- whence = SEEK_END;
- break;
- }
-
-
- fd = GPOINTER_TO_INT (handle);
-
- final_offset = lseek (fd, offset, whence);
-
- if (final_offset == (off_t)-1)
- {
- int errsv = errno;
-
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- g_io_error_from_errno (errsv),
- "Error seeking in file: %s",
- g_strerror (errsv));
- }
- else
- {
- g_vfs_job_seek_read_set_offset (job, offset);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-}
-
-static void
-do_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle handle)
-{
- int fd;
-
- g_print ("close ()\n");
-
- fd = GPOINTER_TO_INT (handle);
- close(fd);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-}
-
-static void
-do_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- GFile *file;
- GFileInfo *info2;
- GError *error;
- GVfs *local_vfs;
-
- g_print ("do_get_file_info (%s)\n", filename);
-
- local_vfs = g_vfs_get_local ();
- file = g_vfs_get_file_for_path (local_vfs, filename);
-
- error = NULL;
- info2 = g_file_query_info (file, NULL, flags,
- NULL, &error);
-
- if (info2)
- {
- g_file_info_copy_into (info2, info);
- g_object_unref (info2);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
-
- g_object_unref (file);
-}
-
-static gboolean
-try_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *matcher,
- GFileQueryInfoFlags flags)
-{
- GFileInfo *info1, *info2;
- GList *l;
-
- g_print ("try_enumerate (%s)\n", filename);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- info1 = g_file_info_new ();
- info2 = g_file_info_new ();
- g_file_info_set_name (info1, "file1");
- g_file_info_set_file_type (info1, G_FILE_TYPE_REGULAR);
- g_file_info_set_name (info2, "file2");
- g_file_info_set_file_type (info2, G_FILE_TYPE_REGULAR);
-
- l = NULL;
- l = g_list_append (l, info1);
- l = g_list_append (l, info2);
-
- g_vfs_job_enumerate_add_infos (job, l);
-
- g_list_free (l);
- g_object_unref (info1);
- g_object_unref (info2);
-
- g_vfs_job_enumerate_done (job);
-
- return TRUE;
-}
-
-static void
-g_vfs_backend_test_class_init (GVfsBackendTestClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_test_finalize;
-
- backend_class->try_mount = try_mount;
- backend_class->try_open_for_read = try_open_for_read;
- backend_class->try_read = try_read;
- backend_class->seek_on_read = do_seek_on_read;
- backend_class->close_read = do_close_read;
- backend_class->query_info = do_query_info;
- backend_class->try_enumerate = try_enumerate;
-}
diff --git a/daemon/gvfsbackendtest.h b/daemon/gvfsbackendtest.h
deleted file mode 100644
index cfba8287..00000000
--- a/daemon/gvfsbackendtest.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_TEST_H__
-#define __G_VFS_BACKEND_TEST_H__
-
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_TEST (g_vfs_backend_test_get_type ())
-#define G_VFS_BACKEND_TEST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_TEST, GVfsBackendTest))
-#define G_VFS_BACKEND_TEST_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_TEST, GVfsBackendTestClass))
-#define G_VFS_IS_BACKEND_TEST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_TEST))
-#define G_VFS_IS_BACKEND_TEST_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_TEST))
-#define G_VFS_BACKEND_TEST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_TEST, GVfsBackendTestClass))
-
-typedef struct _GVfsBackendTest GVfsBackendTest;
-typedef struct _GVfsBackendTestClass GVfsBackendTestClass;
-
-struct _GVfsBackendTest
-{
- GVfsBackend parent_instance;
-};
-
-struct _GVfsBackendTestClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_test_get_type (void) G_GNUC_CONST;
-
-GVfsBackendTest *g_vfs_backend_test_new (void);
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_TEST_H__ */
diff --git a/daemon/gvfsbackendtrash.c b/daemon/gvfsbackendtrash.c
deleted file mode 100644
index 0b99e21b..00000000
--- a/daemon/gvfsbackendtrash.c
+++ /dev/null
@@ -1,1862 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-#include <gio/gunixmounts.h>
-#include <glib/gurifuncs.h>
-
-#include "gvfsbackendtrash.h"
-#include "gvfsmonitor.h"
-#include "gvfsjobopenforread.h"
-#include "gvfsjobread.h"
-#include "gvfsjobseekread.h"
-#include "gvfsjobopenforwrite.h"
-#include "gvfsjobwrite.h"
-#include "gvfsjobclosewrite.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsjobsetdisplayname.h"
-#include "gvfsjobqueryinfo.h"
-#include "gvfsjobdelete.h"
-#include "gvfsjobqueryfsinfo.h"
-#include "gvfsjobqueryattributes.h"
-#include "gvfsjobenumerate.h"
-#include "gvfsjobcreatemonitor.h"
-#include "gvfsdaemonprotocol.h"
-
-/* This is an implementation of the read side of the freedesktop trash specification.
- For more details on that, see: http://www.freedesktop.org/wiki/Specifications/trash-spec
-
- It supplies the virtual trash: location that contains the merged contents of all the
- trash directories currently mounted on the system. In order to not have filename
- conflicts in the toplevel trash: directory (as files in different trash dirs can have
- the same name) we encode the filenames in the toplevel in a way such that:
- 1) There are no conflicts
- 2) You can know from the filename itself which trash directory it came from
- 3) Files in the trash in your homedir look "nicest"
- This is handled by escape_pathname() and unescape_pathname()
-
- This should be pretty straightforward, but there are two complications:
-
- * When looking for trash directories we need to look in the root of all mounted
- filesystems. This is problematic, beacuse it means as soon as there is at least
- one hanged NFS mount the whole process will block until that comes back. This
- is pretty common on some kinds of machines. We avoid this by forking and doing the
- stats in a child process.
-
- * Monitoring the root directory is complicated, as its spread over many directories
- that all have to be monitored. Furthermore, directories can be added/removed
- at any time if something is mounted/unmounted, and in the case of unmounts we
- need to generate deleted events for the files we lost. So, we need to keep track
- of the current contents of the trash dirs.
-
- The solution used is to keep a list of all the files currently in the toplevel
- directory, and then whenever we re-scan that we send out events based on changes
- from the old list to the new list. And, in addition to user read-dirs we re-scan
- the toplevel when filesystems are mounted/unmounted and when files are added/deleted
- in currently monitored trash directories.
- */
-
-
-
-struct _GVfsBackendTrash
-{
- GVfsBackend parent_instance;
-
- GMountSpec *mount_spec;
-
- /* This is only set on the main thread */
- GList *top_files; /* Files in toplevel dir */
- guint num_top_files;
-
- /* All these are protected by the root_monitor lock */
- GVfsMonitor *file_vfs_monitor;
- GVfsMonitor *vfs_monitor;
- GList *trash_dir_monitors; /* GFileMonitor objects */
- GUnixMountMonitor *mount_monitor;
- gboolean trash_file_update_running;
- gboolean trash_file_update_scheduled;
- gboolean trash_file_update_monitors_scheduled;
-};
-
-G_LOCK_DEFINE_STATIC(root_monitor);
-
-G_DEFINE_TYPE (GVfsBackendTrash, g_vfs_backend_trash, G_VFS_TYPE_BACKEND)
-
-static void schedule_update_trash_files (GVfsBackendTrash *backend,
- gboolean update_trash_dirs);
-static GList *enumerate_root (GVfsBackend *backend,
- GVfsJobEnumerate *job);
-static GVfsMonitor *do_create_root_monitor (GVfsBackend *backend);
-
-static char *
-escape_pathname (const char *dir)
-{
- const char *p;
- char *d, *res;
- int count;
- char c;
- const char *basename;
- const char *user_data_dir;
-
- /* Special case the homedir trash to get nice filenames for that */
- user_data_dir = g_get_user_data_dir ();
- if (g_str_has_prefix (dir, user_data_dir) &&
- (g_str_has_prefix (dir + strlen (user_data_dir), "/Trash/")))
- {
- basename = dir + strlen (user_data_dir) + strlen ("/Trash/");
-
- res = g_malloc (strlen (basename) + 2);
- res[0] = '_';
- strcpy (res + 1, basename);
- return res;
- }
-
- /* Skip initial slashes, we don't need those since they are always there */
- while (*dir == '/')
- dir++;
-
- /* count characters that need to be escaped. */
- count = 0;
- p = dir;
- while (*p)
- {
- if (*p == '_')
- count++;
- if (*p == '/')
- count++;
- if (*p == '%')
- count++;
- p++;
- }
-
- res = g_malloc (strlen (dir) + count*2 + 1);
-
- p = dir;
- d = res;
- while (*p)
- {
- c = *p++;
- if (c == '_')
- {
- *d++ = '%';
- *d++ = '5';
- *d++ = 'f';
- }
- else if (c == '/')
- {
- *d++ = '%';
- *d++ = '2';
- *d++ = 'f';
-
- /* Skip consecutive slashes, they are unnecessary,
- and break our escaping */
- while (*p == '/')
- p++;
- }
- else if (c == '%')
- {
- *d++ = '%';
- *d++ = '2';
- *d++ = '5';
- }
- else
- *d++ = c;
- }
- *d = 0;
-
- return res;
-}
-
-static char *
-unescape_pathname (const char *escaped_dir, int len)
-{
- char *dir, *d;
- const char *p, *end;
- char c;
-
- if (len == -1)
- len = strlen (escaped_dir);
-
- /* If first char is _ this is a homedir trash file */
- if (len > 1 && *escaped_dir == '_')
- {
- char *trashname;
- trashname = g_strndup (escaped_dir + 1, len - 1);
- dir = g_build_filename (g_get_user_data_dir (), "Trash", trashname, NULL);
- g_free (trashname);
- return dir;
- }
-
- dir = g_malloc (len + 1 + 1);
-
- p = escaped_dir;
- d = dir;
- *d++ = '/';
- end = p + len;
- while (p < end)
- {
- c = *p++;
- if (c == '%' && p < (end-1))
- {
- if (*(p) == '2' && *(p+1) == 'f')
- {
- *d++ = '/';
- p+=2;
- }
- else if (*(p) == '2' && *(p+1) == '5')
- {
- *d++ = '%';
- p+=2;
- }
- else if (*(p) == '5' && *(p+1) == 'f')
- {
- *d++ = '_';
- p+=2;
- }
- }
- else
- *d++ = c;
- }
- *d = 0;
-
- return dir;
-}
-
-static char *
-get_top_dir_for_trash_dir (const char *trash_dir)
-{
- char *basename, *dirname;
- char *user_trash_basename;
- char *user_sys_dir, *res;
-
- basename = g_path_get_basename (trash_dir);
- if (strcmp (basename, "Trash") == 0)
- {
- /* This is $XDG_DATA_DIR/Trash */
- g_free (basename);
- return g_path_get_dirname (trash_dir);
- }
-
- user_trash_basename = g_strdup_printf (".Trash-%u", getuid());
- if (strcmp (basename, user_trash_basename) == 0)
- {
- g_free (user_trash_basename);
- g_free (basename);
- return g_path_get_dirname (trash_dir);
- }
- g_free (user_trash_basename);
-
- user_sys_dir = g_strdup_printf ("%u", getuid());
- if (strcmp (basename, user_sys_dir) == 0)
- {
- g_free (user_sys_dir);
- dirname = g_path_get_dirname (trash_dir);
- g_free (basename);
- basename = g_path_get_basename (dirname);
-
- if (strcmp (basename, ".Trash") == 0)
- {
- res = g_path_get_dirname (dirname);
- g_free (dirname);
- g_free (basename);
- return res;
- }
-
- g_free (dirname);
- }
- g_free (user_sys_dir);
- g_free (basename);
-
- /* Weird, but we return something at least */
- return g_strdup (trash_dir);
-}
-
-/* FALSE => root */
-static gboolean
-decode_path (const char *filename, char **trashdir, char **trashfile, char **relative_path, char **topdir)
-{
- const char *first_entry, *first_entry_end;
- char *first_item;
-
- if (*filename == 0 || *filename != '/')
- return FALSE;
-
- while (*filename == '/')
- filename++;
-
- if (*filename == 0)
- return FALSE;
-
- first_entry = filename;
-
- while (*filename != 0 && *filename != '/')
- filename++;
-
- first_entry_end = filename;
-
- while (*filename == '/')
- filename++;
-
- first_item = unescape_pathname (first_entry, first_entry_end - first_entry);
- *trashfile = g_path_get_basename (first_item);
- *trashdir = g_path_get_dirname (first_item);
- *topdir = get_top_dir_for_trash_dir (*trashdir);
-
- if (*filename)
- *relative_path = g_strdup (filename);
- else
- *relative_path = NULL;
- return TRUE;
-}
-
-typedef enum {
- HAS_SYSTEM_DIR = 1<<0,
- HAS_USER_DIR = 1<<1,
- HAS_TRASH_FILES = 1<<1
-} TopdirInfo;
-
-static TopdirInfo
-check_topdir (const char *topdir)
-{
- TopdirInfo res;
- struct stat statbuf;
- char *sysadmin_dir, *sysadmin_dir_uid;
- char *user_trash_basename, *user_trash;
-
- res = 0;
-
- sysadmin_dir = g_build_filename (topdir, ".Trash", NULL);
- if (lstat (sysadmin_dir, &statbuf) == 0 &&
- S_ISDIR (statbuf.st_mode) &&
- statbuf.st_mode & S_ISVTX)
- {
- /* We have a valid sysadmin .Trash dir, look for uid subdir */
- sysadmin_dir_uid = g_strdup_printf ("%s/%u", sysadmin_dir, getuid());
-
- if (lstat (sysadmin_dir_uid, &statbuf) == 0 &&
- S_ISDIR (statbuf.st_mode) &&
- statbuf.st_uid == getuid())
- {
- res |= HAS_SYSTEM_DIR;
-
- if (statbuf.st_nlink != 2)
- res |= HAS_TRASH_FILES;
- }
-
- g_free (sysadmin_dir_uid);
- }
- g_free (sysadmin_dir);
-
- user_trash_basename = g_strdup_printf (".Trash-%u", getuid());
- user_trash = g_build_filename (topdir, user_trash_basename, NULL);
- g_free (user_trash_basename);
-
- if (lstat (user_trash, &statbuf) == 0 &&
- S_ISDIR (statbuf.st_mode) &&
- statbuf.st_uid == getuid())
- {
- res |= HAS_USER_DIR;
-
- if (statbuf.st_nlink != 2)
- res |= HAS_TRASH_FILES;
- }
-
- g_free (user_trash);
-
- return res;
-}
-
-static gboolean
-wait_for_fd_with_timeout (int fd, int timeout_secs)
-{
- int res;
-
- do
- {
-#ifdef HAVE_POLL
- struct pollfd poll_fd;
- poll_fd.fd = fd;
- poll_fd.events = POLLIN;
- res = poll (&poll_fd, 1, timeout_secs * 1000);
-#else
- struct timeval tv;
- fd_set read_fds;
-
- tv.tv_sec = timeout_secs;
- tv.tv_usec = 0;
-
- FD_ZERO(&read_fds);
- FD_SET(fd, &read_fds);
-
- res = select (fd + 1, &read_fds, NULL, NULL, &tv);
-#endif
- } while (res == -1 && errno == EINTR);
-
- return res > 0;
-}
-
-/* We do this convoluted fork + pipe thing to avoid hanging
- on e.g stuck NFS mounts, which is somewhat common since
- we're basically stat:ing all mounted filesystems */
-static GList *
-get_topdir_info (GList *topdirs)
-{
- GList *result = NULL;
-
- while (topdirs)
- {
- guint32 topdir_info = 0;
- pid_t pid;
- int pipes[2];
- int status;
-
- if (pipe (pipes) == -1)
- goto error;
-
- pid = fork ();
- if (pid == -1)
- {
- close (pipes[0]);
- close (pipes[1]);
- goto error;
- }
-
- if (pid == 0)
- {
- /* Child */
- close (pipes[0]);
-
- /* Fork an intermediate child that immediately exits
- * so we can waitpid it. This means the final process
- * will get owned by init and not go zombie.
- */
- pid = fork ();
-
- if (pid == 0)
- {
- /* Grandchild */
- while (topdirs)
- {
- guint32 info;
- info = check_topdir ((char *)topdirs->data);
- write (pipes[1], (char *)&info, sizeof (guint32));
- topdirs = topdirs->next;
- }
- }
- close (pipes[1]);
- _exit (0);
- g_assert_not_reached ();
- }
-
- /* Parent */
- close (pipes[1]);
-
- /* Wait for the intermidate process to die */
- retry_waitpid:
- if (waitpid (pid, &status, 0) < 0)
- {
- if (errno == EINTR)
- goto retry_waitpid;
- else if (errno == ECHILD)
- ; /* do nothing, child already reaped */
- else
- g_warning ("waitpid() should not fail in get_topdir_info");
- }
-
- while (topdirs)
- {
- if (!wait_for_fd_with_timeout (pipes[0], 3) ||
- read (pipes[0], (char *)&topdir_info, sizeof (guint32)) != sizeof (guint32))
- break;
-
- result = g_list_prepend (result, GUINT_TO_POINTER (topdir_info));
- topdirs = topdirs->next;
- }
-
- close (pipes[0]);
-
- error:
- if (topdirs)
- {
- topdir_info = 0;
- result = g_list_prepend (result, GUINT_TO_POINTER (topdir_info));
- topdirs = topdirs->next;
- }
- }
-
- return g_list_reverse (result);
-}
-
-static GList *
-list_trash_dirs (void)
-{
- GList *mounts, *l, *li;
- const char *topdir;
- char *home_trash;
- GUnixMountEntry *mount;
- GList *dirs;
- GList *topdirs;
- GList *topdirs_info;
- struct stat statbuf;
- gboolean has_trash_files;
- int stat_result;
-
- dirs = NULL;
- has_trash_files = FALSE;
-
- home_trash = g_build_filename (g_get_user_data_dir (), "Trash", NULL);
-
- stat_result = g_lstat (home_trash, &statbuf);
-
- /* If the home trash directory doesn't exist at this point, we must create
- * it in order to monitor it. */
- if (stat_result != 0)
- {
- gchar *home_trash_files = g_build_filename (home_trash, "files", NULL);
- gchar *home_trash_info = g_build_filename (home_trash, "info", NULL);
-
- g_mkdir_with_parents (home_trash_files, 0700);
- g_mkdir_with_parents (home_trash_info, 0700);
-
- g_free (home_trash_files);
- g_free (home_trash_info);
-
- stat_result = g_lstat (home_trash, &statbuf);
- }
-
- if (stat_result == 0 &&
- S_ISDIR (statbuf.st_mode))
- {
- dirs = g_list_prepend (dirs, home_trash);
- if (statbuf.st_nlink != 2)
- has_trash_files = TRUE;
- }
- else
- g_free (home_trash);
-
- topdirs = NULL;
- mounts = g_unix_mounts_get (NULL);
- for (l = mounts; l != NULL; l = l->next)
- {
- mount = l->data;
-
- if (!g_unix_mount_is_system_internal (mount) )
- {
- topdir = g_unix_mount_get_mount_path (mount);
- topdirs = g_list_prepend (topdirs, g_strdup (topdir));
- }
-
- g_unix_mount_free (mount);
- }
- g_list_free (mounts);
-
- topdirs_info = get_topdir_info (topdirs);
-
- for (l = topdirs, li = topdirs_info; l != NULL && li != NULL; l = l->next, li = li->next)
- {
- TopdirInfo info = GPOINTER_TO_UINT (li->data);
- char *basename, *trashdir;
- topdir = l->data;
-
- if (info & HAS_SYSTEM_DIR)
- {
- basename = g_strdup_printf ("%u", getuid());
- trashdir = g_build_filename (topdir, ".Trash", basename, NULL);
- g_free (basename);
- dirs = g_list_prepend (dirs, trashdir);
- }
-
- if (info & HAS_USER_DIR)
- {
- basename = g_strdup_printf (".Trash-%u", getuid());
- trashdir = g_build_filename (topdir, basename, NULL);
- g_free (basename);
- dirs = g_list_prepend (dirs, trashdir);
- }
-
- if (info & HAS_TRASH_FILES)
- has_trash_files = TRUE;
- }
-
- g_list_foreach (topdirs, (GFunc) g_free, NULL);
- g_list_free (topdirs);
- g_list_free (topdirs_info);
-
- return g_list_reverse (dirs);
-}
-
-static void
-g_vfs_backend_trash_finalize (GObject *object)
-{
- GVfsBackendTrash *backend;
-
- backend = G_VFS_BACKEND_TRASH (object);
-
- g_mount_spec_unref (backend->mount_spec);
-
-
- if (G_OBJECT_CLASS (g_vfs_backend_trash_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_backend_trash_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_backend_trash_init (GVfsBackendTrash *trash_backend)
-{
- GVfsBackend *backend = G_VFS_BACKEND (trash_backend);
- GMountSpec *mount_spec;
-
- /* translators: This is the name of the backend */
- g_vfs_backend_set_display_name (backend, _("Trash"));
- g_vfs_backend_set_icon_name (backend, "user-trash");
- g_vfs_backend_set_user_visible (backend, FALSE);
-
- mount_spec = g_mount_spec_new ("trash");
- g_vfs_backend_set_mount_spec (backend, mount_spec);
- trash_backend->mount_spec = mount_spec;
-}
-
-static void
-do_mount (GVfsBackend *backend,
- GVfsJobMount *job,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount)
-{
- GVfsBackendTrash *trash_backend = G_VFS_BACKEND_TRASH (backend);
- GList *names;
-
- names = enumerate_root (backend, NULL);
- trash_backend->num_top_files = g_list_length (names);
- trash_backend->top_files = g_list_sort (names, (GCompareFunc)strcmp);
- do_create_root_monitor (backend);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
-
-static void
-do_open_for_read (GVfsBackend *backend,
- GVfsJobOpenForRead *job,
- const char *filename)
-{
- char *trashdir, *topdir, *relative_path, *trashfile;
-
- if (!decode_path (filename, &trashdir, &trashfile, &relative_path, &topdir))
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_IS_DIRECTORY,
- _("Can't open directory"));
- else
- {
- GFile *file;
- char *dir;
- GError *error;
- GFileInputStream *stream;
-
- dir = g_build_filename (trashdir, "files", trashfile, relative_path, NULL);
- file = g_file_new_for_path (dir);
-
- error = NULL;
- stream = g_file_read (file,
- G_VFS_JOB (job)->cancellable,
- &error);
- g_object_unref (file);
-
- if (stream)
- {
- g_vfs_job_open_for_read_set_handle (job, stream);
- g_vfs_job_open_for_read_set_can_seek (job,
- g_seekable_can_seek (G_SEEKABLE (stream)));
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-
- g_free (trashdir);
- g_free (trashfile);
- g_free (relative_path);
- g_free (topdir);
- }
-}
-
-static void
-do_read (GVfsBackend *backend,
- GVfsJobRead *job,
- GVfsBackendHandle _handle,
- char *buffer,
- gsize bytes_requested)
-{
- GInputStream *stream;
- gssize res;
- GError *error;
-
- stream = G_INPUT_STREAM (_handle);
-
- error = NULL;
- res = g_input_stream_read (stream,
- buffer, bytes_requested,
- G_VFS_JOB (job)->cancellable,
- &error);
-
- if (res != -1)
- {
- g_vfs_job_read_set_size (job, res);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-}
-
-static void
-do_seek_on_read (GVfsBackend *backend,
- GVfsJobSeekRead *job,
- GVfsBackendHandle _handle,
- goffset offset,
- GSeekType type)
-{
- GFileInputStream *stream;
- GError *error;
-
- stream = G_FILE_INPUT_STREAM (_handle);
-
- error = NULL;
- if (g_seekable_seek (G_SEEKABLE (stream),
- offset, type,
- G_VFS_JOB (job)->cancellable,
- &error))
- {
- g_vfs_job_seek_read_set_offset (job,
- g_seekable_tell (G_SEEKABLE (stream)));
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-}
-
-static void
-do_close_read (GVfsBackend *backend,
- GVfsJobCloseRead *job,
- GVfsBackendHandle _handle)
-{
- GInputStream *stream;
- GError *error;
-
- stream = G_INPUT_STREAM (_handle);
-
- error = NULL;
- if (g_input_stream_close (stream,
- G_VFS_JOB (job)->cancellable,
- &error))
- g_vfs_job_succeeded (G_VFS_JOB (job));
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-}
-
-typedef struct {
- GVfsBackend *backend;
- GList *names;
-} SetHasTrashFilesData;
-
-static gboolean
-set_trash_files (gpointer _data)
-{
- GVfsMonitor *vfs_monitor, *file_vfs_monitor;
- GVfsBackendTrash *trash_backend;
- SetHasTrashFilesData *data = _data;
- GList *new_list, *old_list;
- guint old_count, new_count;
-
- trash_backend = G_VFS_BACKEND_TRASH (data->backend);
- new_list = g_list_sort (data->names, (GCompareFunc)strcmp);
- g_slice_free (SetHasTrashFilesData, data);
-
- old_list = trash_backend->top_files;
- old_count = trash_backend->num_top_files;
-
- /* do the replacement now, before we send notifications. */
- new_count = g_list_length (new_list);
- trash_backend->num_top_files = new_count;
- trash_backend->top_files = new_list;
-
- G_LOCK (root_monitor);
- vfs_monitor = NULL;
- if (trash_backend->vfs_monitor)
- vfs_monitor = g_object_ref (trash_backend->vfs_monitor);
-
- file_vfs_monitor = NULL;
- if (trash_backend->file_vfs_monitor)
- file_vfs_monitor = g_object_ref (trash_backend->file_vfs_monitor);
- G_UNLOCK (root_monitor);
-
- if (vfs_monitor)
- {
- GList *added, *removed;
- GList *new, *old, *l;
- char *name;
- int cmp;
-
- added = NULL;
- removed = NULL;
-
- new = new_list;
- old = old_list;
-
- while (new != NULL || old != NULL)
- {
- if (new == NULL)
- {
- /* old deleted */
- removed = g_list_prepend (removed, old->data);
- old = old->next;
- }
- else if (old == NULL)
- {
- /* new added */
- added = g_list_prepend (added, new->data);
- new = new->next;
- }
- else if ((cmp = strcmp (new->data, old->data)) == 0)
- {
- old = old->next;
- new = new->next;
- }
- else if (cmp < 0)
- {
- /* new added */
- added = g_list_prepend (added, new->data);
- new = new->next;
- }
- else if (cmp > 0)
- {
- /* old deleted */
- removed = g_list_prepend (removed, old->data);
- old = old->next;
- }
- }
-
- for (l = removed; l != NULL; l = l->next)
- {
- name = g_strconcat ("/", l->data, NULL);
- g_vfs_monitor_emit_event (vfs_monitor,
- G_FILE_MONITOR_EVENT_DELETED,
- name,
- NULL);
- g_free (name);
- }
- g_list_free (removed);
-
- for (l = added; l != NULL; l = l->next)
- {
- name = g_strconcat ("/", l->data, NULL);
- g_vfs_monitor_emit_event (vfs_monitor,
- G_FILE_MONITOR_EVENT_CREATED,
- name,
- NULL);
- g_free (name);
- }
- g_list_free (added);
-
- if (new_count != old_count)
- {
- /* trash::item-count changed. */
- /* icon change only ever occurs when item-count also changes */
- g_vfs_monitor_emit_event (vfs_monitor,
- G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED,
- "/",
- NULL);
- }
-
- g_object_unref (vfs_monitor);
- }
-
- if (file_vfs_monitor)
- {
- if (new_count != old_count)
- {
- /* trash::item-count changed. */
- /* icon change only ever occurs when item-count also changes */
- g_vfs_monitor_emit_event (file_vfs_monitor,
- G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED,
- "/",
- NULL);
- }
-
- g_object_unref (file_vfs_monitor);
- }
-
- g_list_foreach (old_list, (GFunc)g_free, NULL);
- g_list_free (old_list);
-
- return FALSE;
-}
-static void
-queue_set_trash_files (GVfsBackend *backend,
- GList *names)
-{
- SetHasTrashFilesData *data;
-
- data = g_slice_new (SetHasTrashFilesData);
- data->backend = backend;
- data->names = names;
- g_idle_add (set_trash_files, data);
-}
-
-static void
-add_extra_trash_info (GFileInfo *file_info,
- const char *topdir,
- const char *info_dir,
- const char *filename,
- const char *relative_path)
-{
- char *info_filename;
- char *info_path;
- char *orig_path, *orig_path_key, *orig_path_unescaped, *date;
- GKeyFile *keyfile;
- char *display_name;
- char *desc;
-
- /* Override all writability */
- g_file_info_set_attribute_boolean (file_info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
- FALSE);
- g_file_info_set_attribute_boolean (file_info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE,
- FALSE);
- g_file_info_set_attribute_boolean (file_info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME,
- FALSE);
- g_file_info_set_attribute_boolean (file_info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH,
- FALSE);
-
- /* But we can delete */
- g_file_info_set_attribute_boolean (file_info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE,
- TRUE);
-
- info_filename = g_strconcat (filename, ".trashinfo", NULL);
- info_path = g_build_filename (info_dir, info_filename, NULL);
- g_free (info_filename);
-
- keyfile = g_key_file_new ();
- if (g_key_file_load_from_file (keyfile, info_path, G_KEY_FILE_NONE, NULL))
- {
- orig_path_key = g_key_file_get_string (keyfile, "Trash Info", "Path", NULL);
- if (orig_path_key)
- {
- orig_path_unescaped = g_uri_unescape_string (orig_path_key, "");
-
- if (orig_path_unescaped)
- {
- if (g_path_is_absolute (orig_path_unescaped))
- orig_path = g_build_filename (orig_path_unescaped, relative_path, NULL);
- else
- orig_path = g_build_filename (topdir, orig_path_unescaped, relative_path, NULL);
- g_free (orig_path_unescaped);
-
- /* Set display name and edit name based of original basename */
- display_name = g_filename_display_basename (orig_path);
- g_file_info_set_edit_name (file_info, display_name);
-
- if (strstr (display_name, "\357\277\275") != NULL)
- {
- char *p = display_name;
- display_name = g_strconcat (display_name, _(" (invalid encoding)"), NULL);
- g_free (p);
-
- g_file_info_set_attribute_string (file_info, G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME, NULL);
- }
- else
- {
- g_file_info_set_attribute_string (file_info, G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME, display_name);
- g_file_info_set_attribute_string (file_info, G_FILE_ATTRIBUTE_STANDARD_COPY_NAME, display_name);
- }
-
- g_file_info_set_display_name (file_info, display_name);
-
- desc = g_strdup_printf (_("%s (in trash)"), display_name);
- g_file_info_set_attribute_string (file_info, G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION, desc);
- g_free (desc);
-
- g_free (display_name);
-
- g_file_info_set_attribute_byte_string (file_info,
- "trash::orig-path",
- orig_path);
- g_free (orig_path);
- }
-
- g_free (orig_path_key);
- }
-
- date = g_key_file_get_string (keyfile, "Trash Info", "DeletionDate", NULL);
- if (date && g_utf8_validate (date, -1, NULL))
- g_file_info_set_attribute_string (file_info,
- "trash::deletion-date",
- date);
- g_free (date);
- }
- g_key_file_free (keyfile);
- g_free (info_path);
-}
-
-static void
-enumerate_root_trashdir (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *topdir,
- const char *trashdir,
- GList **names)
-{
- GFile *file, *files_file;
- GFileEnumerator *enumerator;
- char *info_dir;
-
- info_dir = g_build_filename (trashdir, "info", NULL);
-
- file = g_file_new_for_path (trashdir);
- files_file = g_file_get_child (file, "files");
- enumerator =
- g_file_enumerate_children (files_file,
- job ? job->attributes : G_FILE_ATTRIBUTE_STANDARD_NAME,
- job ? job->flags : 0,
- job ? G_VFS_JOB (job)->cancellable : NULL,
- NULL);
- g_object_unref (files_file);
- g_object_unref (file);
-
- if (enumerator)
- {
- GFileInfo *info;
-
- while ((info = g_file_enumerator_next_file (enumerator,
- job ? G_VFS_JOB (job)->cancellable : NULL,
- NULL)) != NULL)
- {
- const char *name;
- char *new_name, *new_name_escaped;
-
- name = g_file_info_get_name (info);
-
- /* Get the display name, etc */
- add_extra_trash_info (info,
- topdir,
- info_dir,
- name,
- NULL);
-
- /* Update the name to also have the trash dir */
- new_name = g_build_filename (trashdir, name, NULL);
- new_name_escaped = escape_pathname (new_name);
- g_free (new_name);
- g_file_info_set_name (info, new_name_escaped);
-
- *names = g_list_prepend (*names, new_name_escaped); /* Takes over ownership */
-
- if (job)
- g_vfs_job_enumerate_add_info (job, info);
- g_object_unref (info);
- }
-
- g_file_enumerator_close (enumerator,
- job ? G_VFS_JOB (job)->cancellable : NULL,
- NULL);
- g_object_unref (enumerator);
- }
-
- g_free (info_dir);
-}
-
-static GList *
-enumerate_root (GVfsBackend *backend,
- GVfsJobEnumerate *job)
-{
- GList *trashdirs, *l;
- char *trashdir;
- char *topdir;
- GList *names;
-
- trashdirs = list_trash_dirs ();
-
- names = NULL;
- for (l = trashdirs; l != NULL; l = l->next)
- {
- trashdir = l->data;
- topdir = get_top_dir_for_trash_dir (trashdir);
-
- enumerate_root_trashdir (backend, job, topdir, trashdir, &names);
- g_free (trashdir);
- g_free (topdir);
- }
- g_list_free (trashdirs);
-
- if (job)
- g_vfs_job_enumerate_done (job);
-
- return names;
-}
-
-static void
-do_enumerate (GVfsBackend *backend,
- GVfsJobEnumerate *job,
- const char *filename,
- GFileAttributeMatcher *attribute_matcher,
- GFileQueryInfoFlags flags)
-{
- char *trashdir, *topdir, *relative_path, *trashfile;
- GList *names;
-
- if (!decode_path (filename, &trashdir, &trashfile, &relative_path, &topdir))
- {
- /* Always succeeds */
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- names = enumerate_root (backend, job);
- queue_set_trash_files (backend, names);
- }
- else
- {
- GFile *file;
- GFileEnumerator *enumerator;
- GFileInfo *info;
- char *dir;
- GError *error;
-
- dir = g_build_filename (trashdir, "files", trashfile, relative_path, NULL);
- file = g_file_new_for_path (dir);
- error = NULL;
- enumerator =
- g_file_enumerate_children (file,
- job->attributes,
- job->flags,
- G_VFS_JOB (job)->cancellable,
- &error);
- g_free (dir);
- g_object_unref (file);
-
- if (enumerator)
- {
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- while ((info = g_file_enumerator_next_file (enumerator,
- G_VFS_JOB (job)->cancellable,
- NULL)) != NULL)
- {
- g_vfs_job_enumerate_add_info (job, info);
- g_object_unref (info);
- }
-
- g_file_enumerator_close (enumerator,
- G_VFS_JOB (job)->cancellable,
- NULL);
- g_object_unref (enumerator);
-
- g_vfs_job_enumerate_done (job);
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-
- g_free (trashdir);
- g_free (trashfile);
- g_free (relative_path);
- g_free (topdir);
- }
-}
-
-static void
-do_query_info (GVfsBackend *backend,
- GVfsJobQueryInfo *job,
- const char *filename,
- GFileQueryInfoFlags flags,
- GFileInfo *info,
- GFileAttributeMatcher *matcher)
-{
- char *trashdir, *topdir, *relative_path, *trashfile;
- GIcon *icon;
-
- if (!decode_path (filename, &trashdir, &trashfile, &relative_path, &topdir))
- {
- GVfsBackendTrash *trash_backend = G_VFS_BACKEND_TRASH (backend);
-
- /* The trash:/// root */
- g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
- g_file_info_set_name (info, "/");
- /* Translators: this is the display name of the backend */
- g_file_info_set_display_name (info, _("Trash"));
- g_file_info_set_content_type (info, "inode/directory");
-
- if (trash_backend->top_files != NULL)
- icon = g_themed_icon_new ("user-trash-full");
- else
- icon = g_themed_icon_new ("user-trash");
-
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
-
- g_file_info_set_attribute_boolean (info,
- G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL,
- TRUE);
- g_file_info_set_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_READ,
- TRUE);
- g_file_info_set_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
- FALSE);
- g_file_info_set_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE,
- FALSE);
- g_file_info_set_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE,
- FALSE);
- g_file_info_set_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH,
- FALSE);
- g_file_info_set_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME,
- FALSE);
- g_file_info_set_attribute_uint32 (info,
- G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT,
- trash_backend->num_top_files);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- GFile *file;
- GFileInfo *local_info;
- char *path;
- GError *error;
- char *info_dir;
- char *basename;
-
- path = g_build_filename (trashdir, "files", trashfile, relative_path, NULL);
- file = g_file_new_for_path (path);
- g_free (path);
-
- error = NULL;
- local_info = g_file_query_info (file,
- job->attributes,
- job->flags,
- G_VFS_JOB (job)->cancellable,
- &error);
- g_object_unref (file);
-
- if (local_info)
- {
- g_file_info_copy_into (local_info, info);
-
- basename = g_path_get_basename (filename);
- g_file_info_set_name (info, basename);
- g_free (basename);
-
- info_dir = g_build_filename (trashdir, "info", NULL);
- add_extra_trash_info (info,
- topdir,
- info_dir,
- trashfile,
- relative_path);
- g_free (info_dir);
-
- g_object_unref (local_info);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-
- g_free (trashdir);
- g_free (trashfile);
- g_free (relative_path);
- g_free (topdir);
- }
-}
-
-static void
-do_delete (GVfsBackend *backend,
- GVfsJobDelete *job,
- const char *filename)
-{
- char *trashdir, *topdir, *relative_path, *trashfile;
-
- if (!decode_path (filename, &trashdir, &trashfile, &relative_path, &topdir))
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_PERMISSION_DENIED,
- _("Can't delete trash"));
- else
- {
- GFile *file;
- GError *error;
- char *path, *info_filename, *info_path;
-
- path = g_build_filename (trashdir, "files", trashfile, relative_path, NULL);
- file = g_file_new_for_path (path);
- g_free (path);
-
- error = NULL;
- if (g_file_delete (file,
- G_VFS_JOB (job)->cancellable,
- &error))
- {
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- if (relative_path == NULL)
- {
- info_filename = g_strconcat (trashfile, ".trashinfo", NULL);
- info_path = g_build_filename (trashdir, "info", info_filename, NULL);
- g_free (info_filename);
- g_unlink (info_path);
- g_free (info_path);
- }
- }
- else
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
-
- g_object_unref (file);
-
- g_free (trashdir);
- g_free (trashfile);
- g_free (relative_path);
- g_free (topdir);
- }
-}
-
-typedef struct {
- GVfsMonitor *vfs_monitor;
- GObject *monitor;
- GFile *base_file;
- char *base_path;
-} MonitorProxy;
-
-static void
-monitor_proxy_free (MonitorProxy *proxy)
-{
- g_object_unref (proxy->monitor);
- g_object_unref (proxy->base_file);
- g_free (proxy->base_path);
- g_free (proxy);
-}
-
-static char *
-proxy_get_trash_path (MonitorProxy *proxy,
- GFile *file)
-{
- char *file_path, *basename;
-
- if (g_file_equal (file, proxy->base_file))
- file_path = g_strdup (proxy->base_path);
- else
- {
- basename = g_file_get_relative_path (proxy->base_file, file);
- file_path = g_build_filename (proxy->base_path, basename, NULL);
- g_free (basename);
- }
-
- return file_path;
-}
-
-static void
-proxy_changed (GFileMonitor* monitor,
- GFile* file,
- GFile* other_file,
- GFileMonitorEvent event_type,
- MonitorProxy *proxy)
-{
- char *file_path;
- char *other_file_path;
-
- file_path = proxy_get_trash_path (proxy, file);
-
- if (other_file)
- other_file_path = proxy_get_trash_path (proxy, other_file);
- else
- other_file_path = NULL;
-
- g_vfs_monitor_emit_event (proxy->vfs_monitor,
- event_type,
- file_path,
- other_file_path);
-
- g_free (file_path);
- g_free (other_file_path);
-}
-
-static void
-trash_dir_changed (GFileMonitor *monitor,
- GFile *child,
- GFile *other_file,
- GFileMonitorEvent event_type,
- GVfsBackendTrash *backend)
-{
- if (event_type == G_FILE_MONITOR_EVENT_DELETED ||
- event_type == G_FILE_MONITOR_EVENT_CREATED)
- schedule_update_trash_files (backend, FALSE);
-}
-
-static void
-update_trash_dir_monitors (GVfsBackendTrash *backend)
-{
- GFile *file;
- char *trashdir;
- GFileMonitor *monitor;
- GList *monitors, *l, *trashdirs;
-
- /* Remove old monitors */
-
- G_LOCK (root_monitor);
- monitors = backend->trash_dir_monitors;
- backend->trash_dir_monitors = NULL;
- G_UNLOCK (root_monitor);
-
- for (l = monitors; l != NULL; l = l->next)
- {
- monitor = l->data;
- g_object_unref (monitor);
- }
-
- g_list_free (monitors);
-
- monitors = NULL;
-
- /* Add new ones for all trash dirs */
-
- trashdirs = list_trash_dirs ();
- for (l = trashdirs; l != NULL; l = l->next)
- {
- char *filesdir;
-
- trashdir = l->data;
-
- filesdir = g_build_filename (trashdir, "files", NULL);
- file = g_file_new_for_path (filesdir);
- g_free (filesdir);
- monitor = g_file_monitor_directory (file, 0, NULL, NULL);
- g_object_unref (file);
-
- if (monitor)
- {
- g_signal_connect (monitor, "changed", G_CALLBACK (trash_dir_changed), backend);
- monitors = g_list_prepend (monitors, monitor);
- }
- g_free (trashdir);
- }
-
- g_list_free (trashdirs);
-
- G_LOCK (root_monitor);
- backend->trash_dir_monitors = g_list_concat (backend->trash_dir_monitors, monitors);
- G_UNLOCK (root_monitor);
-}
-
-
-static gpointer
-update_trash_files_in_thread (GVfsBackendTrash *backend)
-{
- GList *names;
- gboolean do_monitors;
-
- G_LOCK (root_monitor);
- backend->trash_file_update_running = TRUE;
- backend->trash_file_update_scheduled = FALSE;
- do_monitors = backend->trash_file_update_monitors_scheduled;
- backend->trash_file_update_monitors_scheduled = FALSE;
- G_UNLOCK (root_monitor);
-
- loop:
- if (do_monitors)
- update_trash_dir_monitors (backend);
-
- names = enumerate_root (G_VFS_BACKEND (backend), NULL);
- queue_set_trash_files (G_VFS_BACKEND (backend), names);
-
- G_LOCK (root_monitor);
- if (backend->trash_file_update_scheduled)
- {
- backend->trash_file_update_scheduled = FALSE;
- do_monitors = backend->trash_file_update_monitors_scheduled;
- backend->trash_file_update_monitors_scheduled = FALSE;
- G_UNLOCK (root_monitor);
- goto loop;
- }
-
- backend->trash_file_update_running = FALSE;
- G_UNLOCK (root_monitor);
-
- return NULL;
-
-}
-
-static void
-schedule_update_trash_files (GVfsBackendTrash *backend,
- gboolean update_trash_dirs)
-{
- G_LOCK (root_monitor);
-
- backend->trash_file_update_scheduled = TRUE;
- backend->trash_file_update_monitors_scheduled |= update_trash_dirs;
-
- if (!backend->trash_file_update_running)
- g_thread_create ((GThreadFunc)update_trash_files_in_thread, backend, FALSE, NULL);
-
- G_UNLOCK (root_monitor);
-}
-
-static void
-mounts_changed (GUnixMountMonitor *mount_monitor,
- GVfsBackendTrash *backend)
-{
- schedule_update_trash_files (backend, TRUE);
-}
-
-static void
-vfs_monitor_gone (gpointer data,
- GObject *where_the_object_was)
-{
- GVfsBackendTrash *backend;
-
- backend = G_VFS_BACKEND_TRASH (data);
-
- G_LOCK (root_monitor);
- g_assert ((void *)backend->vfs_monitor == (void *)where_the_object_was);
- backend->vfs_monitor = NULL;
- g_object_unref (backend->mount_monitor);
- backend->mount_monitor = NULL;
-
- g_list_foreach (backend->trash_dir_monitors, (GFunc)g_object_unref, NULL);
- g_list_free (backend->trash_dir_monitors);
- backend->trash_dir_monitors = NULL;
-
- backend->trash_file_update_scheduled = FALSE;
- backend->trash_file_update_monitors_scheduled = FALSE;
-
- G_UNLOCK (root_monitor);
-}
-
-static GVfsMonitor *
-do_create_root_monitor (GVfsBackend *backend)
-{
- GVfsBackendTrash *trash_backend;
- GVfsMonitor *vfs_monitor;
- gboolean created;
-
- trash_backend = G_VFS_BACKEND_TRASH (backend);
-
- created = FALSE;
- G_LOCK (root_monitor);
- if (trash_backend->vfs_monitor == NULL)
- {
- trash_backend->vfs_monitor = g_vfs_monitor_new (backend);
- created = TRUE;
- }
-
- vfs_monitor = trash_backend->vfs_monitor;
- G_UNLOCK (root_monitor);
-
- if (created)
- {
- update_trash_dir_monitors (trash_backend);
- trash_backend->mount_monitor = g_unix_mount_monitor_new ();
- g_signal_connect (trash_backend->mount_monitor,
- "mounts_changed", G_CALLBACK (mounts_changed), backend);
-
- g_object_weak_ref (G_OBJECT (vfs_monitor),
- vfs_monitor_gone,
- backend);
-
- }
-
- return vfs_monitor;
-}
-
-static void
-do_create_dir_monitor (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags)
-{
- char *trashdir, *topdir, *relative_path, *trashfile;
- GVfsMonitor *vfs_monitor;
-
- if (!decode_path (filename, &trashdir, &trashfile, &relative_path, &topdir))
- {
- /* The trash:/// root */
- vfs_monitor = do_create_root_monitor (backend);
-
- g_vfs_job_create_monitor_set_monitor (job,
- vfs_monitor);
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- g_object_unref (vfs_monitor);
- }
- else
- {
- GFile *file;
- char *path;
- GFileMonitor *monitor;
- MonitorProxy *proxy;
-
- path = g_build_filename (trashdir, "files", trashfile, relative_path, NULL);
- file = g_file_new_for_path (path);
- g_free (path);
-
- monitor = g_file_monitor_directory (file,
- flags,
- G_VFS_JOB (job)->cancellable,
- NULL);
-
- if (monitor)
- {
- proxy = g_new0 (MonitorProxy, 1);
- proxy->vfs_monitor = g_vfs_monitor_new (backend);
- proxy->monitor = G_OBJECT (monitor);
- proxy->base_path = g_strdup (filename);
- proxy->base_file = g_object_ref (file);
-
- g_object_set_data_full (G_OBJECT (proxy->vfs_monitor), "monitor-proxy", proxy,
- (GDestroyNotify) monitor_proxy_free);
- g_signal_connect (monitor, "changed", G_CALLBACK (proxy_changed), proxy);
-
- g_vfs_job_create_monitor_set_monitor (job,
- proxy->vfs_monitor);
- g_object_unref (proxy->vfs_monitor);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Trash directory notification not supported"));
- }
- g_object_unref (file);
-
- g_free (trashdir);
- g_free (trashfile);
- g_free (relative_path);
- g_free (topdir);
- }
-}
-
-static void
-do_create_file_monitor (GVfsBackend *backend,
- GVfsJobCreateMonitor *job,
- const char *filename,
- GFileMonitorFlags flags)
-{
- GVfsBackendTrash *trash_backend;
- char *trashdir, *topdir, *relative_path, *trashfile;
- GVfsMonitor *vfs_monitor;
-
- trash_backend = G_VFS_BACKEND_TRASH (backend);
-
- if (!decode_path (filename, &trashdir, &trashfile, &relative_path, &topdir))
- {
- /* The trash:/// root */
- G_LOCK (root_monitor);
- if (trash_backend->file_vfs_monitor == NULL)
- trash_backend->file_vfs_monitor = g_vfs_monitor_new (backend);
-
- vfs_monitor = trash_backend->file_vfs_monitor;
- g_object_add_weak_pointer (G_OBJECT (vfs_monitor), (gpointer *)&trash_backend->file_vfs_monitor);
- G_UNLOCK (root_monitor);
-
- g_vfs_job_create_monitor_set_monitor (job, vfs_monitor);
- g_vfs_job_succeeded (G_VFS_JOB (job));
- g_object_unref (vfs_monitor);
- }
- else
- {
- GFile *file;
- char *path;
- GFileMonitor *monitor;
- MonitorProxy *proxy;
-
- path = g_build_filename (trashdir, "files", trashfile, relative_path, NULL);
- file = g_file_new_for_path (path);
- g_free (path);
-
- monitor = g_file_monitor_file (file,
- flags,
- G_VFS_JOB (job)->cancellable,
- NULL);
-
- if (monitor)
- {
- proxy = g_new0 (MonitorProxy, 1);
- proxy->vfs_monitor = g_vfs_monitor_new (backend);
- proxy->monitor = G_OBJECT (monitor);
- proxy->base_path = g_strdup (filename);
- proxy->base_file = g_object_ref (file);
-
- g_object_set_data_full (G_OBJECT (proxy->vfs_monitor), "monitor-proxy", proxy, (GDestroyNotify) monitor_proxy_free);
- g_signal_connect (monitor, "changed", G_CALLBACK (proxy_changed), proxy);
-
- g_vfs_job_create_monitor_set_monitor (job,
- proxy->vfs_monitor);
- g_object_unref (proxy->vfs_monitor);
-
- g_vfs_job_succeeded (G_VFS_JOB (job));
- }
- else
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Trash directory notification not supported"));
- }
- g_object_unref (file);
-
- g_free (trashdir);
- g_free (trashfile);
- g_free (relative_path);
- g_free (topdir);
- }
-}
-
-static void
-do_pull (GVfsBackend *backend,
- GVfsJobPull *job,
- const char *filename,
- const char *local_destination,
- GFileCopyFlags flags,
- gboolean remove_source,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data)
-{
- GFile *dst_file;
- GFile *src_file;
- char *trashdir, *topdir, *relative_path, *trashfile;
- char *src_path;
- gboolean res;
- GError *error = NULL;
-
- res = decode_path (filename, &trashdir, &trashfile, &relative_path, &topdir);
-
- if (res == FALSE)
- {
- g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
- G_IO_ERROR_IS_DIRECTORY,
- _("Can't open directory"));
- return;
- }
-
- dst_file = g_file_new_for_path (local_destination);
-
- src_path = g_build_filename (trashdir, "files", trashfile, relative_path, NULL);
- src_file = g_file_new_for_path (src_path);
-
- if (remove_source)
- res = g_file_move (src_file,
- dst_file,
- flags,
- G_VFS_JOB (job)->cancellable,
- progress_callback,
- progress_callback_data,
- &error);
- else
- res = g_file_copy (src_file,
- dst_file,
- flags,
- G_VFS_JOB (job)->cancellable,
- progress_callback,
- progress_callback_data,
- &error);
-
- if (res == FALSE)
- {
- g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
- g_error_free (error);
- }
- else
- {
- g_vfs_job_succeeded (G_VFS_JOB (job));
-
- if (relative_path == NULL)
- {
- char *info_filename, *info_path;
-
- info_filename = g_strconcat (trashfile, ".trashinfo", NULL);
- info_path = g_build_filename (trashdir, "info", info_filename, NULL);
- g_free (info_filename);
- g_unlink (info_path);
- g_free (info_path);
- }
- }
-
- g_object_unref (src_file);
- g_object_unref (dst_file);
-
- g_free (trashdir);
- g_free (trashfile);
- g_free (relative_path);
- g_free (topdir);
-}
-
-
-static void
-g_vfs_backend_trash_class_init (GVfsBackendTrashClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
-
- gobject_class->finalize = g_vfs_backend_trash_finalize;
-
- backend_class->mount = do_mount;
- backend_class->open_for_read = do_open_for_read;
- backend_class->read = do_read;
- backend_class->seek_on_read = do_seek_on_read;
- backend_class->close_read = do_close_read;
- backend_class->query_info = do_query_info;
- backend_class->enumerate = do_enumerate;
- backend_class->delete = do_delete;
- backend_class->create_dir_monitor = do_create_dir_monitor;
- backend_class->create_file_monitor = do_create_file_monitor;
- backend_class->pull = do_pull;
-}
diff --git a/daemon/gvfsbackendtrash.h b/daemon/gvfsbackendtrash.h
deleted file mode 100644
index ee13ae37..00000000
--- a/daemon/gvfsbackendtrash.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_BACKEND_TRASH_H__
-#define __G_VFS_BACKEND_TRASH_H__
-
-#include <gvfsbackend.h>
-#include <gmountspec.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_BACKEND_TRASH (g_vfs_backend_trash_get_type ())
-#define G_VFS_BACKEND_TRASH(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND_TRASH, GVfsBackendTrash))
-#define G_VFS_BACKEND_TRASH_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND_TRASH, GVfsBackendTrashClass))
-#define G_VFS_IS_BACKEND_TRASH(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND_TRASH))
-#define G_VFS_IS_BACKEND_TRASH_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND_TRASH))
-#define G_VFS_BACKEND_TRASH_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND_TRASH, GVfsBackendTrashClass))
-
-typedef struct _GVfsBackendTrash GVfsBackendTrash;
-typedef struct _GVfsBackendTrashClass GVfsBackendTrashClass;
-
-struct _GVfsBackendTrashClass
-{
- GVfsBackendClass parent_class;
-};
-
-GType g_vfs_backend_trash_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __G_VFS_BACKEND_TRASH_H__ */
diff --git a/daemon/gvfschannel.c b/daemon/gvfschannel.c
deleted file mode 100644
index 01c40e67..00000000
--- a/daemon/gvfschannel.c
+++ /dev/null
@@ -1,704 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <fcntl.h>
-
-#include <glib.h>
-#include <glib-object.h>
-#include <glib/gi18n.h>
-#include <gvfsreadchannel.h>
-#include <gio/gunixinputstream.h>
-#include <gio/gunixoutputstream.h>
-#include <gvfsdaemonprotocol.h>
-#include <gvfsdaemonutils.h>
-#include <gvfsjobcloseread.h>
-#include <gvfsjobclosewrite.h>
-
-static void g_vfs_channel_job_source_iface_init (GVfsJobSourceIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (GVfsChannel, g_vfs_channel, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (G_VFS_TYPE_JOB_SOURCE,
- g_vfs_channel_job_source_iface_init))
-
-/* TODO: Real P_() */
-#define P_(_x) (_x)
-
-enum {
- PROP_0,
- PROP_BACKEND
-};
-
-typedef struct
-{
- GVfsChannel *channel;
- GInputStream *command_stream;
- char buffer[G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SIZE];
- int buffer_size;
- char *data;
- gsize data_len;
- gsize data_pos;
-} RequestReader;
-
-typedef struct {
- guint32 command;
- guint32 arg1;
- guint32 arg2;
- guint32 seq_nr;
-
- gpointer data;
- gsize data_len;
- gboolean cancelled;
-} Request;
-
-struct _GVfsChannelPrivate
-{
- GVfsBackend *backend;
- gboolean connection_closed;
- GInputStream *command_stream;
- GOutputStream *reply_stream;
- int remote_fd;
- gboolean cancelled;
-
- GVfsBackendHandle backend_handle;
- GVfsJob *current_job;
- guint32 current_job_seq_nr;
-
- GList *queued_requests;
-
- RequestReader *request_reader;
-
- char reply_buffer[G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE];
- int reply_buffer_pos;
-
- const char *output_data; /* Owned by job */
- gsize output_data_size;
- gsize output_data_pos;
-};
-
-static void start_request_reader (GVfsChannel *channel);
-static void g_vfs_channel_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-static void g_vfs_channel_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-
-
-static void
-g_vfs_channel_finalize (GObject *object)
-{
- GVfsChannel *channel;
-
- channel = G_VFS_CHANNEL (object);
-
- if (channel->priv->current_job)
- g_object_unref (channel->priv->current_job);
- channel->priv->current_job = NULL;
-
- if (channel->priv->reply_stream)
- g_object_unref (channel->priv->reply_stream);
- channel->priv->reply_stream = NULL;
-
- if (channel->priv->request_reader)
- channel->priv->request_reader->channel = NULL;
- channel->priv->request_reader = NULL;
-
- if (channel->priv->command_stream)
- g_object_unref (channel->priv->command_stream);
- channel->priv->command_stream = NULL;
-
- if (channel->priv->remote_fd != -1)
- close (channel->priv->remote_fd);
-
- if (channel->priv->backend)
- g_object_unref (channel->priv->backend);
-
- g_assert (channel->priv->backend_handle == NULL);
-
- if (G_OBJECT_CLASS (g_vfs_channel_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_channel_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_channel_job_source_iface_init (GVfsJobSourceIface *iface)
-{
-}
-
-static void
-g_vfs_channel_class_init (GVfsChannelClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (GVfsChannelPrivate));
-
- gobject_class->finalize = g_vfs_channel_finalize;
- gobject_class->set_property = g_vfs_channel_set_property;
- gobject_class->get_property = g_vfs_channel_get_property;
-
- g_object_class_install_property (gobject_class,
- PROP_BACKEND,
- g_param_spec_object ("backend",
- P_("Backend"),
- P_("Backend implementation to use"),
- G_VFS_TYPE_BACKEND,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
-}
-
-static void
-g_vfs_channel_init (GVfsChannel *channel)
-{
- int socket_fds[2];
- int ret;
-
- channel->priv = G_TYPE_INSTANCE_GET_PRIVATE (channel,
- G_VFS_TYPE_CHANNEL,
- GVfsChannelPrivate);
- channel->priv->remote_fd = -1;
-
- ret = socketpair (AF_UNIX, SOCK_STREAM, 0, socket_fds);
- if (ret == -1)
- g_warning ("Error creating socket pair: %d\n", errno);
- else
- {
- channel->priv->command_stream = g_unix_input_stream_new (socket_fds[0], TRUE);
- channel->priv->reply_stream = g_unix_output_stream_new (socket_fds[0], FALSE);
- channel->priv->remote_fd = socket_fds[1];
-
- start_request_reader (channel);
- }
-}
-
-static void
-g_vfs_channel_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GVfsChannel *channel = G_VFS_CHANNEL (object);
-
- switch (prop_id)
- {
- case PROP_BACKEND:
- if (channel->priv->backend)
- g_object_unref (channel->priv->backend);
- channel->priv->backend = G_VFS_BACKEND (g_value_dup_object (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-g_vfs_channel_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GVfsChannel *channel = G_VFS_CHANNEL (object);
-
- switch (prop_id)
- {
- case PROP_BACKEND:
- g_value_set_object (value, channel->priv->backend);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-g_vfs_channel_connection_closed (GVfsChannel *channel)
-{
- GVfsChannelClass *class;
-
- if (channel->priv->connection_closed)
- return;
- channel->priv->connection_closed = TRUE;
-
- if (channel->priv->current_job == NULL &&
- channel->priv->backend_handle != NULL)
- {
- class = G_VFS_CHANNEL_GET_CLASS (channel);
-
- channel->priv->current_job = class->close (channel);
- channel->priv->current_job_seq_nr = 0;
- g_vfs_job_source_new_job (G_VFS_JOB_SOURCE (channel), channel->priv->current_job);
- }
- /* Otherwise we'll close when current_job is finished */
-}
-
-static void
-request_reader_free (RequestReader *reader)
-{
- g_object_unref (reader->command_stream);
- g_free (reader->data);
- g_free (reader);
-}
-
-static gboolean
-start_queued_request (GVfsChannel *channel)
-{
- GVfsChannelClass *class;
- Request *req;
- GVfsJob *job;
- GError *error;
- gboolean started_job;
-
- started_job = FALSE;
-
- class = G_VFS_CHANNEL_GET_CLASS (channel);
-
- while (channel->priv->current_job == NULL &&
- channel->priv->queued_requests != NULL)
- {
- req = channel->priv->queued_requests->data;
-
- channel->priv->queued_requests =
- g_list_delete_link (channel->priv->queued_requests,
- channel->priv->queued_requests);
-
- error = NULL;
- job = NULL;
- if (req->cancelled)
- {
- error =
- g_error_new_literal (G_IO_ERROR, G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- g_free (req->data); /* Did no pass ownership */
- }
- else
- {
- /* This passes on ownership of req->data */
- job = class->handle_request (channel,
- req->command, req->seq_nr,
- req->arg1, req->arg2,
- req->data, req->data_len,
- &error);
- }
-
- if (job)
- {
- channel->priv->current_job = job;
- channel->priv->current_job_seq_nr = req->seq_nr;
- g_vfs_job_source_new_job (G_VFS_JOB_SOURCE (channel), channel->priv->current_job);
- started_job = TRUE;
- }
- else
- {
- g_vfs_channel_send_error (channel, error);
- g_error_free (error);
- }
-
- g_free (req);
- }
-
- return started_job;
-}
-
-
-/* Ownership of data is passed here to avoid copying it */
-static void
-got_request (GVfsChannel *channel,
- GVfsDaemonSocketProtocolRequest *request,
- gpointer data, gsize data_len)
-{
- Request *req;
- guint32 command, arg1;
- GList *l;
-
- command = g_ntohl (request->command);
- arg1 = g_ntohl (request->arg1);
-
- if (command == G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CANCEL ||
- channel->priv->cancelled)
- {
- if (arg1 == channel->priv->current_job_seq_nr &&
- channel->priv->current_job != NULL)
- g_vfs_job_cancel (channel->priv->current_job);
- else
- {
- for (l = channel->priv->queued_requests; l != NULL; l = l->next)
- {
- req = l->data;
-
- if (req->seq_nr == 0)
- /* We're cancelling something later but this readahead might
- be the actual operation thats replacing it */
- req->cancelled = TRUE;
-
- if (req->seq_nr == arg1)
- {
- req->cancelled = TRUE;
- break;
- }
- }
- }
-
- channel->priv->cancelled = TRUE;
-
- /* Cancel ops get no return */
- g_free (data);
- return;
- }
-
- req = g_new0 (Request, 1);
- req->command = command;
- req->arg1 = arg1;
- req->arg2 = g_ntohl (request->arg2);
- req->seq_nr = g_ntohl (request->seq_nr);
- req->data_len = data_len;
- req->data = data;
-
- channel->priv->queued_requests =
- g_list_append (channel->priv->queued_requests,
- req);
-
- start_queued_request (channel);
-}
-
-static void command_read_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data);
-
-
-static void
-finish_request (RequestReader *reader)
-{
- /* Ownership of reader->data passed here */
- got_request (reader->channel, (GVfsDaemonSocketProtocolRequest *)reader->buffer,
- reader->data, reader->data_len);
- reader->data = NULL;
-
- /* Request more commands immediately, so can get cancel requests */
-
- reader->buffer_size = 0;
- reader->data_len = 0;
- g_input_stream_read_async (reader->command_stream,
- reader->buffer + reader->buffer_size,
- G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SIZE - reader->buffer_size,
- 0, NULL,
- command_read_cb,
- reader);
-}
-
-static void
-data_read_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- RequestReader *reader = user_data;
- GInputStream *stream = G_INPUT_STREAM (source_object);
- gssize count_read;
-
- if (reader->channel == NULL)
- {
- /* Channel was finalized */
- request_reader_free (reader);
- return;
- }
-
- count_read = g_input_stream_read_finish (stream, res, NULL);
-
- if (count_read <= 0)
- {
- reader->channel->priv->request_reader = NULL;
- g_vfs_channel_connection_closed (reader->channel);
- request_reader_free (reader);
- return;
- }
-
- reader->data_pos += count_read;
-
- if (reader->data_pos < reader->data_len)
- {
- g_input_stream_read_async (reader->command_stream,
- reader->data + reader->data_pos,
- reader->data_len - reader->data_pos,
- 0, NULL,
- data_read_cb, reader);
- return;
- }
-
- finish_request (reader);
-}
-
-
-static void
-command_read_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GInputStream *stream = G_INPUT_STREAM (source_object);
- RequestReader *reader = user_data;
- GVfsDaemonSocketProtocolRequest *request;
- guint32 data_len;
- gssize count_read;
-
- if (reader->channel == NULL)
- {
- /* Channel was finalized */
- request_reader_free (reader);
- return;
- }
-
- count_read = g_input_stream_read_finish (stream, res, NULL);
-
- if (count_read <= 0)
- {
- reader->channel->priv->request_reader = NULL;
- g_vfs_channel_connection_closed (reader->channel);
- request_reader_free (reader);
- return;
- }
-
- reader->buffer_size += count_read;
-
- if (reader->buffer_size < G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SIZE)
- {
- g_input_stream_read_async (reader->command_stream,
- reader->buffer + reader->buffer_size,
- G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SIZE - reader->buffer_size,
- 0, NULL,
- command_read_cb, reader);
- return;
- }
-
- request = (GVfsDaemonSocketProtocolRequest *)reader->buffer;
- data_len = g_ntohl (request->data_len);
-
- if (data_len > 0)
- {
- reader->data = g_malloc (data_len);
- reader->data_len = data_len;
- reader->data_pos = 0;
-
- g_input_stream_read_async (reader->command_stream,
- reader->data + reader->data_pos,
- reader->data_len - reader->data_pos,
- 0, NULL,
- data_read_cb, reader);
- return;
- }
-
- finish_request (reader);
-}
-
-static void
-start_request_reader (GVfsChannel *channel)
-{
- RequestReader *reader;
-
- reader = g_new0 (RequestReader, 1);
- reader->channel = channel;
- reader->command_stream = g_object_ref (channel->priv->command_stream);
-
- g_input_stream_read_async (reader->command_stream,
- reader->buffer + reader->buffer_size,
- G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SIZE - reader->buffer_size,
- 0, NULL,
- command_read_cb, reader);
-
- channel->priv->request_reader = reader;
-}
-
-static void
-send_reply_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GOutputStream *output_stream = G_OUTPUT_STREAM (source_object);
- gssize bytes_written;
- GVfsChannel *channel = user_data;
- GVfsChannelClass *class;
- GVfsJob *job;
-
- bytes_written = g_output_stream_write_finish (output_stream, res, NULL);
-
- if (bytes_written <= 0)
- {
- g_vfs_channel_connection_closed (channel);
- goto error_out;
- }
-
- if (channel->priv->reply_buffer_pos < G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE)
- {
- channel->priv->reply_buffer_pos += bytes_written;
-
- /* Write more of reply header if needed */
- if (channel->priv->reply_buffer_pos < G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE)
- {
- g_output_stream_write_async (channel->priv->reply_stream,
- channel->priv->reply_buffer + channel->priv->reply_buffer_pos,
- G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE - channel->priv->reply_buffer_pos,
- 0, NULL,
- send_reply_cb, channel);
- return;
- }
- bytes_written = 0;
- }
-
- channel->priv->output_data_pos += bytes_written;
-
- /* Write more of output_data if needed */
- if (channel->priv->output_data != NULL &&
- channel->priv->output_data_pos < channel->priv->output_data_size)
- {
- g_output_stream_write_async (channel->priv->reply_stream,
- channel->priv->output_data + channel->priv->output_data_pos,
- channel->priv->output_data_size - channel->priv->output_data_pos,
- 0, NULL,
- send_reply_cb, channel);
- return;
- }
-
- error_out:
-
- /* Sent full reply */
- channel->priv->output_data = NULL;
-
- job = channel->priv->current_job;
- channel->priv->current_job = NULL;
- g_vfs_job_emit_finished (job);
-
- class = G_VFS_CHANNEL_GET_CLASS (channel);
-
- if (G_VFS_IS_JOB_CLOSE_READ (job) ||
- G_VFS_IS_JOB_CLOSE_WRITE (job))
- {
- g_vfs_job_source_closed (G_VFS_JOB_SOURCE (channel));
- channel->priv->backend_handle = NULL;
- }
- else if (channel->priv->connection_closed)
- {
-
- channel->priv->current_job = class->close (channel);
- channel->priv->current_job_seq_nr = 0;
- g_vfs_job_source_new_job (G_VFS_JOB_SOURCE (channel), channel->priv->current_job);
- }
- /* Start queued request or readahead */
- else if (!channel->priv->cancelled &&
- !start_queued_request (channel) &&
- class->readahead)
- {
- /* No queued requests, maybe we want to do a readahead call */
- channel->priv->current_job = class->readahead (channel, job);
- channel->priv->current_job_seq_nr = 0;
- if (channel->priv->current_job)
- g_vfs_job_source_new_job (G_VFS_JOB_SOURCE (channel), channel->priv->current_job);
- }
-
- g_object_unref (job);
-}
-
-/* Might be called on an i/o thread */
-void
-g_vfs_channel_send_reply (GVfsChannel *channel,
- GVfsDaemonSocketProtocolReply *reply,
- const void *data,
- gsize data_len)
-{
-
- channel->priv->output_data = data;
- channel->priv->output_data_size = data_len;
- channel->priv->output_data_pos = 0;
-
- if (reply != NULL)
- {
- memcpy (channel->priv->reply_buffer, reply, sizeof (GVfsDaemonSocketProtocolReply));
- channel->priv->reply_buffer_pos = 0;
-
- g_output_stream_write_async (channel->priv->reply_stream,
- channel->priv->reply_buffer,
- G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE,
- 0, NULL,
- send_reply_cb, channel);
- }
- else
- {
- channel->priv->reply_buffer_pos = G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE;
- g_output_stream_write_async (channel->priv->reply_stream,
- channel->priv->output_data,
- channel->priv->output_data_size,
- 0, NULL,
- send_reply_cb, channel);
- }
-}
-
-/* Might be called on an i/o thread
- */
-void
-g_vfs_channel_send_error (GVfsChannel *channel,
- GError *error)
-{
- char *data;
- gsize data_len;
-
- data = g_error_to_daemon_reply (error, channel->priv->current_job_seq_nr, &data_len);
- g_vfs_channel_send_reply (channel, NULL, data, data_len);
-}
-
-int
-g_vfs_channel_steal_remote_fd (GVfsChannel *channel)
-{
- int fd;
- fd = channel->priv->remote_fd;
- channel->priv->remote_fd = -1;
- return fd;
-}
-
-GVfsBackend *
-g_vfs_channel_get_backend (GVfsChannel *channel)
-{
- return channel->priv->backend;
-}
-
-void
-g_vfs_channel_set_backend_handle (GVfsChannel *channel,
- GVfsBackendHandle backend_handle)
-{
- channel->priv->backend_handle = backend_handle;
-}
-
-GVfsBackendHandle
-g_vfs_channel_get_backend_handle (GVfsChannel *channel)
-{
- return channel->priv->backend_handle;
-}
-
-guint32
-g_vfs_channel_get_current_seq_nr (GVfsChannel *channel)
-{
- return channel->priv->current_job_seq_nr;
-}
diff --git a/daemon/gvfschannel.h b/daemon/gvfschannel.h
deleted file mode 100644
index f60b20a2..00000000
--- a/daemon/gvfschannel.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_CHANNEL_H__
-#define __G_VFS_CHANNEL_H__
-
-#include <glib-object.h>
-#include <gvfsjob.h>
-#include <gvfsbackend.h>
-#include <gvfsdaemonprotocol.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_CHANNEL (g_vfs_channel_get_type ())
-#define G_VFS_CHANNEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_CHANNEL, GVfsChannel))
-#define G_VFS_CHANNEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_CHANNEL, GVfsChannelClass))
-#define G_VFS_IS_CHANNEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_CHANNEL))
-#define G_VFS_IS_CHANNEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_CHANNEL))
-#define G_VFS_CHANNEL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_CHANNEL, GVfsChannelClass))
-
-typedef struct _GVfsChannel GVfsChannel;
-typedef struct _GVfsChannelClass GVfsChannelClass;
-typedef struct _GVfsChannelPrivate GVfsChannelPrivate;
-
-struct _GVfsChannel
-{
- GObject parent_instance;
-
- GVfsChannelPrivate *priv;
-};
-
-struct _GVfsChannelClass
-{
- GObjectClass parent_class;
-
- GVfsJob *(*close) (GVfsChannel *channel);
- GVfsJob *(*handle_request) (GVfsChannel *channel,
- guint32 command,
- guint32 seq_nr,
- guint32 arg1,
- guint32 arg2,
- gpointer data,
- gsize data_len,
- GError **error);
- GVfsJob *(*readahead) (GVfsChannel *channel,
- GVfsJob *job);
-};
-
-GType g_vfs_channel_get_type (void) G_GNUC_CONST;
-
-int g_vfs_channel_steal_remote_fd (GVfsChannel *channel);
-GVfsBackend * g_vfs_channel_get_backend (GVfsChannel *channel);
-GVfsBackendHandle g_vfs_channel_get_backend_handle (GVfsChannel *channel);
-void g_vfs_channel_set_backend_handle (GVfsChannel *channel,
- GVfsBackendHandle backend_handle);
-gboolean g_vfs_channel_has_job (GVfsChannel *channel);
-GVfsJob * g_vfs_channel_get_job (GVfsChannel *channel);
-void g_vfs_channel_send_error (GVfsChannel *channel,
- GError *error);
-void g_vfs_channel_send_reply (GVfsChannel *channel,
- GVfsDaemonSocketProtocolReply *reply,
- const void *data,
- gsize data_len);
-guint32 g_vfs_channel_get_current_seq_nr (GVfsChannel *channel);
-
-/* TODO: i/o priority? */
-
-G_END_DECLS
-
-#endif /* __G_VFS_CHANNEL_H__ */
diff --git a/daemon/gvfsdaemon.c b/daemon/gvfsdaemon.c
deleted file mode 100644
index f9f52769..00000000
--- a/daemon/gvfsdaemon.c
+++ /dev/null
@@ -1,1060 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/errno.h>
-#include <errno.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib/gstdio.h>
-#include <glib-object.h>
-#include <dbus-gmain.h>
-#include <gvfsdaemon.h>
-#include <gvfsdaemonprotocol.h>
-#include <gvfsdaemonutils.h>
-#include <gvfsjobmount.h>
-#include <gdbusutils.h>
-
-enum {
- PROP_0
-};
-
-typedef struct {
- char *obj_path;
- DBusObjectPathMessageFunction callback;
- gpointer data;
-} RegisteredPath;
-
-struct _GVfsDaemon
-{
- GObject parent_instance;
-
- GMutex *lock;
- gboolean main_daemon;
-
- GThreadPool *thread_pool;
- DBusConnection *session_bus;
- GHashTable *registered_paths;
- GList *jobs;
- GList *job_sources;
-
- guint exit_tag;
-
- gint mount_counter;
-};
-
-typedef struct {
- GVfsDaemon *daemon;
- char *socket_dir;
- guint io_watch;
- DBusServer *server;
-
- gboolean got_dbus_connection;
- gboolean got_fd_connection;
- int fd;
- DBusConnection *conn;
-} NewConnectionData;
-
-static void g_vfs_daemon_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-static void g_vfs_daemon_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static DBusHandlerResult daemon_message_func (DBusConnection *conn,
- DBusMessage *message,
- gpointer data);
-static DBusHandlerResult peer_to_peer_filter_func (DBusConnection *conn,
- DBusMessage *message,
- gpointer data);
-
-
-G_DEFINE_TYPE (GVfsDaemon, g_vfs_daemon, G_TYPE_OBJECT)
-
-static void
-registered_path_free (RegisteredPath *data)
-{
- g_free (data->obj_path);
- g_free (data);
-}
-
-static void
-g_vfs_daemon_finalize (GObject *object)
-{
- GVfsDaemon *daemon;
-
- daemon = G_VFS_DAEMON (object);
-
- g_assert (daemon->jobs == NULL);
-
- g_hash_table_destroy (daemon->registered_paths);
- g_mutex_free (daemon->lock);
-
- if (G_OBJECT_CLASS (g_vfs_daemon_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_daemon_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_daemon_class_init (GVfsDaemonClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_vfs_daemon_finalize;
- gobject_class->set_property = g_vfs_daemon_set_property;
- gobject_class->get_property = g_vfs_daemon_get_property;
-}
-
-static void
-job_handler_callback (gpointer data,
- gpointer user_data)
-{
- GVfsJob *job = G_VFS_JOB (data);
-
- g_vfs_job_run (job);
-}
-
-static void
-g_vfs_daemon_init (GVfsDaemon *daemon)
-{
- gint max_threads = 1; /* TODO: handle max threads */
- DBusError error;
-
- daemon->lock = g_mutex_new ();
- daemon->session_bus = dbus_bus_get (DBUS_BUS_SESSION, NULL);
- daemon->thread_pool = g_thread_pool_new (job_handler_callback,
- daemon,
- max_threads,
- FALSE, NULL);
- /* TODO: verify thread_pool != NULL in a nicer way */
- g_assert (daemon->thread_pool != NULL);
-
- daemon->mount_counter = 0;
-
- daemon->jobs = NULL;
- daemon->registered_paths =
- g_hash_table_new_full (g_str_hash, g_str_equal,
- NULL, (GDestroyNotify)registered_path_free);
-
- dbus_error_init (&error);
- dbus_bus_add_match (daemon->session_bus,
- "type='signal',"
- "interface='org.freedesktop.DBus',"
- "member='NameOwnerChanged',"
- "arg0='"G_VFS_DBUS_DAEMON_NAME"'",
- &error);
-
- if (dbus_error_is_set (&error))
- {
- g_warning ("Failed to add dbus match: %s\n", error.message);
- dbus_error_free (&error);
- }
-
- if (!dbus_connection_add_filter (daemon->session_bus,
- daemon_message_func, daemon, NULL))
- _g_dbus_oom ();
-}
-
-static void
-g_vfs_daemon_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
-#if 0
- GVfsDaemon *daemon;
-
- daemon = G_VFS_DAEMON (object);
-#endif
- switch (prop_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-g_vfs_daemon_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
-#if 0
- GVfsDaemon *daemon;
-
- daemon = G_VFS_DAEMON (object);
-#endif
- switch (prop_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-GVfsDaemon *
-g_vfs_daemon_new (gboolean main_daemon, gboolean replace)
-{
- GVfsDaemon *daemon;
- DBusConnection *conn;
- DBusError error;
- unsigned int flags;
- int ret;
-
- dbus_error_init (&error);
- conn = dbus_bus_get (DBUS_BUS_SESSION, &error);
- if (!conn)
- {
- g_printerr ("Failed to connect to the D-BUS daemon: %s\n",
- error.message);
-
- dbus_error_free (&error);
- return NULL;
- }
-
- dbus_connection_setup_with_g_main (conn, NULL);
-
- daemon = g_object_new (G_VFS_TYPE_DAEMON, NULL);
- daemon->main_daemon = main_daemon;
-
- /* Request name only after we've installed the message filter */
- if (main_daemon)
- {
- flags = DBUS_NAME_FLAG_ALLOW_REPLACEMENT | DBUS_NAME_FLAG_DO_NOT_QUEUE;
- if (replace)
- flags |= DBUS_NAME_FLAG_REPLACE_EXISTING;
-
- ret = dbus_bus_request_name (conn, G_VFS_DBUS_DAEMON_NAME, flags, &error);
- if (ret == -1)
- {
- g_printerr ("Failed to acquire daemon name: %s", error.message);
- dbus_error_free (&error);
-
- g_object_unref (daemon);
- daemon = NULL;
- }
- else if (ret == DBUS_REQUEST_NAME_REPLY_EXISTS)
- {
- g_printerr ("VFS daemon already running, exiting.\n");
- g_object_unref (daemon);
- daemon = NULL;
- }
- else if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
- {
- g_printerr ("Not primary owner of the service, exiting.\n");
- g_object_unref (daemon);
- daemon = NULL;
- }
- }
-
- dbus_connection_unref (conn);
-
- return daemon;
-}
-
-void
-g_vfs_daemon_set_max_threads (GVfsDaemon *daemon,
- gint max_threads)
-{
- g_thread_pool_set_max_threads (daemon->thread_pool, max_threads, NULL);
-}
-
-static gboolean
-exit_at_idle (gpointer data)
-{
- exit (0);
- return FALSE;
-}
-
-static void
-daemon_unschedule_exit (GVfsDaemon *daemon)
-{
- if (daemon->exit_tag != 0)
- {
- g_source_remove (daemon->exit_tag);
- daemon->exit_tag = 0;
- }
-}
-
-static void
-daemon_schedule_exit (GVfsDaemon *daemon)
-{
- if (daemon->exit_tag == 0)
- daemon->exit_tag = g_timeout_add (1000, exit_at_idle, daemon);
-}
-
-static void
-job_source_new_job_callback (GVfsJobSource *job_source,
- GVfsJob *job,
- GVfsDaemon *daemon)
-{
- g_vfs_daemon_queue_job (daemon, job);
-}
-
-static void
-job_source_closed_callback (GVfsJobSource *job_source,
- GVfsDaemon *daemon)
-{
- g_mutex_lock (daemon->lock);
-
- daemon->job_sources = g_list_remove (daemon->job_sources,
- job_source);
-
- g_signal_handlers_disconnect_by_func (job_source,
- (GCallback)job_source_new_job_callback,
- daemon);
- g_signal_handlers_disconnect_by_func (job_source,
- (GCallback)job_source_closed_callback,
- daemon);
-
- g_object_unref (job_source);
-
- if (daemon->job_sources == NULL)
- daemon_schedule_exit (daemon);
-
- g_mutex_unlock (daemon->lock);
-}
-
-static void
-g_vfs_daemon_re_register_job_sources (GVfsDaemon *daemon)
-{
- GList *l;
-
- g_mutex_lock (daemon->lock);
-
- for (l = daemon->job_sources; l != NULL; l = l->next)
- {
- if (G_VFS_IS_BACKEND (l->data))
- g_vfs_backend_register_mount (l->data, NULL, NULL);
- }
-
- g_mutex_unlock (daemon->lock);
-}
-
-void
-g_vfs_daemon_add_job_source (GVfsDaemon *daemon,
- GVfsJobSource *job_source)
-{
- g_print ("Added new job source %p (%s)\n", job_source, g_type_name_from_instance ((gpointer)job_source));
-
- g_mutex_lock (daemon->lock);
-
- daemon_unschedule_exit (daemon);
-
- g_object_ref (job_source);
- daemon->job_sources = g_list_append (daemon->job_sources,
- job_source);
- g_signal_connect (job_source, "new_job",
- (GCallback)job_source_new_job_callback, daemon);
- g_signal_connect (job_source, "closed",
- (GCallback)job_source_closed_callback, daemon);
-
- g_mutex_unlock (daemon->lock);
-}
-
-/* This registers a dbus callback on *all* connections, client and session bus */
-void
-g_vfs_daemon_register_path (GVfsDaemon *daemon,
- const char *obj_path,
- DBusObjectPathMessageFunction callback,
- gpointer user_data)
-{
- RegisteredPath *data;
-
- data = g_new0 (RegisteredPath, 1);
- data->obj_path = g_strdup (obj_path);
- data->callback = callback;
- data->data = user_data;
-
- g_hash_table_insert (daemon->registered_paths, data->obj_path,
- data);
-}
-
-void
-g_vfs_daemon_unregister_path (GVfsDaemon *daemon,
- const char *obj_path)
-{
- g_hash_table_remove (daemon->registered_paths, obj_path);
-}
-
-/* NOTE: Might be emitted on a thread */
-static void
-job_new_source_callback (GVfsJob *job,
- GVfsJobSource *job_source,
- GVfsDaemon *daemon)
-{
- g_vfs_daemon_add_job_source (daemon, job_source);
-}
-
-/* NOTE: Might be emitted on a thread */
-static void
-job_finished_callback (GVfsJob *job,
- GVfsDaemon *daemon)
-{
-
- g_signal_handlers_disconnect_by_func (job,
- (GCallback)job_new_source_callback,
- daemon);
- g_signal_handlers_disconnect_by_func (job,
- (GCallback)job_finished_callback,
- daemon);
-
- g_mutex_lock (daemon->lock);
- daemon->jobs = g_list_remove (daemon->jobs, job);
- g_mutex_unlock (daemon->lock);
-
- g_object_unref (job);
-}
-
-void
-g_vfs_daemon_queue_job (GVfsDaemon *daemon,
- GVfsJob *job)
-{
- g_print ("Queued new job %p (%s)\n", job, g_type_name_from_instance ((gpointer)job));
-
- g_object_ref (job);
- g_signal_connect (job, "finished", (GCallback)job_finished_callback, daemon);
- g_signal_connect (job, "new_source", (GCallback)job_new_source_callback, daemon);
-
- g_mutex_lock (daemon->lock);
- daemon->jobs = g_list_prepend (daemon->jobs, job);
- g_mutex_unlock (daemon->lock);
-
- /* Can we start the job immediately / async */
- if (!g_vfs_job_try (job))
- {
- /* Couldn't finish / run async, queue worker thread */
- g_thread_pool_push (daemon->thread_pool, job, NULL); /* TODO: Check error */
- }
-}
-
-static void
-new_connection_data_free (void *memory)
-{
- NewConnectionData *data = memory;
-
- /* Remove the socket and dir after connected */
- if (data->socket_dir)
- rmdir (data->socket_dir);
-
- if (data->io_watch)
- g_source_remove (data->io_watch);
-
- g_free (data->socket_dir);
- g_free (data);
-}
-
-static void
-daemon_peer_connection_setup (GVfsDaemon *daemon,
- DBusConnection *dbus_conn,
- NewConnectionData *data)
-{
- /* We wait until we have the extra fd */
- if (!data->got_fd_connection)
- return;
-
- if (data->fd == -1)
- {
- /* The fd connection failed, abort the whole thing */
- g_warning ("Failed to accept client: %s", "accept of extra fd failed");
- dbus_connection_unref (dbus_conn);
- goto error_out;
- }
-
- dbus_connection_setup_with_g_main (dbus_conn, NULL);
- if (!dbus_connection_add_filter (dbus_conn, peer_to_peer_filter_func, daemon, NULL) ||
- !dbus_connection_add_filter (dbus_conn, daemon_message_func, daemon, NULL))
- {
- g_warning ("Failed to accept client: %s", "object registration failed");
- dbus_connection_unref (dbus_conn);
- close (data->fd);
- goto error_out;
- }
-
- dbus_connection_add_fd_send_fd (dbus_conn, data->fd);
-
- error_out:
- new_connection_data_free (data);
-}
-
-#ifdef __linux__
-#define USE_ABSTRACT_SOCKETS
-#endif
-
-static void
-randomize_string (char tmp[9])
-{
- int i;
- const char chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-
- for (i = 0; i < 8; i++)
- tmp[i] = chars[g_random_int_range (0, strlen(chars))];
-
- tmp[8] = '\0';
-}
-
-#ifndef USE_ABSTRACT_SOCKETS
-static gboolean
-test_safe_socket_dir (const char *dirname)
-{
- struct stat statbuf;
-
- if (g_stat (dirname, &statbuf) != 0)
- return FALSE;
-
-#ifndef G_PLATFORM_WIN32
- if (statbuf.st_uid != getuid ())
- return FALSE;
-
- if ((statbuf.st_mode & (S_IRWXG|S_IRWXO)) ||
- !S_ISDIR (statbuf.st_mode))
- return FALSE;
-#endif
-
- return TRUE;
-}
-
-
-static char *
-create_socket_dir (void)
-{
- char *dirname;
- long iteration = 0;
- char *safe_dir;
- gchar tmp[9];
- int i;
-
- safe_dir = NULL;
- do
- {
- g_free (safe_dir);
-
- randomize_string (tmp);
-
- dirname = g_strdup_printf ("gvfs-%s-%s",
- g_get_user_name (), tmp);
- safe_dir = g_build_filename (g_get_tmp_dir (), dirname, NULL);
- g_free (dirname);
-
- if (g_mkdir (safe_dir, 0700) < 0)
- {
- switch (errno)
- {
- case EACCES:
- g_error ("I can't write to '%s', daemon init failed",
- safe_dir);
- break;
-
- case ENAMETOOLONG:
- g_error ("Name '%s' too long your system is broken",
- safe_dir);
- break;
-
- case ENOMEM:
-#ifdef ELOOP
- case ELOOP:
-#endif
- case ENOSPC:
- case ENOTDIR:
- case ENOENT:
- g_error ("Resource problem creating '%s'", safe_dir);
- break;
-
- default: /* carry on going */
- break;
- }
- }
- /* Possible race - so we re-scan. */
-
- if (iteration++ == 1000)
- g_error ("Cannot find a safe socket path in '%s'", g_get_tmp_dir ());
- }
- while (!test_safe_socket_dir (safe_dir));
-
- return safe_dir;
-}
-#endif
-
-static void
-generate_addresses (char **address1,
- char **address2,
- char **folder)
-{
- *address1 = NULL;
- *address2 = NULL;
- *folder = NULL;
-
-#ifdef USE_ABSTRACT_SOCKETS
- {
- gchar tmp[9];
-
- randomize_string (tmp);
- *address1 = g_strdup_printf ("unix:abstract=/dbus-vfs-daemon/socket-%s", tmp);
-
- randomize_string (tmp);
- *address2 = g_strdup_printf ("unix:abstract=/dbus-vfs-daemon/socket-%s", tmp);
- }
-#else
- {
- char *dir;
-
- dir = create_socket_dir ();
- *address1 = g_strdup_printf ("unix:path=%s/socket1", dir);
- *address2 = g_strdup_printf ("unix:path=%s/socket2", dir);
- *folder = dir;
- }
-#endif
-}
-
-static void
-daemon_new_connection_func (DBusServer *server,
- DBusConnection *conn,
- gpointer user_data)
-{
- NewConnectionData *data;
-
- data = user_data;
- data->got_dbus_connection = TRUE;
-
- /* Take ownership */
- data->conn = dbus_connection_ref (conn);
-
- daemon_peer_connection_setup (data->daemon, conn, data);
-
- /* Kill the server, no more need for it */
- dbus_server_disconnect (server);
- dbus_server_unref (server);
-}
-
-static int
-unix_socket_at (const char *address)
-{
- int fd;
- const char *path;
- size_t path_len;
- struct sockaddr_un addr;
-
- fd = socket (PF_UNIX, SOCK_STREAM, 0);
- if (fd == -1)
- return -1;
-
-#ifdef USE_ABSTRACT_SOCKETS
- path = address + strlen ("unix:abstract=");
-#else
- path = address + strlen ("unix:path=");
-#endif
-
- memset (&addr, 0, sizeof (addr));
- addr.sun_family = AF_UNIX;
- path_len = strlen (path);
-
-#ifdef USE_ABSTRACT_SOCKETS
- addr.sun_path[0] = '\0'; /* this is what says "use abstract" */
- path_len++; /* Account for the extra nul byte added to the start of sun_path */
-
- strncpy (&addr.sun_path[1], path, path_len);
-#else /* USE_ABSTRACT_SOCKETS */
- strncpy (addr.sun_path, path, path_len);
- unlink (path);
-#endif /* ! USE_ABSTRACT_SOCKETS */
-
- if (bind (fd, (struct sockaddr*) &addr,
- G_STRUCT_OFFSET (struct sockaddr_un, sun_path) + path_len) < 0)
- {
- close (fd);
- return -1;
- }
-
- if (listen (fd, 30 /* backlog */) < 0)
- {
- close (fd);
- return -1;
- }
-
- return fd;
-}
-
-static gboolean
-accept_new_fd_client (GIOChannel *channel,
- GIOCondition cond,
- gpointer callback_data)
-{
- NewConnectionData *data = callback_data;
- int fd;
- int new_fd;
- struct sockaddr_un addr;
- socklen_t addrlen;
-
- data->got_fd_connection = TRUE;
-
- fd = g_io_channel_unix_get_fd (channel);
-
- addrlen = sizeof (addr);
- new_fd = accept (fd, (struct sockaddr *) &addr, &addrlen);
-
- data->fd = new_fd;
- data->io_watch = 0;
-
- /* Did we already accept the dbus connection, if so, finish it now */
- if (data->got_dbus_connection)
- daemon_peer_connection_setup (data->daemon,
- data->conn,
- data);
- else if (data->fd == -1)
- {
- /* Didn't accept a dbus connection, and there is no need for one now */
- g_warning ("Failed to accept client: %s", "accept of extra fd failed");
- dbus_server_disconnect (data->server);
- dbus_server_unref (data->server);
- new_connection_data_free (data);
- }
-
- return FALSE;
-}
-
-static void
-daemon_handle_get_connection (DBusConnection *conn,
- DBusMessage *message,
- GVfsDaemon *daemon)
-{
- DBusServer *server;
- DBusError error;
- DBusMessage *reply;
- gchar *address1;
- gchar *address2;
- NewConnectionData *data;
- GIOChannel *channel;
- char *socket_dir;
- int fd;
-
- generate_addresses (&address1, &address2, &socket_dir);
-
- data = g_new (NewConnectionData, 1);
- data->daemon = daemon;
- data->socket_dir = socket_dir;
- data->got_fd_connection = FALSE;
- data->got_dbus_connection = FALSE;
- data->fd = -1;
- data->conn = NULL;
-
- dbus_error_init (&error);
- server = dbus_server_listen (address1, &error);
- if (!server)
- {
- reply = dbus_message_new_error_printf (message,
- G_VFS_DBUS_ERROR_SOCKET_FAILED,
- "Failed to create new socket: %s",
- error.message);
- dbus_error_free (&error);
- if (reply)
- {
- dbus_connection_send (conn, reply, NULL);
- dbus_message_unref (reply);
- }
-
- goto error_out;
- }
- data->server = server;
-
- dbus_server_set_new_connection_function (server,
- daemon_new_connection_func,
- data, NULL);
- dbus_server_setup_with_g_main (server, NULL);
-
- fd = unix_socket_at (address2);
- if (fd == -1)
- goto error_out;
-
- channel = g_io_channel_unix_new (fd);
- g_io_channel_set_close_on_unref (channel, TRUE);
- data->io_watch = g_io_add_watch (channel, G_IO_IN | G_IO_HUP, accept_new_fd_client, data);
- g_io_channel_unref (channel);
-
- reply = dbus_message_new_method_return (message);
- if (reply == NULL)
- _g_dbus_oom ();
-
- if (!dbus_message_append_args (reply,
- DBUS_TYPE_STRING, &address1,
- DBUS_TYPE_STRING, &address2,
- DBUS_TYPE_INVALID))
- _g_dbus_oom ();
-
- dbus_connection_send (conn, reply, NULL);
-
- dbus_message_unref (reply);
-
- g_free (address1);
- g_free (address2);
-
- return;
-
- error_out:
- g_free (data);
- g_free (address1);
- g_free (address2);
- if (socket_dir)
- {
- rmdir (socket_dir);
- g_free (socket_dir);
- }
-}
-
-static void
-daemon_start_mount (GVfsDaemon *daemon,
- DBusConnection *connection,
- DBusMessage *message)
-{
- const char *dbus_id, *obj_path;
- DBusMessageIter iter;
- DBusError derror;
- DBusMessage *reply;
- GMountSpec *mount_spec;
- GMountSource *mount_source;
- dbus_bool_t automount;
-
- dbus_message_iter_init (message, &iter);
-
- reply = NULL;
- mount_spec = NULL;
- dbus_error_init (&derror);
- if ((mount_spec = g_mount_spec_from_dbus (&iter)) == NULL)
- reply = dbus_message_new_error (message,
- DBUS_ERROR_INVALID_ARGS,
- "Error in mount spec");
- else if (!_g_dbus_message_iter_get_args (&iter, &derror,
- DBUS_TYPE_BOOLEAN, &automount,
- DBUS_TYPE_STRING, &dbus_id,
- DBUS_TYPE_OBJECT_PATH, &obj_path,
- 0))
- {
- reply = dbus_message_new_error (message, derror.name, derror.message);
- dbus_error_free (&derror);
- }
-
- if (reply)
- {
- dbus_connection_send (connection, reply, NULL);
- dbus_message_unref (reply);
- }
- else
- {
- mount_source = g_mount_source_new (dbus_id, obj_path);
- g_vfs_daemon_initiate_mount (daemon, mount_spec, mount_source, automount, message);
- g_object_unref (mount_source);
- g_mount_spec_unref (mount_spec);
- }
-}
-
-static DBusHandlerResult
-daemon_message_func (DBusConnection *conn,
- DBusMessage *message,
- gpointer data)
-{
- GVfsDaemon *daemon = data;
- RegisteredPath *registered_path;
- const char *path;
- char *name;
- char *old_owner, *new_owner;
-
- path = dbus_message_get_path (message);
- if (path == NULL)
- path = "";
-
- if (dbus_message_is_signal (message, DBUS_INTERFACE_DBUS, "NameLost"))
- {
- if (dbus_message_get_args (message, NULL,
- DBUS_TYPE_STRING, &name,
- DBUS_TYPE_INVALID) &&
- strcmp (name, G_VFS_DBUS_DAEMON_NAME) == 0)
- {
- /* Someone else got the name (i.e. someone used --replace), exit */
- if (daemon->main_daemon)
- exit (1);
- }
- }
- else if (dbus_message_is_signal (message, DBUS_INTERFACE_DBUS, "NameOwnerChanged"))
- {
- if (dbus_message_get_args (message, NULL,
- DBUS_TYPE_STRING, &name,
- DBUS_TYPE_STRING, &old_owner,
- DBUS_TYPE_STRING, &new_owner,
- DBUS_TYPE_INVALID) &&
- strcmp (name, G_VFS_DBUS_DAEMON_NAME) == 0 &&
- *new_owner != 0 &&
- !daemon->main_daemon)
- {
- /* There is a new owner. Register mounts with it */
- g_vfs_daemon_re_register_job_sources (daemon);
- }
-
- }
-
-
- if (dbus_message_is_method_call (message,
- G_VFS_DBUS_DAEMON_INTERFACE,
- G_VFS_DBUS_OP_GET_CONNECTION))
- {
- daemon_handle_get_connection (conn, message, daemon);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- if (dbus_message_is_method_call (message,
- G_VFS_DBUS_DAEMON_INTERFACE,
- G_VFS_DBUS_OP_CANCEL))
- {
- GList *l;
- dbus_uint32_t serial;
- GVfsJob *job_to_cancel = NULL;
-
- if (dbus_message_get_args (message, NULL,
- DBUS_TYPE_UINT32, &serial,
- DBUS_TYPE_INVALID))
- {
- g_mutex_lock (daemon->lock);
- for (l = daemon->jobs; l != NULL; l = l->next)
- {
- GVfsJob *job = l->data;
-
- if (G_VFS_IS_JOB_DBUS (job) &&
- g_vfs_job_dbus_is_serial (G_VFS_JOB_DBUS (job),
- conn, serial))
- {
- job_to_cancel = g_object_ref (job);
- break;
- }
- }
- g_mutex_unlock (daemon->lock);
-
-
- if (job_to_cancel)
- {
- g_vfs_job_cancel (job_to_cancel);
- g_object_unref (job_to_cancel);
- }
- }
-
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- if (strcmp (path, G_VFS_DBUS_MOUNTABLE_PATH) == 0 &&
- dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNTABLE_INTERFACE,
- G_VFS_DBUS_MOUNTABLE_OP_MOUNT))
- {
- daemon_start_mount (daemon, conn, message);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- registered_path = g_hash_table_lookup (daemon->registered_paths, path);
-
- if (registered_path)
- return registered_path->callback (conn, message, registered_path->data);
- else
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-
-/* Only called for peer-to-peer connections */
-static DBusHandlerResult
-peer_to_peer_filter_func (DBusConnection *conn,
- DBusMessage *message,
- gpointer data)
-{
- if (dbus_message_is_signal (message,
- DBUS_INTERFACE_LOCAL,
- "Disconnected"))
- {
- /* The peer-to-peer connection was disconnected */
- dbus_connection_unref (conn);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-void
-g_vfs_daemon_initiate_mount (GVfsDaemon *daemon,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount,
- DBusMessage *request)
-{
- const char *type;
- GType backend_type;
- char *obj_path;
- GVfsJob *job;
- GVfsBackend *backend;
- DBusConnection *conn;
- DBusMessage *reply;
-
- type = g_mount_spec_get_type (mount_spec);
-
- backend_type = G_TYPE_INVALID;
- if (type)
- backend_type = g_vfs_lookup_backend (type);
-
- if (backend_type == G_TYPE_INVALID)
- {
- if (request)
- {
- reply = _dbus_message_new_gerror (request,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid backend type"));
-
- /* Queues reply (threadsafely), actually sends it in mainloop */
- conn = dbus_bus_get (DBUS_BUS_SESSION, NULL);
- if (conn)
- {
- dbus_connection_send (conn, reply, NULL);
- dbus_message_unref (reply);
- dbus_connection_unref (conn);
- }
- }
- else
- g_warning ("Error mounting: invalid backend type\n");
- return;
- }
-
- obj_path = g_strdup_printf ("/org/gtk/vfs/mount/%d", ++daemon->mount_counter);
- backend = g_object_new (backend_type,
- "daemon", daemon,
- "object_path", obj_path,
- NULL);
- g_free (obj_path);
-
- g_vfs_daemon_add_job_source (daemon, G_VFS_JOB_SOURCE (backend));
- g_object_unref (backend);
-
- job = g_vfs_job_mount_new (mount_spec, mount_source, is_automount, request, backend);
- g_vfs_daemon_queue_job (daemon, job);
-}
diff --git a/daemon/gvfsdaemon.h b/daemon/gvfsdaemon.h
deleted file mode 100644
index f40f2166..00000000
--- a/daemon/gvfsdaemon.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_DAEMON_H__
-#define __G_VFS_DAEMON_H__
-
-#include <glib-object.h>
-#include <gvfsjobsource.h>
-#include <gmountsource.h>
-#include <dbus/dbus.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_DAEMON (g_vfs_daemon_get_type ())
-#define G_VFS_DAEMON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_DAEMON, GVfsDaemon))
-#define G_VFS_DAEMON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_DAEMON, GVfsDaemonClass))
-#define G_VFS_IS_DAEMON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_DAEMON))
-#define G_VFS_IS_DAEMON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_DAEMON))
-#define G_VFS_DAEMON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_DAEMON, GVfsDaemonClass))
-
-typedef struct _GVfsDaemon GVfsDaemon;
-typedef struct _GVfsDaemonClass GVfsDaemonClass;
-typedef struct _GVfsDaemonPrivate GVfsDaemonPrivate;
-
-struct _GVfsDaemonClass
-{
- GObjectClass parent_class;
-
- /* vtable */
-
-};
-
-GType g_vfs_daemon_get_type (void) G_GNUC_CONST;
-
-GVfsDaemon *g_vfs_daemon_new (gboolean main_daemon,
- gboolean replace);
-void g_vfs_daemon_set_max_threads (GVfsDaemon *daemon,
- gint max_threads);
-void g_vfs_daemon_add_job_source (GVfsDaemon *daemon,
- GVfsJobSource *job_source);
-void g_vfs_daemon_queue_job (GVfsDaemon *daemon,
- GVfsJob *job);
-void g_vfs_daemon_register_path (GVfsDaemon *daemon,
- const char *obj_path,
- DBusObjectPathMessageFunction callback,
- gpointer user_data);
-void g_vfs_daemon_unregister_path (GVfsDaemon *daemon,
- const char *obj_path);
-void g_vfs_daemon_initiate_mount (GVfsDaemon *daemon,
- GMountSpec *mount_spec,
- GMountSource *mount_source,
- gboolean is_automount,
- DBusMessage *request);
-
-G_END_DECLS
-
-#endif /* __G_VFS_DAEMON_H__ */
diff --git a/daemon/gvfsdaemonutils.c b/daemon/gvfsdaemonutils.c
deleted file mode 100644
index 93f78262..00000000
--- a/daemon/gvfsdaemonutils.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <strings.h>
-#include <unistd.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib/gthread.h>
-#include <glib/gi18n.h>
-
-#include <gio/gio.h>
-#include "gdbusutils.h"
-#include "gsysutils.h"
-#include "gvfsdaemonutils.h"
-#include "gvfsdaemonprotocol.h"
-
-static gint32 extra_fd_slot = -1;
-static GStaticMutex extra_lock = G_STATIC_MUTEX_INIT;
-
-typedef struct {
- int extra_fd;
- int fd_count;
-} ConnectionExtra;
-
-static void
-free_extra (gpointer p)
-{
- ConnectionExtra *extra = p;
- close (extra->extra_fd);
- g_free (extra);
-}
-
-void
-dbus_connection_add_fd_send_fd (DBusConnection *connection,
- int extra_fd)
-{
- ConnectionExtra *extra;
-
- if (extra_fd_slot == -1 &&
- !dbus_connection_allocate_data_slot (&extra_fd_slot))
- g_error ("Unable to allocate data slot");
-
- extra = g_new0 (ConnectionExtra, 1);
- extra->extra_fd = extra_fd;
-
- if (!dbus_connection_set_data (connection, extra_fd_slot, extra, free_extra))
- _g_dbus_oom ();
-}
-
-gboolean
-dbus_connection_send_fd (DBusConnection *connection,
- int fd,
- int *fd_id,
- GError **error)
-{
- ConnectionExtra *extra;
-
- g_assert (extra_fd_slot != -1);
- extra = dbus_connection_get_data (connection, extra_fd_slot);
- g_assert (extra != NULL);
-
- if (extra->extra_fd == -1)
- {
- g_set_error (error, G_IO_ERROR,
- G_IO_ERROR_FAILED,
- _("Internal Error (%s)"), "No fd passing socket available");
- return FALSE;
- }
-
- g_static_mutex_lock (&extra_lock);
-
- if (_g_socket_send_fd (extra->extra_fd, fd) == -1)
- {
- int errsv = errno;
-
- g_set_error (error, G_IO_ERROR,
- g_io_error_from_errno (errsv),
- _("Error sending fd: %s"),
- g_strerror (errsv));
- g_static_mutex_unlock (&extra_lock);
- return FALSE;
- }
-
- *fd_id = extra->fd_count++;
-
- g_static_mutex_unlock (&extra_lock);
-
- return TRUE;
-}
-
-char *
-g_error_to_daemon_reply (GError *error, guint32 seq_nr, gsize *len_out)
-{
- char *buffer;
- const char *domain;
- gsize domain_len, message_len;
- GVfsDaemonSocketProtocolReply *reply;
- gsize len;
-
- domain = g_quark_to_string (error->domain);
- domain_len = strlen (domain);
- message_len = strlen (error->message);
-
- len = G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE +
- domain_len + 1 + message_len + 1;
- buffer = g_malloc (len);
-
- reply = (GVfsDaemonSocketProtocolReply *)buffer;
- reply->type = g_htonl (G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_ERROR);
- reply->seq_nr = g_htonl (seq_nr);
- reply->arg1 = g_htonl (error->code);
- reply->arg2 = g_htonl (domain_len + 1 + message_len + 1);
-
- memcpy (buffer + G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE,
- domain, domain_len + 1);
- memcpy (buffer + G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SIZE + domain_len + 1,
- error->message, message_len + 1);
-
- *len_out = len;
-
- return buffer;
-}
-
-/**
- * gvfs_file_info_populate_default:
- * @info: file info to populate
- * @name_string: a bytes string of possibly the full path to the given file
- * @type: type of this file
- *
- * Calls gvfs_file_info_populate_names_as_local() and
- * gvfs_file_info_populate_content_types() on the given @name_string.
- **/
-void
-gvfs_file_info_populate_default (GFileInfo *info,
- const char *name_string,
- GFileType type)
-{
- char *edit_name;
-
- g_return_if_fail (G_IS_FILE_INFO (info));
- g_return_if_fail (name_string != NULL);
-
- edit_name = gvfs_file_info_populate_names_as_local (info, name_string);
- gvfs_file_info_populate_content_types (info, edit_name, type);
- g_free (edit_name);
-}
-
-/**
- * gvfs_file_info_populate_names_as_local:
- * @info: the file info to fill
- * @name_string: a bytes string of possibly the full path to the given file
- *
- * Sets the name of the file info to @name_string and determines display and
- * edit name for it.
- *
- * This generates the display name based on what encoding is used for local filenames.
- * It might be a good thing to use if you have no idea of the remote system filename
- * encoding, but if you know the actual encoding use, or if you allow per-mount
- * configuration of filename encoding in your backend you should not use this.
- *
- * Returns: the utf-8 encoded edit name for the given file.
- **/
-char *
-gvfs_file_info_populate_names_as_local (GFileInfo *info,
- const char *name_string)
-{
- //const char *slash;
- char *edit_name;
-
- g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
- g_return_val_if_fail (name_string != NULL, NULL);
-
-#if 0
- slash = strrchr (name_string, '/');
- if (slash && slash[1])
- name_string = slash + 1;
-#endif
- edit_name = g_filename_display_basename (name_string);
- g_file_info_set_edit_name (info, edit_name);
-
- if (strstr (edit_name, "\357\277\275") != NULL)
- {
- char *display_name;
-
- display_name = g_strconcat (edit_name, _(" (invalid encoding)"), NULL);
- g_file_info_set_display_name (info, display_name);
- g_free (display_name);
- }
- else
- g_file_info_set_display_name (info, edit_name);
-
- return edit_name;
-}
-
-/**
- * gvfs_file_info_populate_content_types:
- * @info: the file info to fill
- * @basename: utf-8 encoded base name of file
- * @type: type of this file
- *
- * Takes the base name and guesses content type and icon with it. This function
- * is intended for remote files. Do not use it for directories.
- **/
-void
-gvfs_file_info_populate_content_types (GFileInfo *info,
- const char *basename,
- GFileType type)
-{
- char *free_mimetype = NULL;
- const char *mimetype;
- GIcon *icon;
-
- g_return_if_fail (G_IS_FILE_INFO (info));
- g_return_if_fail (basename != NULL);
-
- g_file_info_set_file_type (info, type);
-
- switch (type)
- {
- case G_FILE_TYPE_DIRECTORY:
- mimetype = "inode/directory";
- break;
- case G_FILE_TYPE_SYMBOLIC_LINK:
- mimetype = "inode/symlink";
- break;
- case G_FILE_TYPE_SPECIAL:
- mimetype = "inode/special";
- break;
- case G_FILE_TYPE_SHORTCUT:
- mimetype = "inode/shortcut";
- break;
- case G_FILE_TYPE_MOUNTABLE:
- mimetype = "inode/mountable";
- break;
- case G_FILE_TYPE_REGULAR:
- free_mimetype = g_content_type_guess (basename, NULL, 0, NULL);
- mimetype = free_mimetype;
- break;
- case G_FILE_TYPE_UNKNOWN:
- default:
- mimetype = "application/octet-stream";
- break;
- }
-
- g_file_info_set_content_type (info, mimetype);
- g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE, mimetype);
-
- if (type == G_FILE_TYPE_DIRECTORY)
- icon = g_themed_icon_new ("folder");
- else
- {
- icon = g_content_type_get_icon (mimetype);
- if (G_IS_THEMED_ICON (icon))
- g_themed_icon_append_name (G_THEMED_ICON (icon), "text-x-generic");
- }
-
- g_file_info_set_icon (info, icon);
- g_object_unref (icon);
-
- g_free (free_mimetype);
-}
-
diff --git a/daemon/gvfsdaemonutils.h b/daemon/gvfsdaemonutils.h
deleted file mode 100644
index 04b425fb..00000000
--- a/daemon/gvfsdaemonutils.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_DAEMON_UTILS_H__
-#define __G_VFS_DAEMON_UTILS_H__
-
-#include <glib-object.h>
-#include <dbus/dbus.h>
-
-G_BEGIN_DECLS
-
-void dbus_connection_add_fd_send_fd (DBusConnection *connection,
- int extra_fd);
-gboolean dbus_connection_send_fd (DBusConnection *connection,
- int fd,
- int *fd_id,
- GError **error);
-char * g_error_to_daemon_reply (GError *error,
- guint32 seq_nr,
- gsize *len_out);
-
-void gvfs_file_info_populate_default (GFileInfo *info,
- const char *name_string,
- GFileType type);
-char * gvfs_file_info_populate_names_as_local (GFileInfo *info,
- const char *name_string);
-void gvfs_file_info_populate_content_types (GFileInfo *info,
- const char *basename,
- GFileType type);
-
-G_END_DECLS
-
-#endif /* __G_VFS_DAEMON_UTILS_H__ */
diff --git a/daemon/gvfsjob.c b/daemon/gvfsjob.c
deleted file mode 100644
index 9aa168c2..00000000
--- a/daemon/gvfsjob.c
+++ /dev/null
@@ -1,327 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-#include "gvfsjob.h"
-#include "gvfsjobsource.h"
-
-G_DEFINE_TYPE (GVfsJob, g_vfs_job, G_TYPE_OBJECT)
-
-/* TODO: Real P_() */
-#define P_(_x) (_x)
-
-enum {
- PROP_0
-};
-
-enum {
- CANCELLED,
- SEND_REPLY,
- FINISHED,
- NEW_SOURCE,
- LAST_SIGNAL
-};
-
-struct _GVfsJobPrivate
-{
- int dummy;
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static void g_vfs_job_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-static void g_vfs_job_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-
-static void
-g_vfs_job_finalize (GObject *object)
-{
- GVfsJob *job;
-
- job = G_VFS_JOB (object);
-
- if (job->error)
- g_error_free (job->error);
-
- if (job->backend_data_destroy)
- job->backend_data_destroy (job->backend_data);
-
- g_object_unref (job->cancellable);
-
- if (G_OBJECT_CLASS (g_vfs_job_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_class_init (GVfsJobClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (GVfsJobPrivate));
-
- gobject_class->finalize = g_vfs_job_finalize;
- gobject_class->set_property = g_vfs_job_set_property;
- gobject_class->get_property = g_vfs_job_get_property;
-
- signals[CANCELLED] =
- g_signal_new ("cancelled",
- G_TYPE_FROM_CLASS (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GVfsJobClass, cancelled),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- signals[FINISHED] =
- g_signal_new ("finished",
- G_TYPE_FROM_CLASS (gobject_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GVfsJobClass, finished),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- signals[NEW_SOURCE] =
- g_signal_new ("new-source",
- G_TYPE_FROM_CLASS (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GVfsJobClass, new_source),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1, G_VFS_TYPE_JOB_SOURCE);
- signals[SEND_REPLY] =
- g_signal_new ("send-reply",
- G_TYPE_FROM_CLASS (gobject_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GVfsJobClass, send_reply),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-}
-
-static void
-g_vfs_job_init (GVfsJob *job)
-{
- job->priv = G_TYPE_INSTANCE_GET_PRIVATE (job, G_VFS_TYPE_JOB, GVfsJobPrivate);
-
- job->cancellable = g_cancellable_new ();
-
-}
-
-void
-g_vfs_job_set_backend_data (GVfsJob *job,
- gpointer backend_data,
- GDestroyNotify destroy)
-{
- if (job->backend_data_destroy)
- {
- job->backend_data_destroy (job->backend_data);
- }
-
- job->backend_data = backend_data;
- job->backend_data_destroy = destroy;
-}
-
-static void
-g_vfs_job_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (prop_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-g_vfs_job_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- switch (prop_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-void
-g_vfs_job_run (GVfsJob *job)
-{
- GVfsJobClass *class;
-
- class = G_VFS_JOB_GET_CLASS (job);
-
- /* Ensure that the job lives durint the whole
- * lifetime of the call, as it may disappear when
- * we call g_vfs_job_succeed/fail()
- */
- g_object_ref (job);
-
- class->run (job);
-
- g_object_unref (job);
-}
-
-gboolean
-g_vfs_job_try (GVfsJob *job)
-{
- GVfsJobClass *class;
- gboolean res;
-
- class = G_VFS_JOB_GET_CLASS (job);
-
- /* Ensure that the job lives during the whole
- * lifetime of the call, as it may disappear when
- * we call g_vfs_job_succeed/fail()
- */
- g_object_ref (job);
- res = class->try (job);
- g_object_unref (job);
-
- return res;
-}
-
-void
-g_vfs_job_cancel (GVfsJob *job)
-{
- if (job->cancelled || job->sent_reply)
- return;
-
- job->cancelled = TRUE;
- g_signal_emit (job, signals[CANCELLED], 0);
- g_cancellable_cancel (job->cancellable);
-}
-
-static void
-g_vfs_job_send_reply (GVfsJob *job)
-{
- job->sent_reply = TRUE;
- g_signal_emit (job, signals[SEND_REPLY], 0);
-}
-
-void
-g_vfs_job_failed (GVfsJob *job,
- GQuark domain,
- gint code,
- const gchar *format,
- ...)
-{
- va_list args;
- char *message;
-
- va_start (args, format);
- message = g_strdup_vprintf (format, args);
- va_end (args);
-
- g_vfs_job_failed_literal (job, domain, code, message);
- g_free (message);
-}
-
-void
-g_vfs_job_failed_literal (GVfsJob *job,
- GQuark domain,
- gint code,
- const gchar *message)
-{
- if (job->failed)
- return;
-
- job->failed = TRUE;
-
- job->error = g_error_new_literal (domain, code, message);
-
- g_vfs_job_send_reply (job);
-}
-
-void
-g_vfs_job_failed_from_error (GVfsJob * job,
- const GError *error)
-{
- if (job->failed)
- return;
-
- job->failed = TRUE;
- job->error = g_error_copy (error);
- g_vfs_job_send_reply (job);
-}
-
-void
-g_vfs_job_failed_from_errno (GVfsJob *job,
- gint errno_arg)
-{
- GError *error = NULL;
-
- g_set_error_literal (&error, G_IO_ERROR,
- g_io_error_from_errno (errno_arg),
- g_strerror (errno_arg));
- g_vfs_job_failed_from_error (job, error);
- g_error_free (error);
-}
-
-void
-g_vfs_job_succeeded (GVfsJob *job)
-{
- job->failed = FALSE;
- g_vfs_job_send_reply (job);
-}
-
-
-gboolean
-g_vfs_job_is_finished (GVfsJob *job)
-{
- return job->finished;
-}
-
-gboolean
-g_vfs_job_is_cancelled (GVfsJob *job)
-{
- return job->cancelled;
-}
-
-/* Might be called on an i/o thread */
-void
-g_vfs_job_emit_finished (GVfsJob *job)
-{
- g_assert (!job->finished);
-
- job->finished = TRUE;
- g_signal_emit (job, signals[FINISHED], 0);
-}
diff --git a/daemon/gvfsjob.h b/daemon/gvfsjob.h
deleted file mode 100644
index 254f7ac7..00000000
--- a/daemon/gvfsjob.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_H__
-#define __G_VFS_JOB_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB (g_vfs_job_get_type ())
-#define G_VFS_JOB(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB, GVfsJob))
-#define G_VFS_JOB_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB, GVfsJobClass))
-#define G_VFS_IS_JOB(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB))
-#define G_VFS_IS_JOB_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB))
-#define G_VFS_JOB_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB, GVfsJobClass))
-
-typedef struct _GVfsJob GVfsJob;
-typedef struct _GVfsJobPrivate GVfsJobPrivate;
-typedef struct _GVfsJobClass GVfsJobClass;
-
-/* Defined here to avoid circular includes */
-typedef struct _GVfsJobSource GVfsJobSource;
-
-struct _GVfsJob
-{
- GObject parent_instance;
-
- /* TODO: Move stuff to private */
- gpointer backend_data;
- GDestroyNotify backend_data_destroy;
-
- guint failed : 1;
- guint cancelled : 1;
- guint sent_reply : 1;
- guint finished : 1;
- GError *error;
- GCancellable *cancellable;
-
- GVfsJobPrivate *priv;
-};
-
-struct _GVfsJobClass
-{
- GObjectClass parent_class;
-
- /* signals */
- void (*cancelled) (GVfsJob *job);
- void (*send_reply) (GVfsJob *job);
- void (*new_source) (GVfsJob *job,
- GVfsJobSource *job_source);
- void (*finished) (GVfsJob *job);
-
- /* vtable */
-
- void (*run) (GVfsJob *job);
- gboolean (*try) (GVfsJob *job);
-};
-
-GType g_vfs_job_get_type (void) G_GNUC_CONST;
-
-void g_vfs_job_set_backend_data (GVfsJob *job,
- gpointer backend_data,
- GDestroyNotify destroy);
-gboolean g_vfs_job_is_finished (GVfsJob *job);
-gboolean g_vfs_job_is_cancelled (GVfsJob *job);
-void g_vfs_job_cancel (GVfsJob *job);
-void g_vfs_job_run (GVfsJob *job);
-gboolean g_vfs_job_try (GVfsJob *job);
-void g_vfs_job_emit_finished (GVfsJob *job);
-void g_vfs_job_failed (GVfsJob *job,
- GQuark domain,
- gint code,
- const gchar *format,
- ...) G_GNUC_PRINTF (4, 5);
-void g_vfs_job_failed_literal (GVfsJob *job,
- GQuark domain,
- gint code,
- const gchar *message);
-void g_vfs_job_failed_from_error (GVfsJob *job,
- const GError*error);
-void g_vfs_job_failed_from_errno (GVfsJob *job,
- gint errno_arg);
-void g_vfs_job_succeeded (GVfsJob *job);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_H__ */
diff --git a/daemon/gvfsjobcloseread.c b/daemon/gvfsjobcloseread.c
deleted file mode 100644
index d064f45f..00000000
--- a/daemon/gvfsjobcloseread.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include "gvfsreadchannel.h"
-#include "gvfsjobcloseread.h"
-#include "gvfsdaemonutils.h"
-
-G_DEFINE_TYPE (GVfsJobCloseRead, g_vfs_job_close_read, G_VFS_TYPE_JOB)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static void send_reply (GVfsJob *job);
-
-static void
-g_vfs_job_close_read_finalize (GObject *object)
-{
- GVfsJobCloseRead *job;
-
- job = G_VFS_JOB_CLOSE_READ (object);
- g_object_unref (job->channel);
-
- if (G_OBJECT_CLASS (g_vfs_job_close_read_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_close_read_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_close_read_class_init (GVfsJobCloseReadClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_close_read_finalize;
-
- job_class->run = run;
- job_class->try = try;
- job_class->send_reply = send_reply;
-}
-
-static void
-g_vfs_job_close_read_init (GVfsJobCloseRead *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_close_read_new (GVfsReadChannel *channel,
- GVfsBackendHandle handle,
- GVfsBackend *backend)
-{
- GVfsJobCloseRead *job;
-
- job = g_object_new (G_VFS_TYPE_JOB_CLOSE_READ,
- NULL);
-
- job->channel = g_object_ref (channel);
- job->backend = backend;
- job->handle = handle;
-
- return G_VFS_JOB (job);
-}
-
-/* Might be called on an i/o thread */
-static void
-send_reply (GVfsJob *job)
-{
- GVfsJobCloseRead *op_job = G_VFS_JOB_CLOSE_READ (job);
-
- g_print ("job_close_read send reply\n");
-
- if (job->failed)
- g_vfs_channel_send_error (G_VFS_CHANNEL (op_job->channel), job->error);
- else
- g_vfs_read_channel_send_closed (op_job->channel);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobCloseRead *op_job = G_VFS_JOB_CLOSE_READ (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->close_read == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->close_read (op_job->backend,
- op_job,
- op_job->handle);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobCloseRead *op_job = G_VFS_JOB_CLOSE_READ (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_close_read == NULL)
- return FALSE;
-
- return class->try_close_read (op_job->backend,
- op_job,
- op_job->handle);
-}
diff --git a/daemon/gvfsjobcloseread.h b/daemon/gvfsjobcloseread.h
deleted file mode 100644
index 6ef33341..00000000
--- a/daemon/gvfsjobcloseread.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_CLOSE_READ_H__
-#define __G_VFS_JOB_CLOSE_READ_H__
-
-#include <gvfsjob.h>
-#include <gvfsbackend.h>
-#include <gvfsreadchannel.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_CLOSE_READ (g_vfs_job_close_read_get_type ())
-#define G_VFS_JOB_CLOSE_READ(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_CLOSE_READ, GVfsJobCloseRead))
-#define G_VFS_JOB_CLOSE_READ_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_CLOSE_READ, GVfsJobCloseReadClass))
-#define G_VFS_IS_JOB_CLOSE_READ(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_CLOSE_READ))
-#define G_VFS_IS_JOB_CLOSE_READ_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_CLOSE_READ))
-#define G_VFS_JOB_CLOSE_READ_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_CLOSE_READ, GVfsJobCloseReadClass))
-
-typedef struct _GVfsJobCloseReadClass GVfsJobCloseReadClass;
-
-struct _GVfsJobCloseRead
-{
- GVfsJob parent_instance;
-
- GVfsReadChannel *channel;
- GVfsBackend *backend;
- GVfsBackendHandle handle;
-};
-
-struct _GVfsJobCloseReadClass
-{
- GVfsJobClass parent_class;
-};
-
-GType g_vfs_job_close_read_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_close_read_new (GVfsReadChannel *channel,
- GVfsBackendHandle handle,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_CLOSE_READ_H__ */
diff --git a/daemon/gvfsjobclosewrite.c b/daemon/gvfsjobclosewrite.c
deleted file mode 100644
index 6bb15d96..00000000
--- a/daemon/gvfsjobclosewrite.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include "gvfswritechannel.h"
-#include "gvfsjobclosewrite.h"
-#include "gvfsdaemonutils.h"
-
-G_DEFINE_TYPE (GVfsJobCloseWrite, g_vfs_job_close_write, G_VFS_TYPE_JOB)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static void send_reply (GVfsJob *job);
-
-static void
-g_vfs_job_close_write_finalize (GObject *object)
-{
- GVfsJobCloseWrite *job;
-
- job = G_VFS_JOB_CLOSE_WRITE (object);
- g_object_unref (job->channel);
- g_free (job->etag);
-
- if (G_OBJECT_CLASS (g_vfs_job_close_write_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_close_write_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_close_write_class_init (GVfsJobCloseWriteClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_close_write_finalize;
-
- job_class->run = run;
- job_class->try = try;
- job_class->send_reply = send_reply;
-}
-
-static void
-g_vfs_job_close_write_init (GVfsJobCloseWrite *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_close_write_new (GVfsWriteChannel *channel,
- GVfsBackendHandle handle,
- GVfsBackend *backend)
-{
- GVfsJobCloseWrite *job;
-
- job = g_object_new (G_VFS_TYPE_JOB_CLOSE_WRITE,
- NULL);
-
- job->channel = g_object_ref (channel);
- job->backend = backend;
- job->handle = handle;
-
- return G_VFS_JOB (job);
-}
-
-void
-g_vfs_job_close_write_set_etag (GVfsJobCloseWrite *job,
- const char *etag)
-{
- job->etag = g_strdup (etag);
-}
-
-/* Might be called on an i/o thwrite */
-static void
-send_reply (GVfsJob *job)
-{
- GVfsJobCloseWrite *op_job = G_VFS_JOB_CLOSE_WRITE (job);
-
- g_print ("job_close_write send reply\n");
-
- if (job->failed)
- g_vfs_channel_send_error (G_VFS_CHANNEL (op_job->channel), job->error);
- else
- g_vfs_write_channel_send_closed (op_job->channel, op_job->etag ? op_job->etag : "");
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobCloseWrite *op_job = G_VFS_JOB_CLOSE_WRITE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->close_write == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->close_write (op_job->backend,
- op_job,
- op_job->handle);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobCloseWrite *op_job = G_VFS_JOB_CLOSE_WRITE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_close_write == NULL)
- return FALSE;
-
- return class->try_close_write (op_job->backend,
- op_job,
- op_job->handle);
-}
diff --git a/daemon/gvfsjobclosewrite.h b/daemon/gvfsjobclosewrite.h
deleted file mode 100644
index 6b4bf4ee..00000000
--- a/daemon/gvfsjobclosewrite.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_CLOSE_WRITE_H__
-#define __G_VFS_JOB_CLOSE_WRITE_H__
-
-#include <gvfsjob.h>
-#include <gvfsbackend.h>
-#include <gvfswritechannel.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_CLOSE_WRITE (g_vfs_job_close_write_get_type ())
-#define G_VFS_JOB_CLOSE_WRITE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_CLOSE_WRITE, GVfsJobCloseWrite))
-#define G_VFS_JOB_CLOSE_WRITE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_CLOSE_WRITE, GVfsJobCloseWriteClass))
-#define G_VFS_IS_JOB_CLOSE_WRITE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_CLOSE_WRITE))
-#define G_VFS_IS_JOB_CLOSE_WRITE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_CLOSE_WRITE))
-#define G_VFS_JOB_CLOSE_WRITE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_CLOSE_WRITE, GVfsJobCloseWriteClass))
-
-typedef struct _GVfsJobCloseWriteClass GVfsJobCloseWriteClass;
-
-struct _GVfsJobCloseWrite
-{
- GVfsJob parent_instance;
-
- char *etag;
- GVfsWriteChannel *channel;
- GVfsBackend *backend;
- GVfsBackendHandle handle;
-};
-
-struct _GVfsJobCloseWriteClass
-{
- GVfsJobClass parent_class;
-};
-
-GType g_vfs_job_close_write_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_close_write_new (GVfsWriteChannel *channel,
- GVfsBackendHandle handle,
- GVfsBackend *backend);
-
-void g_vfs_job_close_write_set_etag (GVfsJobCloseWrite *job,
- const char *etag);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_CLOSE_WRITE_H__ */
diff --git a/daemon/gvfsjobcopy.c b/daemon/gvfsjobcopy.c
deleted file mode 100644
index c37701fd..00000000
--- a/daemon/gvfsjobcopy.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <strings.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobcopy.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobCopy, g_vfs_job_copy, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_copy_finalize (GObject *object)
-{
- GVfsJobCopy *job;
-
- job = G_VFS_JOB_COPY (object);
-
- g_free (job->source);
- g_free (job->destination);
- g_free (job->callback_obj_path);
-
- if (G_OBJECT_CLASS (g_vfs_job_copy_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_copy_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_copy_class_init (GVfsJobCopyClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_copy_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_copy_init (GVfsJobCopy *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_copy_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobCopy *job;
- DBusMessage *reply;
- DBusError derror;
- int path1_len, path2_len;
- const char *path1_data, *path2_data, *callback_obj_path;
- dbus_uint32_t flags;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path1_data, &path1_len,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path2_data, &path2_len,
- DBUS_TYPE_UINT32, &flags,
- DBUS_TYPE_OBJECT_PATH, &callback_obj_path,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_COPY,
- "message", message,
- "connection", connection,
- NULL);
-
- job->source = g_strndup (path1_data, path1_len);
- job->destination = g_strndup (path2_data, path2_len);
- job->backend = backend;
- job->flags = flags;
- if (strcmp (callback_obj_path, "/org/gtk/vfs/void") != 0)
- job->callback_obj_path = g_strdup (callback_obj_path);
-
- return G_VFS_JOB (job);
-}
-
-static void
-progress_callback (goffset current_num_bytes,
- goffset total_num_bytes,
- gpointer user_data)
-{
- GVfsJob *job = G_VFS_JOB (user_data);
- GVfsJobDBus *dbus_job = G_VFS_JOB_DBUS (job);
- GVfsJobCopy *op_job = G_VFS_JOB_COPY (job);
- dbus_uint64_t current_dbus, total_dbus;
- DBusMessage *message;
-
- g_print ("progress_callback %d/%d\n", (int)current_num_bytes, (int)total_num_bytes);
-
- if (op_job->callback_obj_path == NULL)
- return;
-
- message =
- dbus_message_new_method_call (dbus_message_get_sender (dbus_job->message),
- op_job->callback_obj_path,
- G_VFS_DBUS_PROGRESS_INTERFACE,
- G_VFS_DBUS_PROGRESS_OP_PROGRESS);
- dbus_message_set_no_reply (message, TRUE);
-
- current_dbus = current_num_bytes;
- total_dbus = total_num_bytes;
- dbus_message_append_args (message,
- DBUS_TYPE_UINT64, &current_dbus,
- DBUS_TYPE_UINT64, &total_dbus,
- 0);
-
- /* Queues reply (threadsafely), actually sends it in mainloop */
- dbus_connection_send (dbus_job->connection, message, NULL);
- dbus_message_unref (message);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobCopy *op_job = G_VFS_JOB_COPY (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->copy == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->copy (op_job->backend,
- op_job,
- op_job->source,
- op_job->destination,
- op_job->flags,
- progress_callback,
- job);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobCopy *op_job = G_VFS_JOB_COPY (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_copy == NULL)
- return FALSE;
-
- return class->try_copy (op_job->backend,
- op_job,
- op_job->source,
- op_job->destination,
- op_job->flags,
- progress_callback,
- job);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobcopy.h b/daemon/gvfsjobcopy.h
deleted file mode 100644
index 20a8b7be..00000000
--- a/daemon/gvfsjobcopy.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_COPY_H__
-#define __G_VFS_JOB_COPY_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_COPY (g_vfs_job_copy_get_type ())
-#define G_VFS_JOB_COPY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_COPY, GVfsJobCopy))
-#define G_VFS_JOB_COPY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_COPY, GVfsJobCopyClass))
-#define G_VFS_IS_JOB_COPY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_COPY))
-#define G_VFS_IS_JOB_COPY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_COPY))
-#define G_VFS_JOB_COPY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_COPY, GVfsJobCopyClass))
-
-typedef struct _GVfsJobCopyClass GVfsJobCopyClass;
-
-struct _GVfsJobCopy
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *source;
- char *destination;
- GFileCopyFlags flags;
- char *callback_obj_path;
-
-};
-
-struct _GVfsJobCopyClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_copy_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_copy_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_COPY_H__ */
diff --git a/daemon/gvfsjobcreatemonitor.c b/daemon/gvfsjobcreatemonitor.c
deleted file mode 100644
index 3c63d263..00000000
--- a/daemon/gvfsjobcreatemonitor.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobcreatemonitor.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonutils.h"
-
-G_DEFINE_TYPE (GVfsJobCreateMonitor, g_vfs_job_create_monitor, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_create_monitor_finalize (GObject *object)
-{
- GVfsJobCreateMonitor *job;
-
- job = G_VFS_JOB_CREATE_MONITOR (object);
-
- g_free (job->filename);
- if (job->monitor)
- g_object_unref (job->monitor);
-
- if (G_OBJECT_CLASS (g_vfs_job_create_monitor_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_create_monitor_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_create_monitor_class_init (GVfsJobCreateMonitorClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_create_monitor_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_create_monitor_init (GVfsJobCreateMonitor *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_create_monitor_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend,
- gboolean is_directory)
-{
- GVfsJobCreateMonitor *job;
- DBusMessage *reply;
- DBusMessageIter iter;
- DBusError derror;
- char *path;
- guint32 flags;
-
- dbus_error_init (&derror);
- dbus_message_iter_init (message, &iter);
-
- path = NULL;
- if (!_g_dbus_message_iter_get_args (&iter, &derror,
- G_DBUS_TYPE_CSTRING, &path,
- DBUS_TYPE_UINT32, &flags,
- 0))
- {
- g_free (path);
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_CREATE_MONITOR,
- "message", message,
- "connection", connection,
- NULL);
-
- job->is_directory = is_directory;
- job->filename = path;
- job->backend = backend;
- job->flags = flags;
-
- return G_VFS_JOB (job);
-}
-
-void
-g_vfs_job_create_monitor_set_monitor (GVfsJobCreateMonitor *job,
- GVfsMonitor *monitor)
-{
- job->monitor = g_object_ref (monitor);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobCreateMonitor *op_job = G_VFS_JOB_CREATE_MONITOR (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (op_job->is_directory)
- {
- if (class->create_dir_monitor == NULL)
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- else
- class->create_dir_monitor (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
- else
- {
- if (class->create_file_monitor == NULL)
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- else
- class->create_file_monitor (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
-
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobCreateMonitor *op_job = G_VFS_JOB_CREATE_MONITOR (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (op_job->is_directory)
- {
- if (class->try_create_dir_monitor == NULL)
- {
- if (class->create_dir_monitor == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return TRUE;
- }
- return FALSE;
- }
-
- return class->try_create_dir_monitor (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
- else
- {
- if (class->try_create_file_monitor == NULL)
- {
- if (class->create_file_monitor == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return TRUE;
- }
- return FALSE;
- }
-
- return class->try_create_file_monitor (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
-}
-
-static gboolean
-unref_monitor_timeout (gpointer data)
-{
- GVfsMonitor *monitor = data;
-
- /* Unref the refcount for the VfsMonitor that we returned.
- If we didn't get an initial subscriber this is where we free the
- monitor */
- g_object_unref (monitor);
-
- return FALSE;
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- GVfsJobCreateMonitor *op_job = G_VFS_JOB_CREATE_MONITOR (job);
- DBusMessage *reply;
- DBusMessageIter iter;
- const char *obj_path;
-
- reply = dbus_message_new_method_return (message);
-
- /* Keep the monitor alive for at least 5 seconds
- to allow for a subscribe call to come in and bump
- the refcount */
- g_object_ref (op_job->monitor);
- g_timeout_add (5000,
- unref_monitor_timeout,
- op_job->monitor);
-
- obj_path = g_vfs_monitor_get_object_path (op_job->monitor);
- dbus_message_iter_init_append (reply, &iter);
- _g_dbus_message_append_args (reply,
- DBUS_TYPE_OBJECT_PATH, &obj_path,
- 0);
-
- return reply;
-}
diff --git a/daemon/gvfsjobcreatemonitor.h b/daemon/gvfsjobcreatemonitor.h
deleted file mode 100644
index f3277d34..00000000
--- a/daemon/gvfsjobcreatemonitor.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_CREATE_MONITOR_H__
-#define __G_VFS_JOB_CREATE_MONITOR_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-#include <gvfsmonitor.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_CREATE_MONITOR (g_vfs_job_create_monitor_get_type ())
-#define G_VFS_JOB_CREATE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_CREATE_MONITOR, GVfsJobCreateMonitor))
-#define G_VFS_JOB_CREATE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_CREATE_MONITOR, GVfsJobCreateMonitorClass))
-#define G_VFS_IS_JOB_CREATE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_CREATE_MONITOR))
-#define G_VFS_IS_JOB_CREATE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_CREATE_MONITOR))
-#define G_VFS_JOB_CREATE_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_CREATE_MONITOR, GVfsJobCreateMonitorClass))
-
-typedef struct _GVfsJobCreateMonitorClass GVfsJobCreateMonitorClass;
-
-struct _GVfsJobCreateMonitor
-{
- GVfsJobDBus parent_instance;
-
- gboolean is_directory;
- GVfsBackend *backend;
- char *filename;
- GFileMonitorFlags flags;
-
- GVfsMonitor *monitor;
-};
-
-struct _GVfsJobCreateMonitorClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_create_monitor_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_create_monitor_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend,
- gboolean is_directory);
-void g_vfs_job_create_monitor_set_monitor (GVfsJobCreateMonitor *job,
- GVfsMonitor *monitor);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_CREATE_MONITOR_H__ */
diff --git a/daemon/gvfsjobdbus.c b/daemon/gvfsjobdbus.c
deleted file mode 100644
index c74c3439..00000000
--- a/daemon/gvfsjobdbus.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobdbus.h"
-#include "gdbusutils.h"
-
-G_DEFINE_TYPE (GVfsJobDBus, g_vfs_job_dbus, G_VFS_TYPE_JOB)
-
-/* TODO: Real P_() */
-#define P_(_x) (_x)
-
-enum {
- PROP_0,
- PROP_MESSAGE,
- PROP_CONNECTION
-};
-
-static void send_reply (GVfsJob *job);
-static void g_vfs_job_dbus_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-static void g_vfs_job_dbus_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-
-static void
-g_vfs_job_dbus_finalize (GObject *object)
-{
- GVfsJobDBus *job;
-
- job = G_VFS_JOB_DBUS (object);
-
- if (job->message)
- dbus_message_unref (job->message);
-
- if (job->connection)
- dbus_connection_unref (job->connection);
-
- if (G_OBJECT_CLASS (g_vfs_job_dbus_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_dbus_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_dbus_class_init (GVfsJobDBusClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_dbus_finalize;
- gobject_class->set_property = g_vfs_job_dbus_set_property;
- gobject_class->get_property = g_vfs_job_dbus_get_property;
-
- job_class->send_reply = send_reply;
-
- g_object_class_install_property (gobject_class,
- PROP_CONNECTION,
- g_param_spec_pointer ("connection",
- P_("VFS Backend"),
- P_("The implementation for this job operartion."),
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
- g_object_class_install_property (gobject_class,
- PROP_MESSAGE,
- g_param_spec_pointer ("message",
- P_("VFS Backend"),
- P_("The implementation for this job operartion."),
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
-}
-
-static void
-g_vfs_job_dbus_init (GVfsJobDBus *job)
-{
-}
-
-static void
-g_vfs_job_dbus_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GVfsJobDBus *job = G_VFS_JOB_DBUS (object);
-
- switch (prop_id)
- {
- case PROP_MESSAGE:
- job->message = dbus_message_ref (g_value_get_pointer (value));
- break;
- case PROP_CONNECTION:
- job->connection = dbus_connection_ref (g_value_get_pointer (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-g_vfs_job_dbus_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GVfsJobDBus *job = G_VFS_JOB_DBUS (object);
-
- switch (prop_id)
- {
- case PROP_MESSAGE:
- g_value_set_pointer (value, job->message);
- break;
- case PROP_CONNECTION:
- g_value_set_pointer (value, job->connection);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-/* Might be called on an i/o thread */
-static void
-send_reply (GVfsJob *job)
-{
- GVfsJobDBus *dbus_job = G_VFS_JOB_DBUS (job);
- DBusMessage *reply;
- GVfsJobDBusClass *class;
-
- g_print ("send_reply(%p), failed=%d (%s)\n", job, job->failed, job->failed?job->error->message:"");
-
- class = G_VFS_JOB_DBUS_GET_CLASS (job);
-
- if (job->failed)
- reply = _dbus_message_new_from_gerror (dbus_job->message, job->error);
- else
- reply = class->create_reply (job, dbus_job->connection, dbus_job->message);
-
- g_assert (reply != NULL);
-
- /* Queues reply (threadsafely), actually sends it in mainloop */
- dbus_connection_send (dbus_job->connection, reply, NULL);
- dbus_message_unref (reply);
-
- g_vfs_job_emit_finished (job);
-}
-
-DBusConnection *
-g_vfs_job_dbus_get_connection (GVfsJobDBus *job_dbus)
-{
- return job_dbus->connection;
-}
-
-DBusMessage *
-g_vfs_job_dbus_get_message (GVfsJobDBus *job_dbus)
-{
- return job_dbus->message;
-}
-
-gboolean
-g_vfs_job_dbus_is_serial (GVfsJobDBus *job_dbus,
- DBusConnection *connection,
- dbus_uint32_t serial)
-{
- return job_dbus->connection == connection &&
- dbus_message_get_serial (job_dbus->message) == serial;
-}
diff --git a/daemon/gvfsjobdbus.h b/daemon/gvfsjobdbus.h
deleted file mode 100644
index 05948188..00000000
--- a/daemon/gvfsjobdbus.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_DBUS_H__
-#define __G_VFS_JOB_DBUS_H__
-
-#include <dbus/dbus.h>
-#include <gvfsjob.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_DBUS (g_vfs_job_dbus_get_type ())
-#define G_VFS_JOB_DBUS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_DBUS, GVfsJobDBus))
-#define G_VFS_JOB_DBUS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_DBUS, GVfsJobDBusClass))
-#define G_VFS_IS_JOB_DBUS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_DBUS))
-#define G_VFS_IS_JOB_DBUS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_DBUS))
-#define G_VFS_JOB_DBUS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_DBUS, GVfsJobDBusClass))
-
-typedef struct _GVfsJobDBus GVfsJobDBus;
-typedef struct _GVfsJobDBusClass GVfsJobDBusClass;
-
-struct _GVfsJobDBus
-{
- GVfsJob parent_instance;
-
- DBusConnection *connection;
- DBusMessage *message;
-};
-
-struct _GVfsJobDBusClass
-{
- GVfsJobClass parent_class;
-
- /* Might be called on an i/o thread */
- DBusMessage * (*create_reply) (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-};
-
-GType g_vfs_job_dbus_get_type (void) G_GNUC_CONST;
-
-gboolean g_vfs_job_dbus_is_serial (GVfsJobDBus *job_dbus,
- DBusConnection *connection,
- dbus_uint32_t serial);
-DBusConnection *g_vfs_job_dbus_get_connection (GVfsJobDBus *job_dbus);
-DBusMessage *g_vfs_job_dbus_get_message (GVfsJobDBus *job_dbus);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_DBUS_H__ */
diff --git a/daemon/gvfsjobdelete.c b/daemon/gvfsjobdelete.c
deleted file mode 100644
index b65ec299..00000000
--- a/daemon/gvfsjobdelete.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobdelete.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobDelete, g_vfs_job_delete, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_delete_finalize (GObject *object)
-{
- GVfsJobDelete *job;
-
- job = G_VFS_JOB_DELETE (object);
-
- g_free (job->filename);
-
- if (G_OBJECT_CLASS (g_vfs_job_delete_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_delete_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_delete_class_init (GVfsJobDeleteClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_delete_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_delete_init (GVfsJobDelete *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_delete_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobDelete *job;
- DBusMessage *reply;
- DBusError derror;
- int path_len;
- const char *path_data;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path_data, &path_len,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_DELETE,
- "message", message,
- "connection", connection,
- NULL);
-
- job->filename = g_strndup (path_data, path_len);
- job->backend = backend;
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobDelete *op_job = G_VFS_JOB_DELETE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->delete == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->delete (op_job->backend,
- op_job,
- op_job->filename);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobDelete *op_job = G_VFS_JOB_DELETE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_delete == NULL)
- return FALSE;
-
- return class->try_delete (op_job->backend,
- op_job,
- op_job->filename);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobdelete.h b/daemon/gvfsjobdelete.h
deleted file mode 100644
index 10db6521..00000000
--- a/daemon/gvfsjobdelete.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_DELETE_H__
-#define __G_VFS_JOB_DELETE_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_DELETE (g_vfs_job_delete_get_type ())
-#define G_VFS_JOB_DELETE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_DELETE, GVfsJobDelete))
-#define G_VFS_JOB_DELETE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_DELETE, GVfsJobDeleteClass))
-#define G_VFS_IS_JOB_DELETE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_DELETE))
-#define G_VFS_IS_JOB_DELETE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_DELETE))
-#define G_VFS_JOB_DELETE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_DELETE, GVfsJobDeleteClass))
-
-typedef struct _GVfsJobDeleteClass GVfsJobDeleteClass;
-
-struct _GVfsJobDelete
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *filename;
-};
-
-struct _GVfsJobDeleteClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_delete_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_delete_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_DELETE_H__ */
diff --git a/daemon/gvfsjobenumerate.c b/daemon/gvfsjobenumerate.c
deleted file mode 100644
index 6c4e6acc..00000000
--- a/daemon/gvfsjobenumerate.c
+++ /dev/null
@@ -1,320 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobenumerate.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobEnumerate, g_vfs_job_enumerate, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static void send_reply (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_enumerate_finalize (GObject *object)
-{
- GVfsJobEnumerate *job;
-
- job = G_VFS_JOB_ENUMERATE (object);
-
- g_free (job->filename);
- g_free (job->attributes);
- g_file_attribute_matcher_unref (job->attribute_matcher);
- g_free (job->object_path);
- g_free (job->uri);
-
- if (G_OBJECT_CLASS (g_vfs_job_enumerate_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_enumerate_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_enumerate_class_init (GVfsJobEnumerateClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_enumerate_finalize;
- job_class->run = run;
- job_class->try = try;
- job_class->send_reply = send_reply;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_enumerate_init (GVfsJobEnumerate *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_enumerate_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobEnumerate *job;
- DBusMessage *reply;
- DBusError derror;
- int path_len;
- const char *obj_path;
- const char *path_data;
- char *attributes, *uri;
- dbus_uint32_t flags;
- DBusMessageIter iter;
-
- dbus_message_iter_init (message, &iter);
- dbus_error_init (&derror);
- if (!_g_dbus_message_iter_get_args (&iter, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path_data, &path_len,
- DBUS_TYPE_STRING, &obj_path,
- DBUS_TYPE_STRING, &attributes,
- DBUS_TYPE_UINT32, &flags,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- /* Optional uri arg for thumbnail info */
- if (!_g_dbus_message_iter_get_args (&iter, NULL,
- DBUS_TYPE_STRING, &uri,
- 0))
- uri = NULL;
-
- job = g_object_new (G_VFS_TYPE_JOB_ENUMERATE,
- "message", message,
- "connection", connection,
- NULL);
-
- job->object_path = g_strdup (obj_path);
- job->filename = g_strndup (path_data, path_len);
- job->backend = backend;
- job->attributes = g_strdup (attributes);
- job->attribute_matcher = g_file_attribute_matcher_new (attributes);
- job->flags = flags;
- job->uri = g_strdup (uri);
-
- return G_VFS_JOB (job);
-}
-
-static void
-send_infos (GVfsJobEnumerate *job)
-{
- if (!dbus_message_iter_close_container (&job->building_iter, &job->building_array_iter))
- _g_dbus_oom ();
-
- dbus_connection_send (g_vfs_job_dbus_get_connection (G_VFS_JOB_DBUS (job)),
- job->building_infos, NULL);
- dbus_message_unref (job->building_infos);
- job->building_infos = NULL;
- job->n_building_infos = 0;
-}
-
-void
-g_vfs_job_enumerate_add_info (GVfsJobEnumerate *job,
- GFileInfo *info)
-{
- DBusMessage *message, *orig_message;
- char *uri, *escaped_name;
-
- if (job->building_infos == NULL)
- {
- orig_message = g_vfs_job_dbus_get_message (G_VFS_JOB_DBUS (job));
-
- message = dbus_message_new_method_call (dbus_message_get_sender (orig_message),
- job->object_path,
- G_VFS_DBUS_ENUMERATOR_INTERFACE,
- G_VFS_DBUS_ENUMERATOR_OP_GOT_INFO);
- dbus_message_set_no_reply (message, TRUE);
-
- dbus_message_iter_init_append (message, &job->building_iter);
-
- if (!dbus_message_iter_open_container (&job->building_iter,
- DBUS_TYPE_ARRAY,
- G_FILE_INFO_TYPE_AS_STRING,
- &job->building_array_iter))
- _g_dbus_oom ();
-
- job->building_infos = message;
- job->n_building_infos = 0;
- }
-
-
-
- uri = NULL;
- if (job->uri != NULL &&
- g_file_info_get_name (info) != NULL)
- {
- escaped_name = g_uri_escape_string (g_file_info_get_name (info),
- G_URI_RESERVED_CHARS_ALLOWED_IN_PATH,
- FALSE);
- uri = g_build_path ("/", job->uri, escaped_name, NULL);
- g_free (escaped_name);
- }
-
- g_vfs_backend_add_auto_info (job->backend,
- job->attribute_matcher,
- info,
- uri);
- g_free (uri);
-
- g_file_info_set_attribute_mask (info, job->attribute_matcher);
-
- _g_dbus_append_file_info (&job->building_array_iter, info);
- job->n_building_infos++;
-
- if (job->n_building_infos == 50)
- send_infos (job);
-}
-
-void
-g_vfs_job_enumerate_add_infos (GVfsJobEnumerate *job,
- const GList *infos)
-{
- const GList *l;
- GFileInfo *info;
-
- for (l = infos; l != NULL; l = l->next)
- {
- info = l->data;
- g_vfs_job_enumerate_add_info (job, info);
- }
-}
-
-void
-g_vfs_job_enumerate_done (GVfsJobEnumerate *job)
-{
- DBusMessage *message, *orig_message;
-
- g_assert (!G_VFS_JOB (job)->failed);
-
- if (job->building_infos != NULL)
- send_infos (job);
-
- orig_message = g_vfs_job_dbus_get_message (G_VFS_JOB_DBUS (job));
-
- message = dbus_message_new_method_call (dbus_message_get_sender (orig_message),
- job->object_path,
- G_VFS_DBUS_ENUMERATOR_INTERFACE,
- G_VFS_DBUS_ENUMERATOR_OP_DONE);
- dbus_message_set_no_reply (message, TRUE);
-
- dbus_connection_send (g_vfs_job_dbus_get_connection (G_VFS_JOB_DBUS (job)),
- message, NULL);
- dbus_message_unref (message);
-
- g_vfs_job_emit_finished (G_VFS_JOB (job));
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobEnumerate *op_job = G_VFS_JOB_ENUMERATE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->enumerate == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->enumerate (op_job->backend,
- op_job,
- op_job->filename,
- op_job->attribute_matcher,
- op_job->flags);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobEnumerate *op_job = G_VFS_JOB_ENUMERATE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_enumerate == NULL)
- return FALSE;
-
- return class->try_enumerate (op_job->backend,
- op_job,
- op_job->filename,
- op_job->attribute_matcher,
- op_job->flags);
-}
-
-static void
-send_reply (GVfsJob *job)
-{
- GVfsJobDBus *dbus_job = G_VFS_JOB_DBUS (job);
- DBusMessage *reply;
- GVfsJobDBusClass *class;
-
- g_print ("send_reply(%p), failed=%d (%s)\n", job, job->failed, job->failed?job->error->message:"");
-
- class = G_VFS_JOB_DBUS_GET_CLASS (job);
-
- if (job->failed)
- reply = _dbus_message_new_from_gerror (dbus_job->message, job->error);
- else
- reply = class->create_reply (job, dbus_job->connection, dbus_job->message);
-
- g_assert (reply != NULL);
-
- /* Queues reply (threadsafely), actually sends it in mainloop */
- dbus_connection_send (dbus_job->connection, reply, NULL);
- dbus_message_unref (reply);
-
- if (job->failed)
- g_vfs_job_emit_finished (job);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobenumerate.h b/daemon/gvfsjobenumerate.h
deleted file mode 100644
index 731842e6..00000000
--- a/daemon/gvfsjobenumerate.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_ENUMERATE_H__
-#define __G_VFS_JOB_ENUMERATE_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_ENUMERATE (g_vfs_job_enumerate_get_type ())
-#define G_VFS_JOB_ENUMERATE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_ENUMERATE, GVfsJobEnumerate))
-#define G_VFS_JOB_ENUMERATE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_ENUMERATE, GVfsJobEnumerateClass))
-#define G_VFS_IS_JOB_ENUMERATE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_ENUMERATE))
-#define G_VFS_IS_JOB_ENUMERATE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_ENUMERATE))
-#define G_VFS_JOB_ENUMERATE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_ENUMERATE, GVfsJobEnumerateClass))
-
-typedef struct _GVfsJobEnumerateClass GVfsJobEnumerateClass;
-
-struct _GVfsJobEnumerate
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *filename;
- char *object_path;
- char *attributes;
- GFileAttributeMatcher *attribute_matcher;
- GFileQueryInfoFlags flags;
- char *uri;
-
- DBusMessage *building_infos;
- DBusMessageIter building_iter;
- DBusMessageIter building_array_iter;
- int n_building_infos;
-};
-
-struct _GVfsJobEnumerateClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_enumerate_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_enumerate_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-void g_vfs_job_enumerate_add_info (GVfsJobEnumerate *job,
- GFileInfo *info);
-void g_vfs_job_enumerate_add_infos (GVfsJobEnumerate *job,
- const GList *info);
-void g_vfs_job_enumerate_done (GVfsJobEnumerate *job);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_ENUMERATE_H__ */
diff --git a/daemon/gvfsjobmakedirectory.c b/daemon/gvfsjobmakedirectory.c
deleted file mode 100644
index 2e16b12d..00000000
--- a/daemon/gvfsjobmakedirectory.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobmakedirectory.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobMakeDirectory, g_vfs_job_make_directory, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_make_directory_finalize (GObject *object)
-{
- GVfsJobMakeDirectory *job;
-
- job = G_VFS_JOB_MAKE_DIRECTORY (object);
-
- g_free (job->filename);
-
- if (G_OBJECT_CLASS (g_vfs_job_make_directory_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_make_directory_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_make_directory_class_init (GVfsJobMakeDirectoryClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_make_directory_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_make_directory_init (GVfsJobMakeDirectory *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_make_directory_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobMakeDirectory *job;
- DBusMessage *reply;
- DBusError derror;
- int path_len;
- const char *path_data;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path_data, &path_len,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_MAKE_DIRECTORY,
- "message", message,
- "connection", connection,
- NULL);
-
- job->filename = g_strndup (path_data, path_len);
- job->backend = backend;
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobMakeDirectory *op_job = G_VFS_JOB_MAKE_DIRECTORY (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->make_directory == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->make_directory (op_job->backend,
- op_job,
- op_job->filename);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobMakeDirectory *op_job = G_VFS_JOB_MAKE_DIRECTORY (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_make_directory == NULL)
- return FALSE;
-
- return class->try_make_directory (op_job->backend,
- op_job,
- op_job->filename);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobmakedirectory.h b/daemon/gvfsjobmakedirectory.h
deleted file mode 100644
index 00cbaf0f..00000000
--- a/daemon/gvfsjobmakedirectory.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_MAKE_DIRECTORY_H__
-#define __G_VFS_JOB_MAKE_DIRECTORY_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_MAKE_DIRECTORY (g_vfs_job_make_directory_get_type ())
-#define G_VFS_JOB_MAKE_DIRECTORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_MAKE_DIRECTORY, GVfsJobMakeDirectory))
-#define G_VFS_JOB_MAKE_DIRECTORY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_MAKE_DIRECTORY, GVfsJobMakeDirectoryClass))
-#define G_VFS_IS_JOB_MAKE_DIRECTORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_MAKE_DIRECTORY))
-#define G_VFS_IS_JOB_MAKE_DIRECTORY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_MAKE_DIRECTORY))
-#define G_VFS_JOB_MAKE_DIRECTORY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_MAKE_DIRECTORY, GVfsJobMakeDirectoryClass))
-
-typedef struct _GVfsJobMakeDirectoryClass GVfsJobMakeDirectoryClass;
-
-struct _GVfsJobMakeDirectory
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *filename;
-};
-
-struct _GVfsJobMakeDirectoryClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_make_directory_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_make_directory_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_MAKE_DIRECTORY_H__ */
diff --git a/daemon/gvfsjobmakesymlink.c b/daemon/gvfsjobmakesymlink.c
deleted file mode 100644
index 898010fc..00000000
--- a/daemon/gvfsjobmakesymlink.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobmakesymlink.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobMakeSymlink, g_vfs_job_make_symlink, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_make_symlink_finalize (GObject *object)
-{
- GVfsJobMakeSymlink *job;
-
- job = G_VFS_JOB_MAKE_SYMLINK (object);
-
- g_free (job->filename);
- g_free (job->symlink_value);
-
- if (G_OBJECT_CLASS (g_vfs_job_make_symlink_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_make_symlink_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_make_symlink_class_init (GVfsJobMakeSymlinkClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_make_symlink_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_make_symlink_init (GVfsJobMakeSymlink *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_make_symlink_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobMakeSymlink *job;
- DBusMessage *reply;
- DBusError derror;
- int path_len, symlink_len;
- const char *path_data, *symlink_data;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path_data, &path_len,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &symlink_data, &symlink_len,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_MAKE_SYMLINK,
- "message", message,
- "connection", connection,
- NULL);
-
- job->filename = g_strndup (path_data, path_len);
- job->symlink_value = g_strndup (symlink_data, symlink_len);
- job->backend = backend;
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobMakeSymlink *op_job = G_VFS_JOB_MAKE_SYMLINK (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->make_symlink == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Symlinks not supported by backend"));
- return;
- }
-
- class->make_symlink (op_job->backend,
- op_job,
- op_job->filename,
- op_job->symlink_value);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobMakeSymlink *op_job = G_VFS_JOB_MAKE_SYMLINK (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_make_symlink == NULL)
- return FALSE;
-
- return class->try_make_symlink (op_job->backend,
- op_job,
- op_job->filename,
- op_job->symlink_value);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobmakesymlink.h b/daemon/gvfsjobmakesymlink.h
deleted file mode 100644
index a662f2b4..00000000
--- a/daemon/gvfsjobmakesymlink.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_MAKE_SYMLINK_H__
-#define __G_VFS_JOB_MAKE_SYMLINK_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_MAKE_SYMLINK (g_vfs_job_make_symlink_get_type ())
-#define G_VFS_JOB_MAKE_SYMLINK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_MAKE_SYMLINK, GVfsJobMakeSymlink))
-#define G_VFS_JOB_MAKE_SYMLINK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_MAKE_SYMLINK, GVfsJobMakeSymlinkClass))
-#define G_VFS_IS_JOB_MAKE_SYMLINK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_MAKE_SYMLINK))
-#define G_VFS_IS_JOB_MAKE_SYMLINK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_MAKE_SYMLINK))
-#define G_VFS_JOB_MAKE_SYMLINK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_MAKE_SYMLINK, GVfsJobMakeSymlinkClass))
-
-typedef struct _GVfsJobMakeSymlinkClass GVfsJobMakeSymlinkClass;
-
-struct _GVfsJobMakeSymlink
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *filename;
- char *symlink_value;
-};
-
-struct _GVfsJobMakeSymlinkClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_make_symlink_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_make_symlink_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_MAKE_SYMLINK_H__ */
diff --git a/daemon/gvfsjobmount.c b/daemon/gvfsjobmount.c
deleted file mode 100644
index 6dcd1ce2..00000000
--- a/daemon/gvfsjobmount.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobmount.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobMount, g_vfs_job_mount, G_VFS_TYPE_JOB)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static void send_reply (GVfsJob *job);
-
-static void
-g_vfs_job_mount_finalize (GObject *object)
-{
- GVfsJobMount *job;
-
- job = G_VFS_JOB_MOUNT (object);
-
- g_mount_spec_unref (job->mount_spec);
- g_object_unref (job->mount_source);
- g_object_unref (job->backend);
-
- if (G_OBJECT_CLASS (g_vfs_job_mount_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_mount_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_mount_class_init (GVfsJobMountClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_mount_finalize;
- job_class->run = run;
- job_class->try = try;
- job_class->send_reply = send_reply;
-}
-
-static void
-g_vfs_job_mount_init (GVfsJobMount *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_mount_new (GMountSpec *spec,
- GMountSource *source,
- gboolean is_automount,
- DBusMessage *request,
- GVfsBackend *backend)
-{
- GVfsJobMount *job;
-
- job = g_object_new (G_VFS_TYPE_JOB_MOUNT,
- NULL);
-
- job->mount_spec = g_mount_spec_ref (spec);
- job->mount_source = g_object_ref (source);
- job->is_automount = is_automount;
- /* Ref the backend so we're sure its alive
- during the whole job request. */
- job->backend = g_object_ref (backend);
- if (request)
- job->request = dbus_message_ref (request);
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobMount *op_job = G_VFS_JOB_MOUNT (job);
- GVfsBackend *backend = op_job->backend;
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (backend);
-
- if (class->mount == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->mount (backend,
- op_job,
- op_job->mount_spec,
- op_job->mount_source,
- op_job->is_automount);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobMount *op_job = G_VFS_JOB_MOUNT (job);
- GVfsBackend *backend = op_job->backend;
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (backend);
- gboolean result;
-
- if (class->try_mount == NULL)
- return FALSE;
-
- result = class->try_mount (backend,
- op_job,
- op_job->mount_spec,
- op_job->mount_source,
- op_job->is_automount);
- return result;
-}
-
-static void
-mount_failed (GVfsJobMount *op_job, GError *error)
-{
- DBusConnection *conn;
- DBusMessage *reply;
- GVfsBackend *backend;
-
- if (op_job->request)
- {
- reply = _dbus_message_new_from_gerror (op_job->request, error);
-
- /* Queues reply (threadsafely), actually sends it in mainloop */
- conn = dbus_bus_get (DBUS_BUS_SESSION, NULL);
- if (conn)
- {
- dbus_connection_send (conn, reply, NULL);
- dbus_message_unref (reply);
- dbus_connection_unref (conn);
- }
- }
- else
- g_print ("Mount failed: %s\n", error->message);
-
- backend = g_object_ref (op_job->backend);
- g_vfs_job_emit_finished (G_VFS_JOB (op_job));
-
- /* Remove failed backend from daemon */
- g_vfs_job_source_closed (G_VFS_JOB_SOURCE (backend));
- g_object_unref (backend);
-}
-
-static void
-register_mount_callback (DBusMessage *mount_reply,
- GError *error,
- gpointer user_data)
-{
- GVfsJobMount *op_job = G_VFS_JOB_MOUNT (user_data);
- DBusConnection *conn;
- DBusMessage *reply;
-
- g_print ("register_mount_callback, mount_reply: %p, error: %p\n", mount_reply, error);
-
- if (mount_reply == NULL)
- mount_failed (op_job, error);
- else
- {
- if (op_job->request)
- {
- reply = dbus_message_new_method_return (op_job->request);
- /* Queues reply (threadsafely), actually sends it in mainloop */
- conn = dbus_bus_get (DBUS_BUS_SESSION, NULL);
- if (conn)
- {
- dbus_connection_send (conn, reply, NULL);
- dbus_message_unref (reply);
- dbus_connection_unref (conn);
- }
- }
-
- g_vfs_job_emit_finished (G_VFS_JOB (op_job));
- }
-}
-
-/* Might be called on an i/o thread */
-static void
-send_reply (GVfsJob *job)
-{
- GVfsJobMount *op_job = G_VFS_JOB_MOUNT (job);
-
- g_print ("send_reply, failed: %d\n", job->failed);
-
- if (job->failed)
- mount_failed (op_job, job->error);
- else
- g_vfs_backend_register_mount (op_job->backend,
- register_mount_callback,
- job);
-}
diff --git a/daemon/gvfsjobmount.h b/daemon/gvfsjobmount.h
deleted file mode 100644
index 8e8f312e..00000000
--- a/daemon/gvfsjobmount.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_MOUNT_H__
-#define __G_VFS_JOB_MOUNT_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_MOUNT (g_vfs_job_mount_get_type ())
-#define G_VFS_JOB_MOUNT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_MOUNT, GVfsJobMount))
-#define G_VFS_JOB_MOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_MOUNT, GVfsJobMountClass))
-#define G_VFS_IS_JOB_MOUNT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_MOUNT))
-#define G_VFS_IS_JOB_MOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_MOUNT))
-#define G_VFS_JOB_MOUNT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_MOUNT, GVfsJobMountClass))
-
-typedef struct _GVfsJobMountClass GVfsJobMountClass;
-
-struct _GVfsJobMount
-{
- GVfsJob parent_instance;
-
- GVfsBackend *backend;
- gboolean is_automount;
- GMountSpec *mount_spec;
- GMountSource *mount_source;
- DBusMessage *request;
-};
-
-struct _GVfsJobMountClass
-{
- GVfsJobClass parent_class;
-};
-
-GType g_vfs_job_mount_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_mount_new (GMountSpec *spec,
- GMountSource *source,
- gboolean is_automount,
- DBusMessage *request,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_MOUNT_H__ */
diff --git a/daemon/gvfsjobmountmountable.c b/daemon/gvfsjobmountmountable.c
deleted file mode 100644
index 4397bc1f..00000000
--- a/daemon/gvfsjobmountmountable.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobmountmountable.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonutils.h"
-
-G_DEFINE_TYPE (GVfsJobMountMountable, g_vfs_job_mount_mountable, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_mount_mountable_finalize (GObject *object)
-{
- GVfsJobMountMountable *job;
-
- job = G_VFS_JOB_MOUNT_MOUNTABLE (object);
-
- if (job->mount_source)
- g_object_unref (job->mount_source);
-
- if (job->mount_spec)
- g_mount_spec_unref (job->mount_spec);
-
- g_free (job->filename);
- g_free (job->target_filename);
-
- if (G_OBJECT_CLASS (g_vfs_job_mount_mountable_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_mount_mountable_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_mount_mountable_class_init (GVfsJobMountMountableClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_mount_mountable_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_mount_mountable_init (GVfsJobMountMountable *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_mount_mountable_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobMountMountable *job;
- DBusMessage *reply;
- DBusMessageIter iter;
- DBusError derror;
- char *path;
- const char *dbus_id, *obj_path;
-
- dbus_error_init (&derror);
- dbus_message_iter_init (message, &iter);
-
- path = NULL;
- if (!_g_dbus_message_iter_get_args (&iter, &derror,
- G_DBUS_TYPE_CSTRING, &path,
- DBUS_TYPE_STRING, &dbus_id,
- DBUS_TYPE_OBJECT_PATH, &obj_path,
- 0))
- {
- g_free (path);
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_MOUNT_MOUNTABLE,
- "message", message,
- "connection", connection,
- NULL);
-
- job->filename = path;
- job->backend = backend;
- job->mount_source = g_mount_source_new (dbus_id, obj_path);
-
- return G_VFS_JOB (job);
-}
-
-void
-g_vfs_job_mount_mountable_set_target (GVfsJobMountMountable *job,
- GMountSpec *mount_spec,
- const char *filename,
- gboolean must_mount_location)
-{
- job->mount_spec = g_mount_spec_ref (mount_spec);
- job->target_filename = g_strdup (filename);
- job->must_mount_location = must_mount_location;
-}
-
-void
-g_vfs_job_mount_mountable_set_target_uri (GVfsJobMountMountable *job,
- const char *uri,
- gboolean must_mount_location)
-{
- job->target_uri = g_strdup (uri);
- job->must_mount_location = must_mount_location;
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobMountMountable *op_job = G_VFS_JOB_MOUNT_MOUNTABLE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->mount_mountable == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->mount_mountable (op_job->backend,
- op_job,
- op_job->filename,
- op_job->mount_source);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobMountMountable *op_job = G_VFS_JOB_MOUNT_MOUNTABLE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_mount_mountable == NULL)
- return FALSE;
-
- return class->try_mount_mountable (op_job->backend,
- op_job,
- op_job->filename,
- op_job->mount_source);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- GVfsJobMountMountable *op_job = G_VFS_JOB_MOUNT_MOUNTABLE (job);
- DBusMessage *reply;
- DBusMessageIter iter;
- dbus_bool_t must_mount, is_uri;
-
- reply = dbus_message_new_method_return (message);
-
- must_mount = op_job->must_mount_location;
- is_uri = op_job->target_uri != NULL;
- if (is_uri)
- {
- _g_dbus_message_append_args (reply,
- DBUS_TYPE_BOOLEAN, &is_uri,
- G_DBUS_TYPE_CSTRING, &op_job->target_uri,
- DBUS_TYPE_BOOLEAN, &must_mount,
- 0);
- }
- else
- {
- _g_dbus_message_append_args (reply,
- DBUS_TYPE_BOOLEAN, &is_uri,
- G_DBUS_TYPE_CSTRING, &op_job->target_filename,
- DBUS_TYPE_BOOLEAN, &must_mount,
- 0);
- dbus_message_iter_init_append (reply, &iter);
- g_mount_spec_to_dbus (&iter, op_job->mount_spec);
- }
-
- return reply;
-}
diff --git a/daemon/gvfsjobmountmountable.h b/daemon/gvfsjobmountmountable.h
deleted file mode 100644
index 70968bf0..00000000
--- a/daemon/gvfsjobmountmountable.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_MOUNT_MOUNTABLE_H__
-#define __G_VFS_JOB_MOUNT_MOUNTABLE_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_MOUNT_MOUNTABLE (g_vfs_job_mount_mountable_get_type ())
-#define G_VFS_JOB_MOUNT_MOUNTABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_MOUNT_MOUNTABLE, GVfsJobMountMountable))
-#define G_VFS_JOB_MOUNT_MOUNTABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_MOUNT_MOUNTABLE, GVfsJobMountMountableClass))
-#define G_VFS_IS_JOB_MOUNT_MOUNTABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_MOUNT_MOUNTABLE))
-#define G_VFS_IS_JOB_MOUNT_MOUNTABLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_MOUNT_MOUNTABLE))
-#define G_VFS_JOB_MOUNT_MOUNTABLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_MOUNT_MOUNTABLE, GVfsJobMountMountableClass))
-
-typedef struct _GVfsJobMountMountableClass GVfsJobMountMountableClass;
-
-struct _GVfsJobMountMountable
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *filename;
- GMountSource *mount_source;
-
- char *target_uri;
- char *target_filename;
- GMountSpec *mount_spec;
- gboolean must_mount_location;
-};
-
-struct _GVfsJobMountMountableClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_mount_mountable_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_mount_mountable_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-void g_vfs_job_mount_mountable_set_target (GVfsJobMountMountable *job,
- GMountSpec *mount_spec,
- const char *filename,
- gboolean must_mount_location);
-void g_vfs_job_mount_mountable_set_target_uri (GVfsJobMountMountable *job,
- const char *uri,
- gboolean must_mount_location);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_MOUNT_MOUNTABLE_H__ */
diff --git a/daemon/gvfsjobmove.c b/daemon/gvfsjobmove.c
deleted file mode 100644
index e96a17aa..00000000
--- a/daemon/gvfsjobmove.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <strings.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobmove.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobMove, g_vfs_job_move, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_move_finalize (GObject *object)
-{
- GVfsJobMove *job;
-
- job = G_VFS_JOB_MOVE (object);
-
- g_free (job->source);
- g_free (job->destination);
- g_free (job->callback_obj_path);
-
- if (G_OBJECT_CLASS (g_vfs_job_move_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_move_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_move_class_init (GVfsJobMoveClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_move_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_move_init (GVfsJobMove *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_move_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobMove *job;
- DBusMessage *reply;
- DBusError derror;
- int path1_len, path2_len;
- const char *path1_data, *path2_data, *callback_obj_path;
- dbus_uint32_t flags;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path1_data, &path1_len,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path2_data, &path2_len,
- DBUS_TYPE_UINT32, &flags,
- DBUS_TYPE_OBJECT_PATH, &callback_obj_path,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_MOVE,
- "message", message,
- "connection", connection,
- NULL);
-
- job->source = g_strndup (path1_data, path1_len);
- job->destination = g_strndup (path2_data, path2_len);
- job->backend = backend;
- job->flags = flags;
- if (strcmp (callback_obj_path, "/org/gtk/vfs/void") != 0)
- job->callback_obj_path = g_strdup (callback_obj_path);
-
- return G_VFS_JOB (job);
-}
-
-void
-g_vfs_job_move_progress_callback (goffset current_num_bytes,
- goffset total_num_bytes,
- GVfsJob *job)
-{
- GVfsJobDBus *dbus_job = G_VFS_JOB_DBUS (job);
- GVfsJobMove *op_job = G_VFS_JOB_MOVE (job);
- dbus_uint64_t current_dbus, total_dbus;
- DBusMessage *message;
-
- g_print ("progress_callback %d/%d\n", (int)current_num_bytes, (int)total_num_bytes);
-
- if (op_job->callback_obj_path == NULL)
- return;
-
- message =
- dbus_message_new_method_call (dbus_message_get_sender (dbus_job->message),
- op_job->callback_obj_path,
- G_VFS_DBUS_PROGRESS_INTERFACE,
- G_VFS_DBUS_PROGRESS_OP_PROGRESS);
- dbus_message_set_no_reply (message, TRUE);
-
- current_dbus = current_num_bytes;
- total_dbus = total_num_bytes;
- dbus_message_append_args (message,
- DBUS_TYPE_UINT64, &current_dbus,
- DBUS_TYPE_UINT64, &total_dbus,
- 0);
-
- /* Queues reply (threadsafely), actually sends it in mainloop */
- dbus_connection_send (dbus_job->connection, message, NULL);
- dbus_message_unref (message);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobMove *op_job = G_VFS_JOB_MOVE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->move == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->move (op_job->backend,
- op_job,
- op_job->source,
- op_job->destination,
- op_job->flags,
- (GFileProgressCallback)g_vfs_job_move_progress_callback,
- job);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobMove *op_job = G_VFS_JOB_MOVE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_move == NULL)
- return FALSE;
-
- return class->try_move (op_job->backend,
- op_job,
- op_job->source,
- op_job->destination,
- op_job->flags,
- (GFileProgressCallback)g_vfs_job_move_progress_callback,
- job);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobmove.h b/daemon/gvfsjobmove.h
deleted file mode 100644
index d415371e..00000000
--- a/daemon/gvfsjobmove.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_MOVE_H__
-#define __G_VFS_JOB_MOVE_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_MOVE (g_vfs_job_move_get_type ())
-#define G_VFS_JOB_MOVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_MOVE, GVfsJobMove))
-#define G_VFS_JOB_MOVE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_MOVE, GVfsJobMoveClass))
-#define G_VFS_IS_JOB_MOVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_MOVE))
-#define G_VFS_IS_JOB_MOVE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_MOVE))
-#define G_VFS_JOB_MOVE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_MOVE, GVfsJobMoveClass))
-
-typedef struct _GVfsJobMoveClass GVfsJobMoveClass;
-
-struct _GVfsJobMove
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *source;
- char *destination;
- GFileCopyFlags flags;
- char *callback_obj_path;
-
-};
-
-struct _GVfsJobMoveClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_move_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_move_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-
-void g_vfs_job_move_progress_callback (goffset current_num_bytes,
- goffset total_num_bytes,
- GVfsJob *job);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_MOVE_H__ */
diff --git a/daemon/gvfsjobopenforread.c b/daemon/gvfsjobopenforread.c
deleted file mode 100644
index 0775db46..00000000
--- a/daemon/gvfsjobopenforread.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsreadchannel.h"
-#include "gvfsjobopenforread.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonutils.h"
-
-G_DEFINE_TYPE (GVfsJobOpenForRead, g_vfs_job_open_for_read, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static void finished (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_open_for_read_finalize (GObject *object)
-{
- GVfsJobOpenForRead *job;
-
- job = G_VFS_JOB_OPEN_FOR_READ (object);
-
- /* TODO: manage backend_handle if not put in read channel */
-
- if (job->read_channel)
- g_object_unref (job->read_channel);
-
- g_free (job->filename);
-
- if (G_OBJECT_CLASS (g_vfs_job_open_for_read_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_open_for_read_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_open_for_read_class_init (GVfsJobOpenForReadClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_open_for_read_finalize;
- job_class->run = run;
- job_class->try = try;
- job_class->finished = finished;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_open_for_read_init (GVfsJobOpenForRead *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_open_for_read_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobOpenForRead *job;
- DBusMessage *reply;
- DBusError derror;
- int path_len;
- const char *path_data;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path_data, &path_len,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_OPEN_FOR_READ,
- "message", message,
- "connection", connection,
- NULL);
-
- job->filename = g_strndup (path_data, path_len);
- job->backend = backend;
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobOpenForRead *op_job = G_VFS_JOB_OPEN_FOR_READ (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->open_for_read == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->open_for_read (op_job->backend,
- op_job,
- op_job->filename);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobOpenForRead *op_job = G_VFS_JOB_OPEN_FOR_READ (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_open_for_read == NULL)
- return FALSE;
-
- return class->try_open_for_read (op_job->backend,
- op_job,
- op_job->filename);
-}
-
-
-void
-g_vfs_job_open_for_read_set_handle (GVfsJobOpenForRead *job,
- GVfsBackendHandle handle)
-{
- job->backend_handle = handle;
-}
-
-void
-g_vfs_job_open_for_read_set_can_seek (GVfsJobOpenForRead *job,
- gboolean can_seek)
-{
- job->can_seek = can_seek;
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- GVfsJobOpenForRead *open_job = G_VFS_JOB_OPEN_FOR_READ (job);
- GVfsReadChannel *channel;
- DBusMessage *reply;
- GError *error;
- int remote_fd;
- int fd_id;
- dbus_bool_t can_seek;
-
- g_assert (open_job->backend_handle != NULL);
-
- error = NULL;
- channel = g_vfs_read_channel_new (open_job->backend);
-
- remote_fd = g_vfs_channel_steal_remote_fd (G_VFS_CHANNEL (channel));
- if (!dbus_connection_send_fd (connection,
- remote_fd,
- &fd_id, &error))
- {
- close (remote_fd);
- reply = _dbus_message_new_from_gerror (message, error);
- g_error_free (error);
- g_object_unref (channel);
- return reply;
- }
- close (remote_fd);
-
- reply = dbus_message_new_method_return (message);
- can_seek = open_job->can_seek;
- dbus_message_append_args (reply,
- DBUS_TYPE_UINT32, &fd_id,
- DBUS_TYPE_BOOLEAN, &can_seek,
- DBUS_TYPE_INVALID);
-
- g_vfs_channel_set_backend_handle (G_VFS_CHANNEL (channel), open_job->backend_handle);
- open_job->backend_handle = NULL;
- open_job->read_channel = channel;
-
- g_signal_emit_by_name (job, "new-source", open_job->read_channel);
-
- return reply;
-}
-
-static void
-finished (GVfsJob *job)
-{
-}
diff --git a/daemon/gvfsjobopenforread.h b/daemon/gvfsjobopenforread.h
deleted file mode 100644
index a15e2fe8..00000000
--- a/daemon/gvfsjobopenforread.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_OPEN_FOR_READ_H__
-#define __G_VFS_JOB_OPEN_FOR_READ_H__
-
-#include <dbus/dbus.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-#include <gvfsreadchannel.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_OPEN_FOR_READ (g_vfs_job_open_for_read_get_type ())
-#define G_VFS_JOB_OPEN_FOR_READ(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_OPEN_FOR_READ, GVfsJobOpenForRead))
-#define G_VFS_JOB_OPEN_FOR_READ_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_OPEN_FOR_READ, GVfsJobOpenForReadClass))
-#define G_VFS_IS_JOB_OPEN_FOR_READ(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_OPEN_FOR_READ))
-#define G_VFS_IS_JOB_OPEN_FOR_READ_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_OPEN_FOR_READ))
-#define G_VFS_JOB_OPEN_FOR_READ_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_OPEN_FOR_READ, GVfsJobOpenForReadClass))
-
-typedef struct _GVfsJobOpenForReadClass GVfsJobOpenForReadClass;
-
-struct _GVfsJobOpenForRead
-{
- GVfsJobDBus parent_instance;
-
- char *filename;
- GVfsBackend *backend;
- GVfsBackendHandle backend_handle;
- gboolean can_seek;
- GVfsReadChannel *read_channel;
-};
-
-struct _GVfsJobOpenForReadClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_open_for_read_get_type (void) G_GNUC_CONST;
-
-GVfsJob * g_vfs_job_open_for_read_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-void g_vfs_job_open_for_read_set_handle (GVfsJobOpenForRead *job,
- GVfsBackendHandle handle);
-void g_vfs_job_open_for_read_set_can_seek (GVfsJobOpenForRead *job,
- gboolean can_seek);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_OPEN_FOR_READ_H__ */
diff --git a/daemon/gvfsjobopenforwrite.c b/daemon/gvfsjobopenforwrite.c
deleted file mode 100644
index f456f839..00000000
--- a/daemon/gvfsjobopenforwrite.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfswritechannel.h"
-#include "gvfsjobopenforwrite.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonutils.h"
-
-G_DEFINE_TYPE (GVfsJobOpenForWrite, g_vfs_job_open_for_write, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static void finished (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_open_for_write_finalize (GObject *object)
-{
- GVfsJobOpenForWrite *job;
-
- job = G_VFS_JOB_OPEN_FOR_WRITE (object);
-
- /* TODO: manage backend_handle if not put in write channel */
-
- if (job->write_channel)
- g_object_unref (job->write_channel);
-
- g_free (job->filename);
- g_free (job->etag);
-
- if (G_OBJECT_CLASS (g_vfs_job_open_for_write_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_open_for_write_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_open_for_write_class_init (GVfsJobOpenForWriteClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_open_for_write_finalize;
- job_class->run = run;
- job_class->try = try;
- job_class->finished = finished;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_open_for_write_init (GVfsJobOpenForWrite *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_open_for_write_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobOpenForWrite *job;
- DBusMessageIter iter;
- DBusMessage *reply;
- DBusError derror;
- char *path;
- guint16 mode;
- dbus_bool_t make_backup;
- const char *etag;
- guint32 flags;
-
- path = NULL;
- dbus_error_init (&derror);
- dbus_message_iter_init (message, &iter);
- if (!_g_dbus_message_iter_get_args (&iter, &derror,
- G_DBUS_TYPE_CSTRING, &path,
- DBUS_TYPE_UINT16, &mode,
- DBUS_TYPE_STRING, &etag,
- DBUS_TYPE_BOOLEAN, &make_backup,
- DBUS_TYPE_UINT32, &flags,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- g_free (path);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_OPEN_FOR_WRITE,
- "message", message,
- "connection", connection,
- NULL);
-
- job->filename = path;
- job->mode = mode;
- if (*etag != 0)
- job->etag = g_strdup (etag);
- job->make_backup = make_backup;
- job->flags = flags;
- job->backend = backend;
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobOpenForWrite *op_job = G_VFS_JOB_OPEN_FOR_WRITE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (op_job->mode == OPEN_FOR_WRITE_CREATE)
- {
- if (class->create == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->create (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
- else if (op_job->mode == OPEN_FOR_WRITE_APPEND)
- {
- if (class->append_to == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->append_to (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
- else if (op_job->mode == OPEN_FOR_WRITE_REPLACE)
- {
- if (class->replace == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->replace (op_job->backend,
- op_job,
- op_job->filename,
- op_job->etag,
- op_job->make_backup,
- op_job->flags);
- }
- else
- g_assert_not_reached (); /* Handled in try */
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobOpenForWrite *op_job = G_VFS_JOB_OPEN_FOR_WRITE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (op_job->mode == OPEN_FOR_WRITE_CREATE)
- {
- if (class->try_create == NULL)
- return FALSE;
- return class->try_create (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
- else if (op_job->mode == OPEN_FOR_WRITE_APPEND)
- {
- if (class->try_append_to == NULL)
- return FALSE;
- return class->try_append_to (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
- else if (op_job->mode == OPEN_FOR_WRITE_REPLACE)
- {
- if (class->try_replace == NULL)
- return FALSE;
- return class->try_replace (op_job->backend,
- op_job,
- op_job->filename,
- op_job->etag,
- op_job->make_backup,
- op_job->flags);
- }
- else
- {
- GError *error = NULL;
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- "Wrong open for write type");
- g_vfs_job_failed_from_error (job, error);
- g_error_free (error);
- return TRUE;
- }
-}
-
-void
-g_vfs_job_open_for_write_set_handle (GVfsJobOpenForWrite *job,
- GVfsBackendHandle handle)
-{
- job->backend_handle = handle;
-}
-
-void
-g_vfs_job_open_for_write_set_can_seek (GVfsJobOpenForWrite *job,
- gboolean can_seek)
-{
- job->can_seek = can_seek;
-}
-
-void
-g_vfs_job_open_for_write_set_initial_offset (GVfsJobOpenForWrite *job,
- goffset initial_offset)
-{
- job->initial_offset = initial_offset;
-}
-
-/* Might be called on an i/o thwrite */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- GVfsJobOpenForWrite *open_job = G_VFS_JOB_OPEN_FOR_WRITE (job);
- GVfsWriteChannel *channel;
- DBusMessage *reply;
- GError *error;
- int remote_fd;
- int fd_id;
- dbus_bool_t can_seek;
- guint64 initial_offset;
-
- g_assert (open_job->backend_handle != NULL);
-
- error = NULL;
- channel = g_vfs_write_channel_new (open_job->backend);
-
- remote_fd = g_vfs_channel_steal_remote_fd (G_VFS_CHANNEL (channel));
- if (!dbus_connection_send_fd (connection,
- remote_fd,
- &fd_id, &error))
- {
- close (remote_fd);
- reply = _dbus_message_new_from_gerror (message, error);
- g_error_free (error);
- g_object_unref (channel);
- return reply;
- }
- close (remote_fd);
-
- reply = dbus_message_new_method_return (message);
- can_seek = open_job->can_seek;
- initial_offset = open_job->initial_offset;
- dbus_message_append_args (reply,
- DBUS_TYPE_UINT32, &fd_id,
- DBUS_TYPE_BOOLEAN, &can_seek,
- DBUS_TYPE_UINT64, &initial_offset,
- DBUS_TYPE_INVALID);
-
- g_vfs_channel_set_backend_handle (G_VFS_CHANNEL (channel), open_job->backend_handle);
- open_job->backend_handle = NULL;
- open_job->write_channel = channel;
-
- g_signal_emit_by_name (job, "new-source", open_job->write_channel);
-
- return reply;
-}
-
-static void
-finished (GVfsJob *job)
-{
-}
diff --git a/daemon/gvfsjobopenforwrite.h b/daemon/gvfsjobopenforwrite.h
deleted file mode 100644
index 4f6469d1..00000000
--- a/daemon/gvfsjobopenforwrite.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_OPEN_FOR_WRITE_H__
-#define __G_VFS_JOB_OPEN_FOR_WRITE_H__
-
-#include <dbus/dbus.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-#include <gvfswritechannel.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_OPEN_FOR_WRITE (g_vfs_job_open_for_write_get_type ())
-#define G_VFS_JOB_OPEN_FOR_WRITE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_OPEN_FOR_WRITE, GVfsJobOpenForWrite))
-#define G_VFS_JOB_OPEN_FOR_WRITE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_OPEN_FOR_WRITE, GVfsJobOpenForWriteClass))
-#define G_VFS_IS_JOB_OPEN_FOR_WRITE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_OPEN_FOR_WRITE))
-#define G_VFS_IS_JOB_OPEN_FOR_WRITE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_OPEN_FOR_WRITE))
-#define G_VFS_JOB_OPEN_FOR_WRITE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_OPEN_FOR_WRITE, GVfsJobOpenForWriteClass))
-
-typedef struct _GVfsJobOpenForWriteClass GVfsJobOpenForWriteClass;
-
-typedef enum {
- OPEN_FOR_WRITE_CREATE = 0,
- OPEN_FOR_WRITE_APPEND = 1,
- OPEN_FOR_WRITE_REPLACE = 2
-} GVfsJobOpenForWriteMode;
-
-struct _GVfsJobOpenForWrite
-{
- GVfsJobDBus parent_instance;
-
- GVfsJobOpenForWriteMode mode;
- char *filename;
- char *etag;
- gboolean make_backup;
- GFileCreateFlags flags;
-
- GVfsBackend *backend;
- GVfsBackendHandle backend_handle;
-
- gboolean can_seek;
- goffset initial_offset;
- GVfsWriteChannel *write_channel;
-};
-
-struct _GVfsJobOpenForWriteClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_open_for_write_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_open_for_write_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-void g_vfs_job_open_for_write_set_handle (GVfsJobOpenForWrite *job,
- GVfsBackendHandle handle);
-void g_vfs_job_open_for_write_set_can_seek (GVfsJobOpenForWrite *job,
- gboolean can_seek);
-void g_vfs_job_open_for_write_set_initial_offset (GVfsJobOpenForWrite *job,
- goffset initial_offset);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_OPEN_FOR_WRITE_H__ */
diff --git a/daemon/gvfsjobpull.c b/daemon/gvfsjobpull.c
deleted file mode 100644
index 2eb12e4d..00000000
--- a/daemon/gvfsjobpull.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <strings.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobpull.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobPull, g_vfs_job_pull, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_pull_finalize (GObject *object)
-{
- GVfsJobPull *job;
-
- job = G_VFS_JOB_PULL (object);
-
- g_free (job->local_path);
- g_free (job->source);
- g_free (job->callback_obj_path);
-
- if (G_OBJECT_CLASS (g_vfs_job_pull_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_pull_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_pull_class_init (GVfsJobPullClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_pull_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_pull_init (GVfsJobPull *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_pull_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobPull *job;
- DBusMessage *reply;
- DBusError derror;
- int path1_len, path2_len;
- const char *path1_data, *path2_data, *callback_obj_path;
- dbus_uint32_t flags;
- dbus_bool_t remove_source;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path1_data, &path1_len,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path2_data, &path2_len,
- DBUS_TYPE_UINT32, &flags,
- DBUS_TYPE_OBJECT_PATH, &callback_obj_path,
- DBUS_TYPE_BOOLEAN, &remove_source,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_PULL,
- "message", message,
- "connection", connection,
- NULL);
-
- job->source = g_strndup (path1_data, path1_len);
- job->local_path = g_strndup (path2_data, path2_len);
- job->backend = backend;
- job->flags = flags;
- job->remove_source = remove_source;
- g_print ("Remove Source: %s\n", remove_source ? "true" : "false");
- if (strcmp (callback_obj_path, "/org/gtk/vfs/void") != 0)
- job->callback_obj_path = g_strdup (callback_obj_path);
-
- return G_VFS_JOB (job);
-}
-
-static void
-progress_callback (goffset current_num_bytes,
- goffset total_num_bytes,
- gpointer user_data)
-{
- GVfsJob *job = G_VFS_JOB (user_data);
- GVfsJobDBus *dbus_job = G_VFS_JOB_DBUS (job);
- GVfsJobPull *op_job = G_VFS_JOB_PULL (job);
- dbus_uint64_t current_dbus, total_dbus;
- DBusMessage *message;
-
- g_print ("progress_callback %d/%d\n", (int)current_num_bytes, (int)total_num_bytes);
-
- if (op_job->callback_obj_path == NULL)
- return;
-
- message =
- dbus_message_new_method_call (dbus_message_get_sender (dbus_job->message),
- op_job->callback_obj_path,
- G_VFS_DBUS_PROGRESS_INTERFACE,
- G_VFS_DBUS_PROGRESS_OP_PROGRESS);
- dbus_message_set_no_reply (message, TRUE);
-
- current_dbus = current_num_bytes;
- total_dbus = total_num_bytes;
- dbus_message_append_args (message,
- DBUS_TYPE_UINT64, &current_dbus,
- DBUS_TYPE_UINT64, &total_dbus,
- 0);
-
- /* Queues reply (threadsafely), actually sends it in mainloop */
- dbus_connection_send (dbus_job->connection, message, NULL);
- dbus_message_unref (message);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobPull *op_job = G_VFS_JOB_PULL (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->pull == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->pull (op_job->backend,
- op_job,
- op_job->source,
- op_job->local_path,
- op_job->flags,
- op_job->remove_source,
- progress_callback,
- job);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobPull *op_job = G_VFS_JOB_PULL (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_pull == NULL)
- return FALSE;
-
- return class->try_pull (op_job->backend,
- op_job,
- op_job->source,
- op_job->local_path,
- op_job->flags,
- op_job->remove_source,
- progress_callback,
- job);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobpull.h b/daemon/gvfsjobpull.h
deleted file mode 100644
index bb080878..00000000
--- a/daemon/gvfsjobpull.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_PULL_H__
-#define __G_VFS_JOB_PULL_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_PULL (g_vfs_job_pull_get_type ())
-#define G_VFS_JOB_PULL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_PULL, GVfsJobPull))
-#define G_VFS_JOB_PULL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_PULL, GVfsJobPullClass))
-#define G_VFS_IS_JOB_PULL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_PULL))
-#define G_VFS_IS_JOB_PULL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_PULL))
-#define G_VFS_JOB_PULL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_PULL, GVfsJobPullClass))
-
-typedef struct _GVfsJobPullClass GVfsJobPullClass;
-
-struct _GVfsJobPull
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *source;
- char *local_path;
- GFileCopyFlags flags;
- char *callback_obj_path;
- gboolean remove_source;
-};
-
-struct _GVfsJobPullClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_pull_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_pull_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_PULL_H__ */
diff --git a/daemon/gvfsjobpush.c b/daemon/gvfsjobpush.c
deleted file mode 100644
index c24b9d80..00000000
--- a/daemon/gvfsjobpush.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <strings.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobpush.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobPush, g_vfs_job_push, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_push_finalize (GObject *object)
-{
- GVfsJobPush *job;
-
- job = G_VFS_JOB_PUSH (object);
-
- g_free (job->local_path);
- g_free (job->destination);
- g_free (job->callback_obj_path);
-
- if (G_OBJECT_CLASS (g_vfs_job_push_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_push_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_push_class_init (GVfsJobPushClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_push_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_push_init (GVfsJobPush *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_push_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobPush *job;
- DBusMessage *reply;
- DBusError derror;
- int path1_len, path2_len;
- const char *path1_data, *path2_data, *callback_obj_path;
- dbus_uint32_t flags;
- dbus_bool_t remove_source;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path1_data, &path1_len,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path2_data, &path2_len,
- DBUS_TYPE_UINT32, &flags,
- DBUS_TYPE_OBJECT_PATH, &callback_obj_path,
- DBUS_TYPE_BOOLEAN, &remove_source,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_PUSH,
- "message", message,
- "connection", connection,
- NULL);
-
- job->destination = g_strndup (path1_data, path1_len);
- job->local_path = g_strndup (path2_data, path2_len);
- job->backend = backend;
- job->flags = flags;
- job->remove_source = remove_source;
- g_print ("Remove Source: %s\n", remove_source ? "true" : "false");
- if (strcmp (callback_obj_path, "/org/gtk/vfs/void") != 0)
- job->callback_obj_path = g_strdup (callback_obj_path);
-
- return G_VFS_JOB (job);
-}
-
-static void
-progress_callback (goffset current_num_bytes,
- goffset total_num_bytes,
- gpointer user_data)
-{
- GVfsJob *job = G_VFS_JOB (user_data);
- GVfsJobDBus *dbus_job = G_VFS_JOB_DBUS (job);
- GVfsJobPush *op_job = G_VFS_JOB_PUSH (job);
- dbus_uint64_t current_dbus, total_dbus;
- DBusMessage *message;
-
- g_print ("progress_callback %d/%d\n", (int)current_num_bytes, (int)total_num_bytes);
-
- if (op_job->callback_obj_path == NULL)
- return;
-
- message =
- dbus_message_new_method_call (dbus_message_get_sender (dbus_job->message),
- op_job->callback_obj_path,
- G_VFS_DBUS_PROGRESS_INTERFACE,
- G_VFS_DBUS_PROGRESS_OP_PROGRESS);
- dbus_message_set_no_reply (message, TRUE);
-
- current_dbus = current_num_bytes;
- total_dbus = total_num_bytes;
- dbus_message_append_args (message,
- DBUS_TYPE_UINT64, &current_dbus,
- DBUS_TYPE_UINT64, &total_dbus,
- 0);
-
- /* Queues reply (threadsafely), actually sends it in mainloop */
- dbus_connection_send (dbus_job->connection, message, NULL);
- dbus_message_unref (message);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobPush *op_job = G_VFS_JOB_PUSH (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->push == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->push (op_job->backend,
- op_job,
- op_job->destination,
- op_job->local_path,
- op_job->flags,
- op_job->remove_source,
- progress_callback,
- job);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobPush *op_job = G_VFS_JOB_PUSH (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_push == NULL)
- return FALSE;
-
- return class->try_push (op_job->backend,
- op_job,
- op_job->destination,
- op_job->local_path,
- op_job->flags,
- op_job->remove_source,
- progress_callback,
- job);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobpush.h b/daemon/gvfsjobpush.h
deleted file mode 100644
index c7aabcba..00000000
--- a/daemon/gvfsjobpush.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_PUSH_H__
-#define __G_VFS_JOB_PUSH_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_PUSH (g_vfs_job_push_get_type ())
-#define G_VFS_JOB_PUSH(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_PUSH, GVfsJobPush))
-#define G_VFS_JOB_PUSH_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_PUSH, GVfsJobPushClass))
-#define G_VFS_IS_JOB_PUSH(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_PUSH))
-#define G_VFS_IS_JOB_PUSH_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_PUSH))
-#define G_VFS_JOB_PUSH_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_PUSH, GVfsJobPushClass))
-
-typedef struct _GVfsJobPushClass GVfsJobPushClass;
-
-struct _GVfsJobPush
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *destination;
- char *local_path;
- GFileCopyFlags flags;
- char *callback_obj_path;
- gboolean remove_source;
-};
-
-struct _GVfsJobPushClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_push_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_push_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_PUSH_H__ */
diff --git a/daemon/gvfsjobqueryattributes.c b/daemon/gvfsjobqueryattributes.c
deleted file mode 100644
index aeeeafe9..00000000
--- a/daemon/gvfsjobqueryattributes.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobmove.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-#include "gvfsjobqueryattributes.h"
-
-G_DEFINE_TYPE (GVfsJobQueryAttributes, g_vfs_job_query_attributes, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_query_attributes_finalize (GObject *object)
-{
- GVfsJobQueryAttributes *job;
-
- job = G_VFS_JOB_QUERY_ATTRIBUTES (object);
-
- g_free (job->filename);
- if (job->list)
- g_file_attribute_info_list_unref (job->list);
-
- if (G_OBJECT_CLASS (g_vfs_job_query_attributes_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_query_attributes_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_query_attributes_class_init (GVfsJobQueryAttributesClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_query_attributes_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_query_attributes_init (GVfsJobQueryAttributes *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_query_attributes_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend,
- gboolean namespaces)
-{
- GVfsJobQueryAttributes *job;
- DBusMessage *reply;
- DBusError derror;
- const gchar *path = NULL;
- gint path_len;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path, &path_len,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_QUERY_ATTRIBUTES,
- "message", message,
- "connection", connection,
- NULL);
-
- job->backend = backend;
- job->filename = g_strndup (path, path_len);
- job->namespaces = namespaces;
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobQueryAttributes *op_job = G_VFS_JOB_QUERY_ATTRIBUTES (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
- void (*cb) (GVfsBackend *backend,
- GVfsJobQueryAttributes *job,
- const char *filename);
-
- if (op_job->namespaces)
- cb = class->query_writable_namespaces;
- else
- cb = class->query_settable_attributes;
-
- if (cb == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- cb (op_job->backend,
- op_job,
- op_job->filename);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobQueryAttributes *op_job = G_VFS_JOB_QUERY_ATTRIBUTES (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
- gboolean (*cb) (GVfsBackend *backend,
- GVfsJobQueryAttributes *job,
- const char *filename);
-
- if (op_job->namespaces)
- cb = class->try_query_writable_namespaces;
- else
- cb = class->try_query_settable_attributes;
-
- if (cb == NULL)
- return FALSE;
-
- return cb (op_job->backend,
- op_job,
- op_job->filename);
-}
-
-void
-g_vfs_job_query_attributes_set_list (GVfsJobQueryAttributes *job,
- GFileAttributeInfoList *list)
-{
- job->list = g_file_attribute_info_list_ref (list);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- GVfsJobQueryAttributes *op_job = G_VFS_JOB_QUERY_ATTRIBUTES (job);
- DBusMessage *reply;
- DBusMessageIter iter;
-
- reply = dbus_message_new_method_return (message);
-
- dbus_message_iter_init_append (reply, &iter);
- _g_dbus_append_attribute_info_list (&iter,
- op_job->list);
-
- return reply;
-}
diff --git a/daemon/gvfsjobqueryattributes.h b/daemon/gvfsjobqueryattributes.h
deleted file mode 100644
index 33b923a7..00000000
--- a/daemon/gvfsjobqueryattributes.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_QUERY_ATTRIBUTES_H__
-#define __G_VFS_JOB_QUERY_ATTRIBUTES_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_QUERY_ATTRIBUTES (g_vfs_job_query_attributes_get_type ())
-#define G_VFS_JOB_QUERY_ATTRIBUTES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_QUERY_ATTRIBUTES, GVfsJobQueryAttributes))
-#define G_VFS_JOB_QUERY_ATTRIBUTES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_QUERY_ATTRIBUTES, GVfsJobQueryAttributesClass))
-#define G_VFS_IS_JOB_QUERY_ATTRIBUTES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_QUERY_ATTRIBUTES))
-#define G_VFS_IS_JOB_QUERY_ATTRIBUTES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_QUERY_ATTRIBUTES))
-#define G_VFS_JOB_QUERY_ATTRIBUTES_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_QUERY_ATTRIBUTES, GVfsJobQueryAttributesClass))
-
-typedef struct _GVfsJobQueryAttributesClass GVfsJobQueryAttributesClass;
-
-struct _GVfsJobQueryAttributes
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
-
- char *filename;
- gboolean namespaces;
-
- GFileAttributeInfoList *list;
-};
-
-struct _GVfsJobQueryAttributesClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_query_attributes_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_query_attributes_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend,
- gboolean namespaces);
-void g_vfs_job_query_attributes_set_list (GVfsJobQueryAttributes *job,
- GFileAttributeInfoList *list);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_QUERY_ATTRIBUTES_H__ */
diff --git a/daemon/gvfsjobqueryfsinfo.c b/daemon/gvfsjobqueryfsinfo.c
deleted file mode 100644
index a5d369c4..00000000
--- a/daemon/gvfsjobqueryfsinfo.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobqueryfsinfo.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobQueryFsInfo, g_vfs_job_query_fs_info, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_query_fs_info_finalize (GObject *object)
-{
- GVfsJobQueryFsInfo *job;
-
- job = G_VFS_JOB_QUERY_FS_INFO (object);
-
- g_object_unref (job->file_info);
-
- g_free (job->filename);
- g_file_attribute_matcher_unref (job->attribute_matcher);
-
- if (G_OBJECT_CLASS (g_vfs_job_query_fs_info_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_query_fs_info_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_query_fs_info_class_init (GVfsJobQueryFsInfoClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_query_fs_info_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_query_fs_info_init (GVfsJobQueryFsInfo *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_query_fs_info_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobQueryFsInfo *job;
- DBusMessage *reply;
- DBusError derror;
- int path_len;
- const char *path_data;
- char *attributes;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path_data, &path_len,
- DBUS_TYPE_STRING, &attributes,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_QUERY_FS_INFO,
- "message", message,
- "connection", connection,
- NULL);
-
- job->filename = g_strndup (path_data, path_len);
- job->backend = backend;
- job->attribute_matcher = g_file_attribute_matcher_new (attributes);
-
- job->file_info = g_file_info_new ();
- g_file_info_set_attribute_mask (job->file_info, job->attribute_matcher);
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobQueryFsInfo *op_job = G_VFS_JOB_QUERY_FS_INFO (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->query_fs_info == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->query_fs_info (op_job->backend,
- op_job,
- op_job->filename,
- op_job->file_info,
- op_job->attribute_matcher);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobQueryFsInfo *op_job = G_VFS_JOB_QUERY_FS_INFO (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_query_fs_info == NULL)
- return FALSE;
-
- return class->try_query_fs_info (op_job->backend,
- op_job,
- op_job->filename,
- op_job->file_info,
- op_job->attribute_matcher);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- GVfsJobQueryFsInfo *op_job = G_VFS_JOB_QUERY_FS_INFO (job);
- DBusMessage *reply;
- DBusMessageIter iter;
- const char *type;
-
- reply = dbus_message_new_method_return (message);
-
- dbus_message_iter_init_append (reply, &iter);
-
- type = g_vfs_backend_get_backend_type (op_job->backend);
-
- if (type)
- g_file_info_set_attribute_string (op_job->file_info,
- G_FILE_ATTRIBUTE_GVFS_BACKEND,
- type);
-
- _g_dbus_append_file_info (&iter,
- op_job->file_info);
-
- return reply;
-}
diff --git a/daemon/gvfsjobqueryfsinfo.h b/daemon/gvfsjobqueryfsinfo.h
deleted file mode 100644
index c273fee5..00000000
--- a/daemon/gvfsjobqueryfsinfo.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_QUERY_FS_INFO_H__
-#define __G_VFS_JOB_QUERY_FS_INFO_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_QUERY_FS_INFO (g_vfs_job_query_fs_info_get_type ())
-#define G_VFS_JOB_QUERY_FS_INFO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_QUERY_FS_INFO, GVfsJobQueryFsInfo))
-#define G_VFS_JOB_QUERY_FS_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_QUERY_FS_INFO, GVfsJobQueryFsInfoClass))
-#define G_VFS_IS_JOB_QUERY_FS_INFO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_QUERY_FS_INFO))
-#define G_VFS_IS_JOB_QUERY_FS_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_QUERY_FS_INFO))
-#define G_VFS_JOB_QUERY_FS_INFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_QUERY_FS_INFO, GVfsJobQueryFsInfoClass))
-
-typedef struct _GVfsJobQueryFsInfoClass GVfsJobQueryFsInfoClass;
-
-struct _GVfsJobQueryFsInfo
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *filename;
- GFileAttributeMatcher *attribute_matcher;
-
- GFileInfo *file_info;
-};
-
-struct _GVfsJobQueryFsInfoClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_query_fs_info_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_query_fs_info_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_QUERY_FS_INFO_H__ */
diff --git a/daemon/gvfsjobqueryinfo.c b/daemon/gvfsjobqueryinfo.c
deleted file mode 100644
index 78bf1607..00000000
--- a/daemon/gvfsjobqueryinfo.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobqueryinfo.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobQueryInfo, g_vfs_job_query_info, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_query_info_finalize (GObject *object)
-{
- GVfsJobQueryInfo *job;
-
- job = G_VFS_JOB_QUERY_INFO (object);
-
- g_object_unref (job->file_info);
-
- g_free (job->filename);
- g_free (job->attributes);
- g_file_attribute_matcher_unref (job->attribute_matcher);
- g_free (job->uri);
-
- if (G_OBJECT_CLASS (g_vfs_job_query_info_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_query_info_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_query_info_class_init (GVfsJobQueryInfoClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_query_info_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_query_info_init (GVfsJobQueryInfo *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_query_info_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobQueryInfo *job;
- DBusMessage *reply;
- DBusError derror;
- int path_len;
- const char *path_data;
- char *attributes;
- char *uri;
- dbus_uint32_t flags;
- DBusMessageIter iter;
-
- dbus_message_iter_init (message, &iter);
-
- dbus_error_init (&derror);
- if (!_g_dbus_message_iter_get_args (&iter, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path_data, &path_len,
- DBUS_TYPE_STRING, &attributes,
- DBUS_TYPE_UINT32, &flags,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- /* Optional uri arg for thumbnail info */
- if (!_g_dbus_message_iter_get_args (&iter, NULL,
- DBUS_TYPE_STRING, &uri,
- 0))
- uri = NULL;
-
- job = g_object_new (G_VFS_TYPE_JOB_QUERY_INFO,
- "message", message,
- "connection", connection,
- NULL);
-
- job->filename = g_strndup (path_data, path_len);
- job->backend = backend;
- job->attributes = g_strdup (attributes);
- job->attribute_matcher = g_file_attribute_matcher_new (attributes);
- job->flags = flags;
- job->uri = g_strdup (uri);
-
- job->file_info = g_file_info_new ();
- g_file_info_set_attribute_mask (job->file_info, job->attribute_matcher);
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobQueryInfo *op_job = G_VFS_JOB_QUERY_INFO (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->query_info == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->query_info (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags,
- op_job->file_info,
- op_job->attribute_matcher);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobQueryInfo *op_job = G_VFS_JOB_QUERY_INFO (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_query_info == NULL)
- return FALSE;
-
- return class->try_query_info (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags,
- op_job->file_info,
- op_job->attribute_matcher);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- GVfsJobQueryInfo *op_job = G_VFS_JOB_QUERY_INFO (job);
- DBusMessage *reply;
- DBusMessageIter iter;
-
- reply = dbus_message_new_method_return (message);
-
- dbus_message_iter_init_append (reply, &iter);
-
- g_vfs_backend_add_auto_info (op_job->backend,
- op_job->attribute_matcher,
- op_job->file_info,
- op_job->uri);
-
- _g_dbus_append_file_info (&iter,
- op_job->file_info);
-
- return reply;
-}
diff --git a/daemon/gvfsjobqueryinfo.h b/daemon/gvfsjobqueryinfo.h
deleted file mode 100644
index 4a6b5d88..00000000
--- a/daemon/gvfsjobqueryinfo.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_QUERY_INFO_H__
-#define __G_VFS_JOB_QUERY_INFO_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_QUERY_INFO (g_vfs_job_query_info_get_type ())
-#define G_VFS_JOB_QUERY_INFO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_QUERY_INFO, GVfsJobQueryInfo))
-#define G_VFS_JOB_QUERY_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_QUERY_INFO, GVfsJobQueryInfoClass))
-#define G_VFS_IS_JOB_QUERY_INFO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_QUERY_INFO))
-#define G_VFS_IS_JOB_QUERY_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_QUERY_INFO))
-#define G_VFS_JOB_QUERY_INFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_QUERY_INFO, GVfsJobQueryInfoClass))
-
-typedef struct _GVfsJobQueryInfoClass GVfsJobQueryInfoClass;
-
-struct _GVfsJobQueryInfo
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *filename;
- char *attributes;
- GFileAttributeMatcher *attribute_matcher;
- GFileQueryInfoFlags flags;
- char *uri;
-
- GFileInfo *file_info;
-};
-
-struct _GVfsJobQueryInfoClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_query_info_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_query_info_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_QUERY_INFO_H__ */
diff --git a/daemon/gvfsjobread.c b/daemon/gvfsjobread.c
deleted file mode 100644
index 1d542bd6..00000000
--- a/daemon/gvfsjobread.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include "gvfsreadchannel.h"
-#include "gvfsjobread.h"
-#include "gvfsdaemonutils.h"
-
-G_DEFINE_TYPE (GVfsJobRead, g_vfs_job_read, G_VFS_TYPE_JOB)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static void send_reply (GVfsJob *job);
-
-static void
-g_vfs_job_read_finalize (GObject *object)
-{
- GVfsJobRead *job;
-
- job = G_VFS_JOB_READ (object);
-
- g_object_unref (job->channel);
- g_free (job->buffer);
-
- if (G_OBJECT_CLASS (g_vfs_job_read_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_read_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_read_class_init (GVfsJobReadClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_read_finalize;
-
- job_class->run = run;
- job_class->try = try;
- job_class->send_reply = send_reply;
-}
-
-static void
-g_vfs_job_read_init (GVfsJobRead *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_read_new (GVfsReadChannel *channel,
- GVfsBackendHandle handle,
- gsize bytes_requested,
- GVfsBackend *backend)
-{
- GVfsJobRead *job;
-
- job = g_object_new (G_VFS_TYPE_JOB_READ,
- NULL);
-
- job->backend = backend;
- job->channel = g_object_ref (channel);
- job->handle = handle;
- job->buffer = g_malloc (bytes_requested);
- job->bytes_requested = bytes_requested;
-
- return G_VFS_JOB (job);
-}
-
-/* Might be called on an i/o thread */
-static void
-send_reply (GVfsJob *job)
-{
- GVfsJobRead *op_job = G_VFS_JOB_READ (job);
- g_print ("job_read send reply, %"G_GSIZE_FORMAT" bytes\n", op_job->data_count);
-
- if (job->failed)
- g_vfs_channel_send_error (G_VFS_CHANNEL (op_job->channel), job->error);
- else
- {
- g_vfs_read_channel_send_data (op_job->channel,
- op_job->buffer,
- op_job->data_count);
- }
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobRead *op_job = G_VFS_JOB_READ (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->read == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->read (op_job->backend,
- op_job,
- op_job->handle,
- op_job->buffer,
- op_job->bytes_requested);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobRead *op_job = G_VFS_JOB_READ (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_read == NULL)
- return FALSE;
-
- return class->try_read (op_job->backend,
- op_job,
- op_job->handle,
- op_job->buffer,
- op_job->bytes_requested);
-}
-
-
-/* Takes ownership */
-void
-g_vfs_job_read_set_size (GVfsJobRead *job,
- gsize data_size)
-{
- job->data_count = data_size;
-}
diff --git a/daemon/gvfsjobread.h b/daemon/gvfsjobread.h
deleted file mode 100644
index 212cf737..00000000
--- a/daemon/gvfsjobread.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_READ_H__
-#define __G_VFS_JOB_READ_H__
-
-#include <gvfsjob.h>
-#include <gvfsbackend.h>
-#include <gvfsreadchannel.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_READ (g_vfs_job_read_get_type ())
-#define G_VFS_JOB_READ(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_READ, GVfsJobRead))
-#define G_VFS_JOB_READ_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_READ, GVfsJobReadClass))
-#define G_VFS_IS_JOB_READ(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_READ))
-#define G_VFS_IS_JOB_READ_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_READ))
-#define G_VFS_JOB_READ_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_READ, GVfsJobReadClass))
-
-typedef struct _GVfsJobReadClass GVfsJobReadClass;
-
-struct _GVfsJobRead
-{
- GVfsJob parent_instance;
-
- GVfsReadChannel *channel;
- GVfsBackend *backend;
- GVfsBackendHandle handle;
- gsize bytes_requested;
- char *buffer;
- gsize data_count;
-};
-
-struct _GVfsJobReadClass
-{
- GVfsJobClass parent_class;
-};
-
-GType g_vfs_job_read_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_read_new (GVfsReadChannel *channel,
- GVfsBackendHandle handle,
- gsize bytes_requested,
- GVfsBackend *backend);
-void g_vfs_job_read_set_size (GVfsJobRead *job,
- gsize data_size);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_READ_H__ */
diff --git a/daemon/gvfsjobseekread.c b/daemon/gvfsjobseekread.c
deleted file mode 100644
index 4813752b..00000000
--- a/daemon/gvfsjobseekread.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include "gvfsreadchannel.h"
-#include "gvfsjobseekread.h"
-#include "gvfsdaemonutils.h"
-
-G_DEFINE_TYPE (GVfsJobSeekRead, g_vfs_job_seek_read, G_VFS_TYPE_JOB)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static void send_reply (GVfsJob *job);
-
-static void
-g_vfs_job_seek_read_finalize (GObject *object)
-{
- GVfsJobSeekRead *job;
-
- job = G_VFS_JOB_SEEK_READ (object);
- g_object_unref (job->channel);
-
- if (G_OBJECT_CLASS (g_vfs_job_seek_read_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_seek_read_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_seek_read_class_init (GVfsJobSeekReadClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_seek_read_finalize;
-
- job_class->run = run;
- job_class->try = try;
- job_class->send_reply = send_reply;
-}
-
-static void
-g_vfs_job_seek_read_init (GVfsJobSeekRead *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_seek_read_new (GVfsReadChannel *channel,
- GVfsBackendHandle handle,
- GSeekType seek_type,
- goffset offset,
- GVfsBackend *backend)
-{
- GVfsJobSeekRead *job;
-
- job = g_object_new (G_VFS_TYPE_JOB_SEEK_READ,
- NULL);
-
- job->backend = backend;
- job->channel = g_object_ref (channel);
- job->handle = handle;
- job->requested_offset = offset;
- job->seek_type = seek_type;
-
- return G_VFS_JOB (job);
-}
-
-/* Might be called on an i/o thread */
-static void
-send_reply (GVfsJob *job)
-{
- GVfsJobSeekRead *op_job = G_VFS_JOB_SEEK_READ (job);
-
- g_print ("job_seek_read send reply, pos %d\n", (int)op_job->final_offset);
-
- if (job->failed)
- g_vfs_channel_send_error (G_VFS_CHANNEL (op_job->channel), job->error);
- else
- {
- g_vfs_read_channel_send_seek_offset (op_job->channel,
- op_job->final_offset);
- }
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobSeekRead *op_job = G_VFS_JOB_SEEK_READ (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->seek_on_read == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->seek_on_read (op_job->backend,
- op_job,
- op_job->handle,
- op_job->requested_offset,
- op_job->seek_type);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobSeekRead *op_job = G_VFS_JOB_SEEK_READ (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_seek_on_read == NULL)
- return FALSE;
-
- return class->try_seek_on_read (op_job->backend,
- op_job,
- op_job->handle,
- op_job->requested_offset,
- op_job->seek_type);
-}
-
-void
-g_vfs_job_seek_read_set_offset (GVfsJobSeekRead *job,
- goffset offset)
-{
- job->final_offset = offset;
-}
diff --git a/daemon/gvfsjobseekread.h b/daemon/gvfsjobseekread.h
deleted file mode 100644
index 7b23d29f..00000000
--- a/daemon/gvfsjobseekread.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_SEEK_READ_H__
-#define __G_VFS_JOB_SEEK_READ_H__
-
-#include <gvfsjob.h>
-#include <gvfsbackend.h>
-#include <gvfsreadchannel.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_SEEK_READ (g_vfs_job_seek_read_get_type ())
-#define G_VFS_JOB_SEEK_READ(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_SEEK_READ, GVfsJobSeekRead))
-#define G_VFS_JOB_SEEK_READ_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_SEEK_READ, GVfsJobSeekReadClass))
-#define G_VFS_IS_JOB_SEEK_READ(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_SEEK_READ))
-#define G_VFS_IS_JOB_SEEK_READ_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_SEEK_READ))
-#define G_VFS_JOB_SEEK_READ_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_SEEK_READ, GVfsJobSeekReadClass))
-
-typedef struct _GVfsJobSeekReadClass GVfsJobSeekReadClass;
-
-struct _GVfsJobSeekRead
-{
- GVfsJob parent_instance;
-
- GVfsReadChannel *channel;
- GVfsBackend *backend;
- GVfsBackendHandle handle;
- GSeekType seek_type;
- goffset requested_offset;
- goffset final_offset;
-};
-
-struct _GVfsJobSeekReadClass
-{
- GVfsJobClass parent_class;
-};
-
-GType g_vfs_job_seek_read_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_seek_read_new (GVfsReadChannel *channel,
- GVfsBackendHandle handle,
- GSeekType seek_type,
- goffset offset,
- GVfsBackend *backend);
-
-void g_vfs_job_seek_read_set_offset (GVfsJobSeekRead *job,
- goffset offset);
-
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_SEEK_READ_H__ */
diff --git a/daemon/gvfsjobseekwrite.c b/daemon/gvfsjobseekwrite.c
deleted file mode 100644
index 0ceda867..00000000
--- a/daemon/gvfsjobseekwrite.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include "gvfswritechannel.h"
-#include "gvfsjobseekwrite.h"
-#include "gvfsdaemonutils.h"
-
-G_DEFINE_TYPE (GVfsJobSeekWrite, g_vfs_job_seek_write, G_VFS_TYPE_JOB)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static void send_reply (GVfsJob *job);
-
-static void
-g_vfs_job_seek_write_finalize (GObject *object)
-{
- GVfsJobSeekWrite *job;
-
- job = G_VFS_JOB_SEEK_WRITE (object);
- g_object_unref (job->channel);
-
- if (G_OBJECT_CLASS (g_vfs_job_seek_write_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_seek_write_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_seek_write_class_init (GVfsJobSeekWriteClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_seek_write_finalize;
-
- job_class->run = run;
- job_class->try = try;
- job_class->send_reply = send_reply;
-}
-
-static void
-g_vfs_job_seek_write_init (GVfsJobSeekWrite *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_seek_write_new (GVfsWriteChannel *channel,
- GVfsBackendHandle handle,
- GSeekType seek_type,
- goffset offset,
- GVfsBackend *backend)
-{
- GVfsJobSeekWrite *job;
-
- job = g_object_new (G_VFS_TYPE_JOB_SEEK_WRITE,
- NULL);
-
- job->backend = backend;
- job->channel = g_object_ref (channel);
- job->handle = handle;
- job->requested_offset = offset;
- job->seek_type = seek_type;
-
- return G_VFS_JOB (job);
-}
-
-/* Might be called on an i/o thwrite */
-static void
-send_reply (GVfsJob *job)
-{
- GVfsJobSeekWrite *op_job = G_VFS_JOB_SEEK_WRITE (job);
-
- g_print ("job_seek_write send reply, pos %d\n", (int)op_job->final_offset);
-
- if (job->failed)
- g_vfs_channel_send_error (G_VFS_CHANNEL (op_job->channel), job->error);
- else
- {
- g_vfs_write_channel_send_seek_offset (op_job->channel,
- op_job->final_offset);
- }
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobSeekWrite *op_job = G_VFS_JOB_SEEK_WRITE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->seek_on_write == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->seek_on_write (op_job->backend,
- op_job,
- op_job->handle,
- op_job->requested_offset,
- op_job->seek_type);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobSeekWrite *op_job = G_VFS_JOB_SEEK_WRITE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_seek_on_write == NULL)
- return FALSE;
-
- return class->try_seek_on_write (op_job->backend,
- op_job,
- op_job->handle,
- op_job->requested_offset,
- op_job->seek_type);
-}
-
-void
-g_vfs_job_seek_write_set_offset (GVfsJobSeekWrite *job,
- goffset offset)
-{
- job->final_offset = offset;
-}
diff --git a/daemon/gvfsjobseekwrite.h b/daemon/gvfsjobseekwrite.h
deleted file mode 100644
index 5e0756fb..00000000
--- a/daemon/gvfsjobseekwrite.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_SEEK_WRITE_H__
-#define __G_VFS_JOB_SEEK_WRITE_H__
-
-#include <gvfsjob.h>
-#include <gvfsbackend.h>
-#include <gvfswritechannel.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_SEEK_WRITE (g_vfs_job_seek_write_get_type ())
-#define G_VFS_JOB_SEEK_WRITE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_SEEK_WRITE, GVfsJobSeekWrite))
-#define G_VFS_JOB_SEEK_WRITE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_SEEK_WRITE, GVfsJobSeekWriteClass))
-#define G_VFS_IS_JOB_SEEK_WRITE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_SEEK_WRITE))
-#define G_VFS_IS_JOB_SEEK_WRITE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_SEEK_WRITE))
-#define G_VFS_JOB_SEEK_WRITE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_SEEK_WRITE, GVfsJobSeekWriteClass))
-
-typedef struct _GVfsJobSeekWriteClass GVfsJobSeekWriteClass;
-
-struct _GVfsJobSeekWrite
-{
- GVfsJob parent_instance;
-
- GVfsWriteChannel *channel;
- GVfsBackend *backend;
- GVfsBackendHandle handle;
- GSeekType seek_type;
- goffset requested_offset;
- goffset final_offset;
-};
-
-struct _GVfsJobSeekWriteClass
-{
- GVfsJobClass parent_class;
-};
-
-GType g_vfs_job_seek_write_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_seek_write_new (GVfsWriteChannel *channel,
- GVfsBackendHandle handle,
- GSeekType seek_type,
- goffset offset,
- GVfsBackend *backend);
-void g_vfs_job_seek_write_set_offset (GVfsJobSeekWrite *job,
- goffset offset);
-
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_SEEK_WRITE_H__ */
diff --git a/daemon/gvfsjobsetattribute.c b/daemon/gvfsjobsetattribute.c
deleted file mode 100644
index 3904a3f2..00000000
--- a/daemon/gvfsjobsetattribute.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobmove.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-#include "gvfsjobsetattribute.h"
-
-G_DEFINE_TYPE (GVfsJobSetAttribute, g_vfs_job_set_attribute, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_set_attribute_finalize (GObject *object)
-{
- GVfsJobSetAttribute *job;
-
- job = G_VFS_JOB_SET_ATTRIBUTE (object);
-
- g_free (job->filename);
- g_free (job->attribute);
- _g_dbus_attribute_value_destroy (job->type,
- &job->value);
-
- if (G_OBJECT_CLASS (g_vfs_job_set_attribute_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_set_attribute_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_set_attribute_class_init (GVfsJobSetAttributeClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_set_attribute_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_set_attribute_init (GVfsJobSetAttribute *job)
-{
- job->type = G_FILE_ATTRIBUTE_TYPE_INVALID;
-}
-
-GVfsJob *
-g_vfs_job_set_attribute_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobSetAttribute *job;
- DBusMessage *reply;
- DBusMessageIter iter, array_iter;
- const gchar *filename = NULL;
- gint filename_len;
- GFileQueryInfoFlags flags;
- gchar *attribute;
- dbus_uint32_t flags_u32 = 0;
- GFileAttributeType type;
- GDbusAttributeValue value;
-
- dbus_message_iter_init (message, &iter);
-
- if (dbus_message_iter_get_arg_type (&iter) == DBUS_TYPE_ARRAY &&
- dbus_message_iter_get_element_type (&iter) == DBUS_TYPE_BYTE)
- {
- dbus_message_iter_recurse (&iter, &array_iter);
- dbus_message_iter_get_fixed_array (&array_iter, &filename, &filename_len);
- }
-
- dbus_message_iter_next (&iter);
-
- if (dbus_message_iter_get_arg_type (&iter) == DBUS_TYPE_UINT32)
- {
- dbus_message_iter_get_basic (&iter, &flags_u32);
- dbus_message_iter_next (&iter);
- }
-
- flags = flags_u32;
-
- if (!(filename && _g_dbus_get_file_attribute (&iter, &attribute, &type, &value)))
- {
- reply = dbus_message_new_error (message,
- DBUS_ERROR_FAILED,
- _("Invalid dbus message"));
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_SET_ATTRIBUTE,
- "message", message,
- "connection", connection,
- NULL);
-
- job->backend = backend;
- job->filename = g_strndup (filename, filename_len);
- job->attribute = attribute;
- job->value = value;
- job->type = type;
- job->flags = flags;
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobSetAttribute *op_job = G_VFS_JOB_SET_ATTRIBUTE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->set_attribute == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->set_attribute (op_job->backend,
- op_job,
- op_job->filename,
- op_job->attribute,
- op_job->type,
- _g_dbus_attribute_as_pointer (op_job->type, &op_job->value),
- op_job->flags);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobSetAttribute *op_job = G_VFS_JOB_SET_ATTRIBUTE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_set_attribute == NULL)
- return FALSE;
-
- return class->try_set_attribute (op_job->backend,
- op_job,
- op_job->filename,
- op_job->attribute,
- op_job->type,
- _g_dbus_attribute_as_pointer (op_job->type, &op_job->value),
- op_job->flags);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobsetattribute.h b/daemon/gvfsjobsetattribute.h
deleted file mode 100644
index 72585151..00000000
--- a/daemon/gvfsjobsetattribute.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_SET_ATTRIBUTE_H__
-#define __G_VFS_JOB_SET_ATTRIBUTE_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_SET_ATTRIBUTE (g_vfs_job_set_attribute_get_type ())
-#define G_VFS_JOB_SET_ATTRIBUTE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_SET_ATTRIBUTE, GVfsJobSetAttribute))
-#define G_VFS_JOB_SET_ATTRIBUTE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_SET_ATTRIBUTE, GVfsJobSetAttributeClass))
-#define G_VFS_IS_JOB_SET_ATTRIBUTE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_SET_ATTRIBUTE))
-#define G_VFS_IS_JOB_SET_ATTRIBUTE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_SET_ATTRIBUTE))
-#define G_VFS_JOB_SET_ATTRIBUTE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_SET_ATTRIBUTE, GVfsJobSetAttributeClass))
-
-typedef struct _GVfsJobSetAttributeClass GVfsJobSetAttributeClass;
-
-struct _GVfsJobSetAttribute
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
-
- char *filename;
- char *attribute;
- GFileAttributeType type;
- GDbusAttributeValue value;
- GFileQueryInfoFlags flags;
-};
-
-struct _GVfsJobSetAttributeClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_set_attribute_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_set_attribute_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_SET_ATTRIBUTE_H__ */
diff --git a/daemon/gvfsjobsetdisplayname.c b/daemon/gvfsjobsetdisplayname.c
deleted file mode 100644
index e3dd22db..00000000
--- a/daemon/gvfsjobsetdisplayname.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobsetdisplayname.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobSetDisplayName, g_vfs_job_set_display_name, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_set_display_name_finalize (GObject *object)
-{
- GVfsJobSetDisplayName *job;
-
- job = G_VFS_JOB_SET_DISPLAY_NAME (object);
-
- g_free (job->filename);
- g_free (job->display_name);
- g_free (job->new_path);
-
- if (G_OBJECT_CLASS (g_vfs_job_set_display_name_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_set_display_name_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_set_display_name_class_init (GVfsJobSetDisplayNameClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_set_display_name_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_set_display_name_init (GVfsJobSetDisplayName *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_set_display_name_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobSetDisplayName *job;
- DBusMessage *reply;
- DBusError derror;
- int path_len;
- const char *path_data;
- char *display_name;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path_data, &path_len,
- DBUS_TYPE_STRING, &display_name,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_SET_DISPLAY_NAME,
- "message", message,
- "connection", connection,
- NULL);
-
- job->filename = g_strndup (path_data, path_len);
- job->backend = backend;
- job->display_name = g_strdup (display_name);
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobSetDisplayName *op_job = G_VFS_JOB_SET_DISPLAY_NAME (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->set_display_name == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->set_display_name (op_job->backend,
- op_job,
- op_job->filename,
- op_job->display_name);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobSetDisplayName *op_job = G_VFS_JOB_SET_DISPLAY_NAME (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_set_display_name == NULL)
- return FALSE;
-
- return class->try_set_display_name (op_job->backend,
- op_job,
- op_job->filename,
- op_job->display_name);
-}
-
-void
-g_vfs_job_set_display_name_set_new_path (GVfsJobSetDisplayName *job,
- const char *new_path)
-{
- job->new_path = g_strdup (new_path);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- GVfsJobSetDisplayName *op_job = G_VFS_JOB_SET_DISPLAY_NAME (job);
- DBusMessage *reply;
- DBusMessageIter iter;
-
- reply = dbus_message_new_method_return (message);
-
- dbus_message_iter_init_append (reply, &iter);
-
- g_assert (op_job->new_path != NULL);
-
- _g_dbus_message_iter_append_cstring (&iter, op_job->new_path);
-
- return reply;
-}
diff --git a/daemon/gvfsjobsetdisplayname.h b/daemon/gvfsjobsetdisplayname.h
deleted file mode 100644
index 9e773f46..00000000
--- a/daemon/gvfsjobsetdisplayname.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_SET_DISPLAY_NAME_H__
-#define __G_VFS_JOB_SET_DISPLAY_NAME_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_SET_DISPLAY_NAME (g_vfs_job_set_display_name_get_type ())
-#define G_VFS_JOB_SET_DISPLAY_NAME(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_SET_DISPLAY_NAME, GVfsJobSetDisplayName))
-#define G_VFS_JOB_SET_DISPLAY_NAME_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_SET_DISPLAY_NAME, GVfsJobSetDisplayNameClass))
-#define G_VFS_IS_JOB_SET_DISPLAY_NAME(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_SET_DISPLAY_NAME))
-#define G_VFS_IS_JOB_SET_DISPLAY_NAME_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_SET_DISPLAY_NAME))
-#define G_VFS_JOB_SET_DISPLAY_NAME_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_SET_DISPLAY_NAME, GVfsJobSetDisplayNameClass))
-
-typedef struct _GVfsJobSetDisplayNameClass GVfsJobSetDisplayNameClass;
-
-struct _GVfsJobSetDisplayName
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *filename;
- char *display_name;
-
- char *new_path;
-};
-
-struct _GVfsJobSetDisplayNameClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_set_display_name_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_set_display_name_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-void g_vfs_job_set_display_name_set_new_path (GVfsJobSetDisplayName *job,
- const char *new_path);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_SET_DISPLAY_NAME_H__ */
diff --git a/daemon/gvfsjobsource.c b/daemon/gvfsjobsource.c
deleted file mode 100644
index f0feda30..00000000
--- a/daemon/gvfsjobsource.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-#include "gvfsjobsource.h"
-
-static void g_vfs_job_source_base_init (gpointer g_class);
-
-enum {
- NEW_JOB,
- CLOSED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-GType
-g_vfs_job_source_get_type (void)
-{
- static GType vfs_job_source_type = 0;
-
- if (! vfs_job_source_type)
- {
- static const GTypeInfo vfs_job_source_info =
- {
- sizeof (GVfsJobSourceIface), /* class_size */
- g_vfs_job_source_base_init, /* base_init */
- NULL, /* base_finalize */
- NULL, /* class_init */
- NULL, /* class_finalize */
- NULL, /* class_data */
- 0,
- 0, /* n_preallocs */
- NULL
- };
-
- vfs_job_source_type =
- g_type_register_static (G_TYPE_INTERFACE, "GVfsJobSource",
- &vfs_job_source_info, 0);
-
- g_type_interface_add_prerequisite (vfs_job_source_type, G_TYPE_OBJECT);
- }
-
- return vfs_job_source_type;
-}
-
-
-static void
-g_vfs_job_source_base_init (gpointer g_class)
-{
- static gboolean initialized = FALSE;
-
- if (! initialized)
- {
- initialized = TRUE;
-
- signals[NEW_JOB] =
- g_signal_new ("new_job",
- G_VFS_TYPE_JOB_SOURCE,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GVfsJobSourceIface, new_job),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1, G_VFS_TYPE_JOB);
-
- signals[CLOSED] =
- g_signal_new ("closed",
- G_VFS_TYPE_JOB_SOURCE,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GVfsJobSourceIface, closed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- }
-}
-
-void
-g_vfs_job_source_new_job (GVfsJobSource *job_source,
- GVfsJob *job)
-{
- g_signal_emit (job_source, signals[NEW_JOB], 0, job);
-}
-
-void
-g_vfs_job_source_closed (GVfsJobSource *job_source)
-{
- g_signal_emit (job_source, signals[CLOSED], 0);
-}
diff --git a/daemon/gvfsjobsource.h b/daemon/gvfsjobsource.h
deleted file mode 100644
index 0740d48c..00000000
--- a/daemon/gvfsjobsource.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_SOURCE_H__
-#define __G_VFS_JOB_SOURCE_H__
-
-#include <glib-object.h>
-#include <gvfsjob.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_SOURCE (g_vfs_job_source_get_type ())
-#define G_VFS_JOB_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_VFS_TYPE_JOB_SOURCE, GVfsJobSource))
-#define G_VFS_IS_JOB_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_VFS_TYPE_JOB_SOURCE))
-#define G_VFS_JOB_SOURCE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_VFS_TYPE_JOB_SOURCE, GVfsJobSourceIface))
-
-/* GVfsJobSource defined in gvfsjob.h */
-typedef struct _GVfsJobSourceIface GVfsJobSourceIface;
-
-struct _GVfsJobSourceIface
-{
- GTypeInterface g_iface;
-
- /* Virtual Table: */
-
- /* Signals: */
-
- void (*new_job) (GVfsJobSource *source,
- GVfsJob *job);
- void (*closed) (GVfsJobSource *source);
-
-};
-
-GType g_vfs_job_source_get_type (void) G_GNUC_CONST;
-
-void g_vfs_job_source_new_job (GVfsJobSource *job_source,
- GVfsJob *job);
-void g_vfs_job_source_closed (GVfsJobSource *job_source);
-
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_SOURCE_H__ */
diff --git a/daemon/gvfsjobtrash.c b/daemon/gvfsjobtrash.c
deleted file mode 100644
index 4869ee3d..00000000
--- a/daemon/gvfsjobtrash.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobtrash.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobTrash, g_vfs_job_trash, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_trash_finalize (GObject *object)
-{
- GVfsJobTrash *job;
-
- job = G_VFS_JOB_TRASH (object);
-
- g_free (job->filename);
-
- if (G_OBJECT_CLASS (g_vfs_job_trash_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_trash_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_trash_class_init (GVfsJobTrashClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_trash_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_trash_init (GVfsJobTrash *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_trash_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobTrash *job;
- DBusMessage *reply;
- DBusError derror;
- int path_len;
- const char *path_data;
-
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path_data, &path_len,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_TRASH,
- "message", message,
- "connection", connection,
- NULL);
-
- job->filename = g_strndup (path_data, path_len);
- job->backend = backend;
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobTrash *op_job = G_VFS_JOB_TRASH (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->trash == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->trash (op_job->backend,
- op_job,
- op_job->filename);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobTrash *op_job = G_VFS_JOB_TRASH (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_trash == NULL)
- return FALSE;
-
- return class->try_trash (op_job->backend,
- op_job,
- op_job->filename);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobtrash.h b/daemon/gvfsjobtrash.h
deleted file mode 100644
index aa23a03e..00000000
--- a/daemon/gvfsjobtrash.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_TRASH_H__
-#define __G_VFS_JOB_TRASH_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_TRASH (g_vfs_job_trash_get_type ())
-#define G_VFS_JOB_TRASH(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_TRASH, GVfsJobTrash))
-#define G_VFS_JOB_TRASH_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_TRASH, GVfsJobTrashClass))
-#define G_VFS_IS_JOB_TRASH(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_TRASH))
-#define G_VFS_IS_JOB_TRASH_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_TRASH))
-#define G_VFS_JOB_TRASH_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_TRASH, GVfsJobTrashClass))
-
-typedef struct _GVfsJobTrashClass GVfsJobTrashClass;
-
-struct _GVfsJobTrash
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *filename;
-};
-
-struct _GVfsJobTrashClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_trash_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_trash_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_TRASH_H__ */
diff --git a/daemon/gvfsjobunmount.c b/daemon/gvfsjobunmount.c
deleted file mode 100644
index 6493856f..00000000
--- a/daemon/gvfsjobunmount.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobunmount.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonprotocol.h"
-
-G_DEFINE_TYPE (GVfsJobUnmount, g_vfs_job_unmount, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static void send_reply (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_unmount_finalize (GObject *object)
-{
- if (G_OBJECT_CLASS (g_vfs_job_unmount_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_unmount_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_unmount_class_init (GVfsJobUnmountClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_unmount_finalize;
- job_class->run = run;
- job_class->try = try;
- job_class->send_reply = send_reply;
-
- job_dbus_class->create_reply = create_reply;
-
-}
-
-static void
-g_vfs_job_unmount_init (GVfsJobUnmount *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_unmount_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend)
-{
- GVfsJobUnmount *job;
-
- g_print ("g_vfs_job_unmount_new request: %p\n", message);
-
- job = g_object_new (G_VFS_TYPE_JOB_UNMOUNT,
- "message", message,
- "connection", connection,
- NULL);
-
- job->backend = backend;
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobUnmount *op_job = G_VFS_JOB_UNMOUNT (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- class->unmount (op_job->backend,
- op_job);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobUnmount *op_job = G_VFS_JOB_UNMOUNT (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_unmount == NULL)
- {
- if (class->unmount == NULL)
- {
- /* If unmount is not implemented we always succeed */
- g_vfs_job_succeeded (G_VFS_JOB (job));
- return TRUE;
- }
-
- return FALSE;
- }
-
- return class->try_unmount (op_job->backend,
- op_job);
-}
-
-static void
-unregister_mount_callback (DBusMessage *unmount_reply,
- GError *error,
- gpointer user_data)
-{
- GVfsBackend *backend;
- GVfsJobUnmount *op_job = G_VFS_JOB_UNMOUNT (user_data);
-
- g_print ("unregister_mount_callback, unmount_reply: %p, error: %p\n", unmount_reply, error);
-
- backend = op_job->backend;
- (*G_VFS_JOB_CLASS (g_vfs_job_unmount_parent_class)->send_reply) (G_VFS_JOB (op_job));
-
- /* Unlink job source from daemon */
- g_vfs_job_source_closed (G_VFS_JOB_SOURCE (backend));
-}
-
-/* Might be called on an i/o thread */
-static void
-send_reply (GVfsJob *job)
-{
- GVfsJobUnmount *op_job = G_VFS_JOB_UNMOUNT (job);
-
- g_print ("send_reply, failed: %d\n", job->failed);
-
- if (job->failed)
- (*G_VFS_JOB_CLASS (g_vfs_job_unmount_parent_class)->send_reply) (G_VFS_JOB (op_job));
- else
- g_vfs_backend_unregister_mount (op_job->backend,
- unregister_mount_callback,
- job);
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobunmount.h b/daemon/gvfsjobunmount.h
deleted file mode 100644
index aaa18db2..00000000
--- a/daemon/gvfsjobunmount.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_UNMOUNT_H__
-#define __G_VFS_JOB_UNMOUNT_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_UNMOUNT (g_vfs_job_unmount_get_type ())
-#define G_VFS_JOB_UNMOUNT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_UNMOUNT, GVfsJobUnmount))
-#define G_VFS_JOB_UNMOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_UNMOUNT, GVfsJobUnmountClass))
-#define G_VFS_IS_JOB_UNMOUNT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_UNMOUNT))
-#define G_VFS_IS_JOB_UNMOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_UNMOUNT))
-#define G_VFS_JOB_UNMOUNT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_UNMOUNT, GVfsJobUnmountClass))
-
-typedef struct _GVfsJobUnmountClass GVfsJobUnmountClass;
-
-struct _GVfsJobUnmount
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
-};
-
-struct _GVfsJobUnmountClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_unmount_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_unmount_new (DBusConnection *connection,
- DBusMessage *request,
- GVfsBackend *backend);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_UNMOUNT_H__ */
diff --git a/daemon/gvfsjobunmountmountable.c b/daemon/gvfsjobunmountmountable.c
deleted file mode 100644
index cb9eb22e..00000000
--- a/daemon/gvfsjobunmountmountable.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "gvfsjobunmountmountable.h"
-#include "gdbusutils.h"
-#include "gvfsdaemonutils.h"
-
-G_DEFINE_TYPE (GVfsJobUnmountMountable, g_vfs_job_unmount_mountable, G_VFS_TYPE_JOB_DBUS)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static DBusMessage *create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message);
-
-static void
-g_vfs_job_unmount_mountable_finalize (GObject *object)
-{
- GVfsJobUnmountMountable *job;
-
- job = G_VFS_JOB_UNMOUNT_MOUNTABLE (object);
-
- g_free (job->filename);
-
- if (G_OBJECT_CLASS (g_vfs_job_unmount_mountable_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_unmount_mountable_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_unmount_mountable_class_init (GVfsJobUnmountMountableClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
- GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_unmount_mountable_finalize;
- job_class->run = run;
- job_class->try = try;
- job_dbus_class->create_reply = create_reply;
-}
-
-static void
-g_vfs_job_unmount_mountable_init (GVfsJobUnmountMountable *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_unmount_mountable_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend,
- gboolean eject)
-{
- GVfsJobUnmountMountable *job;
- DBusMessage *reply;
- DBusMessageIter iter;
- DBusError derror;
- char *path;
- guint32 flags;
-
- dbus_error_init (&derror);
- dbus_message_iter_init (message, &iter);
-
- path = NULL;
- if (!_g_dbus_message_iter_get_args (&iter, &derror,
- G_DBUS_TYPE_CSTRING, &path,
- DBUS_TYPE_UINT32, &flags,
- 0))
- {
- g_free (path);
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- return NULL;
- }
-
- job = g_object_new (G_VFS_TYPE_JOB_UNMOUNT_MOUNTABLE,
- "message", message,
- "connection", connection,
- NULL);
-
- job->filename = path;
- job->backend = backend;
- job->eject = eject;
- job->flags = flags;
-
- return G_VFS_JOB (job);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobUnmountMountable *op_job = G_VFS_JOB_UNMOUNT_MOUNTABLE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (op_job->eject)
- {
- if (class->eject_mountable == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->eject_mountable (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
- else
- {
- if (class->unmount_mountable == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->unmount_mountable (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobUnmountMountable *op_job = G_VFS_JOB_UNMOUNT_MOUNTABLE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (op_job->eject)
- {
- if (class->try_eject_mountable == NULL)
- return FALSE;
-
- return class->try_eject_mountable (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
- else
- {
- if (class->try_unmount_mountable == NULL)
- return FALSE;
-
- return class->try_unmount_mountable (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags);
- }
-}
-
-/* Might be called on an i/o thread */
-static DBusMessage *
-create_reply (GVfsJob *job,
- DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessage *reply;
-
- reply = dbus_message_new_method_return (message);
-
- return reply;
-}
diff --git a/daemon/gvfsjobunmountmountable.h b/daemon/gvfsjobunmountmountable.h
deleted file mode 100644
index 8a1a49d4..00000000
--- a/daemon/gvfsjobunmountmountable.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_UNMOUNT_MOUNTABLE_H__
-#define __G_VFS_JOB_UNMOUNT_MOUNTABLE_H__
-
-#include <gio/gio.h>
-#include <gvfsjob.h>
-#include <gvfsjobdbus.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_UNMOUNT_MOUNTABLE (g_vfs_job_unmount_mountable_get_type ())
-#define G_VFS_JOB_UNMOUNT_MOUNTABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_UNMOUNT_MOUNTABLE, GVfsJobUnmountMountable))
-#define G_VFS_JOB_UNMOUNT_MOUNTABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_UNMOUNT_MOUNTABLE, GVfsJobUnmountMountableClass))
-#define G_VFS_IS_JOB_UNMOUNT_MOUNTABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_UNMOUNT_MOUNTABLE))
-#define G_VFS_IS_JOB_UNMOUNT_MOUNTABLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_UNMOUNT_MOUNTABLE))
-#define G_VFS_JOB_UNMOUNT_MOUNTABLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_UNMOUNT_MOUNTABLE, GVfsJobUnmountMountableClass))
-
-typedef struct _GVfsJobUnmountMountableClass GVfsJobUnmountMountableClass;
-
-struct _GVfsJobUnmountMountable
-{
- GVfsJobDBus parent_instance;
-
- GVfsBackend *backend;
- char *filename;
- gboolean eject;
- GMountUnmountFlags flags;
-};
-
-struct _GVfsJobUnmountMountableClass
-{
- GVfsJobDBusClass parent_class;
-};
-
-GType g_vfs_job_unmount_mountable_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_unmount_mountable_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend,
- gboolean eject);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_UNMOUNT_MOUNTABLE_H__ */
diff --git a/daemon/gvfsjobwrite.c b/daemon/gvfsjobwrite.c
deleted file mode 100644
index 09ca5ad1..00000000
--- a/daemon/gvfsjobwrite.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include "gvfswritechannel.h"
-#include "gvfsjobwrite.h"
-#include "gvfsdaemonutils.h"
-
-G_DEFINE_TYPE (GVfsJobWrite, g_vfs_job_write, G_VFS_TYPE_JOB)
-
-static void run (GVfsJob *job);
-static gboolean try (GVfsJob *job);
-static void send_reply (GVfsJob *job);
-
-static void
-g_vfs_job_write_finalize (GObject *object)
-{
- GVfsJobWrite *job;
-
- job = G_VFS_JOB_WRITE (object);
-
- g_object_unref (job->channel);
- g_free (job->data);
-
- if (G_OBJECT_CLASS (g_vfs_job_write_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_write_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_job_write_class_init (GVfsJobWriteClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_write_finalize;
-
- job_class->run = run;
- job_class->try = try;
- job_class->send_reply = send_reply;
-}
-
-static void
-g_vfs_job_write_init (GVfsJobWrite *job)
-{
-}
-
-GVfsJob *
-g_vfs_job_write_new (GVfsWriteChannel *channel,
- GVfsBackendHandle handle,
- char *data,
- gsize data_size,
- GVfsBackend *backend)
-{
- GVfsJobWrite *job;
-
- job = g_object_new (G_VFS_TYPE_JOB_WRITE,
- NULL);
-
- job->backend = backend;
- job->channel = g_object_ref (channel);
- job->handle = handle;
- /* Takes ownership */
- job->data = data;
- job->data_size = data_size;
- job->written_size = 0;
-
- return G_VFS_JOB (job);
-}
-
-/* Might be called on an i/o thwrite */
-static void
-send_reply (GVfsJob *job)
-{
- GVfsJobWrite *op_job = G_VFS_JOB_WRITE (job);
- g_print ("job_write send reply\n");
-
- if (job->failed)
- g_vfs_channel_send_error (G_VFS_CHANNEL (op_job->channel), job->error);
- else
- g_vfs_write_channel_send_written (op_job->channel,
- op_job->written_size);
-}
-
-static void
-run (GVfsJob *job)
-{
- GVfsJobWrite *op_job = G_VFS_JOB_WRITE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->write == NULL)
- {
- g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported by backend"));
- return;
- }
-
- class->write (op_job->backend,
- op_job,
- op_job->handle,
- op_job->data,
- op_job->data_size);
-}
-
-static gboolean
-try (GVfsJob *job)
-{
- GVfsJobWrite *op_job = G_VFS_JOB_WRITE (job);
- GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
-
- if (class->try_write == NULL)
- return FALSE;
-
- return class->try_write (op_job->backend,
- op_job,
- op_job->handle,
- op_job->data,
- op_job->data_size);
-}
-
-
-void
-g_vfs_job_write_set_written_size (GVfsJobWrite *job,
- gsize written_size)
-{
- job->written_size = written_size;
-}
diff --git a/daemon/gvfsjobwrite.h b/daemon/gvfsjobwrite.h
deleted file mode 100644
index 4974eb2e..00000000
--- a/daemon/gvfsjobwrite.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_JOB_WRITE_H__
-#define __G_VFS_JOB_WRITE_H__
-
-#include <gvfsjob.h>
-#include <gvfsbackend.h>
-#include <gvfswritechannel.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_JOB_WRITE (g_vfs_job_write_get_type ())
-#define G_VFS_JOB_WRITE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_WRITE, GVfsJobWrite))
-#define G_VFS_JOB_WRITE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_WRITE, GVfsJobWriteClass))
-#define G_VFS_IS_JOB_WRITE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_WRITE))
-#define G_VFS_IS_JOB_WRITE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_WRITE))
-#define G_VFS_JOB_WRITE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_WRITE, GVfsJobWriteClass))
-
-typedef struct _GVfsJobWriteClass GVfsJobWriteClass;
-
-struct _GVfsJobWrite
-{
- GVfsJob parent_instance;
-
- GVfsWriteChannel *channel;
- GVfsBackend *backend;
- GVfsBackendHandle handle;
- char *data;
- gsize data_size;
-
- gsize written_size;
-};
-
-struct _GVfsJobWriteClass
-{
- GVfsJobClass parent_class;
-};
-
-GType g_vfs_job_write_get_type (void) G_GNUC_CONST;
-
-GVfsJob *g_vfs_job_write_new (GVfsWriteChannel *channel,
- GVfsBackendHandle handle,
- char *data,
- gsize data_size,
- GVfsBackend *backend);
-void g_vfs_job_write_set_written_size (GVfsJobWrite *job,
- gsize written_size);
-
-G_END_DECLS
-
-#endif /* __G_VFS_JOB_WRITE_H__ */
diff --git a/daemon/gvfskeyring.c b/daemon/gvfskeyring.c
deleted file mode 100644
index 943982f8..00000000
--- a/daemon/gvfskeyring.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Carlos Garcia Campos
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Carlos Garcia Campos <carlosgc@gnome.org>
- */
-
-#include <config.h>
-
-#ifdef HAVE_KEYRING
-#include <gnome-keyring.h>
-#endif
-
-#include "gvfskeyring.h"
-
-gboolean
-g_vfs_keyring_is_available (void)
-{
-#ifdef HAVE_KEYRING
- return gnome_keyring_is_available ();
-#else
- return FALSE;
-#endif
-}
-
-gboolean
-g_vfs_keyring_lookup_password (const gchar *username,
- const gchar *host,
- const gchar *domain,
- const gchar *protocol,
- const gchar *object,
- const gchar *authtype,
- guint32 port,
- gchar **username_out,
- gchar **domain_out,
- gchar **password_out)
-{
-#ifdef HAVE_KEYRING
- GnomeKeyringNetworkPasswordData *pwd_data;
- GnomeKeyringResult result;
- GList *plist;
-
- if (!gnome_keyring_is_available ())
- return FALSE;
-
- result = gnome_keyring_find_network_password_sync (
- username,
- domain,
- host,
- object,
- protocol,
- authtype,
- port,
- &plist);
-
- if (result != GNOME_KEYRING_RESULT_OK || plist == NULL)
- return FALSE;
-
- /* We use the first result, which is the least specific match */
- pwd_data = (GnomeKeyringNetworkPasswordData *)plist->data;
-
- *password_out = g_strdup (pwd_data->password);
-
- if (username_out)
- *username_out = g_strdup (pwd_data->user);
-
- if (domain_out)
- *domain_out = g_strdup (pwd_data->domain);
-
- gnome_keyring_network_password_list_free (plist);
-
- return TRUE;
-#else
- return FALSE;
-#endif /* HAVE_KEYRING */
-}
-
-gboolean
-g_vfs_keyring_save_password (const gchar *username,
- const gchar *host,
- const gchar *domain,
- const gchar *protocol,
- const gchar *object,
- const gchar *authtype,
- guint32 port,
- const gchar *password,
- GPasswordSave flags)
-{
-#ifdef HAVE_KEYRING
- GnomeKeyringResult result;
- const gchar *keyring;
- guint32 item_id;
-
- if (!gnome_keyring_is_available ())
- return FALSE;
-
- if (flags == G_PASSWORD_SAVE_NEVER)
- return FALSE;
-
- keyring = (flags == G_PASSWORD_SAVE_FOR_SESSION) ? "session" : NULL;
-
- result = gnome_keyring_set_network_password_sync (
- keyring,
- username,
- domain,
- host,
- object,
- protocol,
- authtype,
- port,
- password,
- &item_id);
-
- return (result == GNOME_KEYRING_RESULT_OK);
-#else
- return FALSE;
-#endif /* HAVE_KEYRING */
-}
diff --git a/daemon/gvfskeyring.h b/daemon/gvfskeyring.h
deleted file mode 100644
index 54c04962..00000000
--- a/daemon/gvfskeyring.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Carlos Garcia Campos
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Carlos Garcia Campos <carlosgc@gnome.org>
- */
-
-#ifndef __G_VFS_KEYRING_H__
-#define __G_VFS_KEYRING_H__
-
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-gboolean g_vfs_keyring_is_available (void);
-gboolean g_vfs_keyring_lookup_password (const gchar *username,
- const gchar *host,
- const gchar *domain,
- const gchar *protocol,
- const gchar *object,
- const gchar *authtype,
- guint32 port,
- gchar **username_out,
- gchar **domain_out,
- gchar **password);
-gboolean g_vfs_keyring_save_password (const gchar *username,
- const gchar *host,
- const gchar *domain,
- const gchar *protocol,
- const gchar *object,
- const gchar *authtype,
- guint32 port,
- const gchar *password,
- GPasswordSave flags);
-
-G_END_DECLS
-
-#endif /* __G_VFS_KEYRING_H__ */
diff --git a/daemon/gvfsmonitor.c b/daemon/gvfsmonitor.c
deleted file mode 100644
index df678039..00000000
--- a/daemon/gvfsmonitor.c
+++ /dev/null
@@ -1,321 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <strings.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <fcntl.h>
-
-#include <glib.h>
-#include <glib-object.h>
-#include <glib/gi18n.h>
-#include <gvfsmonitor.h>
-#include <gio/gunixinputstream.h>
-#include <gio/gunixoutputstream.h>
-#include <gvfsdaemonprotocol.h>
-#include <gvfsdaemonutils.h>
-#include <gvfsjobcloseread.h>
-#include <gvfsjobclosewrite.h>
-
-#define OBJ_PATH_PREFIX "/org/gtk/vfs/daemon/dirmonitor/"
-
-/* TODO: Real P_() */
-#define P_(_x) (_x)
-
-
-/* TODO: Handle a connection dying and unregister its subscription */
-
-typedef struct {
- DBusConnection *connection;
- char *id;
- char *object_path;
-} Subscriber;
-
-struct _GVfsMonitorPrivate
-{
- GVfsDaemon *daemon;
- GVfsBackend *backend; /* weak ref */
- GMountSpec *mount_spec;
- char *object_path;
- GList *subscribers;
-};
-
-/* atomic */
-static volatile gint path_counter = 1;
-
-G_DEFINE_TYPE (GVfsMonitor, g_vfs_monitor, G_TYPE_OBJECT)
-
-static void unsubscribe (GVfsMonitor *monitor,
- Subscriber *subscriber);
-
-static void
-backend_died (GVfsMonitor *monitor,
- GObject *old_backend)
-{
- Subscriber *subscriber;
-
- monitor->priv->backend = NULL;
-
- while (monitor->priv->subscribers != NULL)
- {
- subscriber = monitor->priv->subscribers->data;
- unsubscribe (monitor, subscriber);
- }
-}
-
-static void
-g_vfs_monitor_finalize (GObject *object)
-{
- GVfsMonitor *monitor;
-
- monitor = G_VFS_MONITOR (object);
-
- if (monitor->priv->backend)
- g_object_weak_unref (G_OBJECT (monitor->priv->backend),
- (GWeakNotify)backend_died,
- monitor);
-
- g_vfs_daemon_unregister_path (monitor->priv->daemon, monitor->priv->object_path);
- g_object_unref (monitor->priv->daemon);
-
- g_mount_spec_unref (monitor->priv->mount_spec);
-
- g_free (monitor->priv->object_path);
-
- if (G_OBJECT_CLASS (g_vfs_monitor_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_monitor_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_monitor_class_init (GVfsMonitorClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (GVfsMonitorPrivate));
-
- gobject_class->finalize = g_vfs_monitor_finalize;
-}
-
-static void
-g_vfs_monitor_init (GVfsMonitor *monitor)
-{
- gint id;
-
- monitor->priv = G_TYPE_INSTANCE_GET_PRIVATE (monitor,
- G_TYPE_VFS_MONITOR,
- GVfsMonitorPrivate);
-
- id = g_atomic_int_exchange_and_add (&path_counter, 1);
- monitor->priv->object_path = g_strdup_printf (OBJ_PATH_PREFIX"%d", id);
-}
-
-static gboolean
-matches_subscriber (Subscriber *subscriber,
- DBusConnection *connection,
- const char *object_path,
- const char *dbus_id)
-{
- return (subscriber->connection == connection &&
- strcmp (subscriber->object_path, object_path) == 0 &&
- ((dbus_id == NULL && subscriber->id == NULL) ||
- (dbus_id != NULL && subscriber->id != NULL &&
- strcmp (subscriber->id, dbus_id) == 0)));
-}
-
-static void
-unsubscribe (GVfsMonitor *monitor,
- Subscriber *subscriber)
-{
- dbus_connection_unref (subscriber->connection);
- g_free (subscriber->id);
- g_free (subscriber->object_path);
- g_free (subscriber);
- g_object_unref (monitor);
-
- monitor->priv->subscribers = g_list_remove (monitor->priv->subscribers, subscriber);
-
-}
-
-static DBusHandlerResult
-vfs_monitor_message_callback (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
-{
- GVfsMonitor *monitor = user_data;
- char *object_path;
- DBusError derror;
- GList *l;
- Subscriber *subscriber;
- DBusMessage *reply;
-
- if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MONITOR_INTERFACE,
- G_VFS_DBUS_MONITOR_OP_SUBSCRIBE))
- {
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_OBJECT_PATH, &object_path,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- }
- else
- {
- subscriber = g_new0 (Subscriber, 1);
- subscriber->connection = dbus_connection_ref (connection);
- subscriber->id = g_strdup (dbus_message_get_sender (message));
- subscriber->object_path = g_strdup (object_path);
-
- g_object_ref (monitor);
- monitor->priv->subscribers = g_list_prepend (monitor->priv->subscribers, subscriber);
-
- reply = dbus_message_new_method_return (message);
- dbus_connection_send (connection, reply, NULL);
- }
-
- return DBUS_HANDLER_RESULT_HANDLED;
- }
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MONITOR_INTERFACE,
- G_VFS_DBUS_MONITOR_OP_UNSUBSCRIBE))
- {
- dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_OBJECT_PATH, &object_path,
- 0))
- {
- reply = dbus_message_new_error (message,
- derror.name,
- derror.message);
- dbus_error_free (&derror);
-
- dbus_connection_send (connection, reply, NULL);
- }
- else
- {
- for (l = monitor->priv->subscribers; l != NULL; l = l->next)
- {
- subscriber = l->data;
-
- if (matches_subscriber (subscriber,
- connection,
- object_path,
- dbus_message_get_sender (message)))
- {
- unsubscribe (monitor, subscriber);
- break;
- }
- }
-
- reply = dbus_message_new_method_return (message);
- dbus_connection_send (connection, reply, NULL);
- }
-
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
-}
-
-GVfsMonitor *
-g_vfs_monitor_new (GVfsBackend *backend)
-{
- GVfsMonitor *monitor;
-
- monitor = g_object_new (G_TYPE_VFS_MONITOR, NULL);
-
- monitor->priv->backend = backend;
-
- g_object_weak_ref (G_OBJECT (backend),
- (GWeakNotify)backend_died,
- monitor);
-
- monitor->priv->daemon = g_object_ref (g_vfs_backend_get_daemon (backend));
- monitor->priv->mount_spec = g_mount_spec_ref (g_vfs_backend_get_mount_spec (backend));
-
- g_vfs_daemon_register_path (monitor->priv->daemon,
- monitor->priv->object_path,
- vfs_monitor_message_callback,
- monitor);
-
- return monitor;
-}
-
-const char *
-g_vfs_monitor_get_object_path (GVfsMonitor *monitor)
-{
- return monitor->priv->object_path;
-}
-
-void
-g_vfs_monitor_emit_event (GVfsMonitor *monitor,
- GFileMonitorEvent event_type,
- const char *file_path,
- const char *other_file_path)
-{
- GList *l;
- Subscriber *subscriber;
- DBusMessage *message;
- DBusMessageIter iter;
- guint32 event_type_dbus;
-
- for (l = monitor->priv->subscribers; l != NULL; l = l->next)
- {
- subscriber = l->data;
-
- message =
- dbus_message_new_method_call (subscriber->id,
- subscriber->object_path,
- G_VFS_DBUS_MONITOR_CLIENT_INTERFACE,
- G_VFS_DBUS_MONITOR_CLIENT_OP_CHANGED);
-
- dbus_message_iter_init_append (message, &iter);
- event_type_dbus = event_type;
- dbus_message_iter_append_basic (&iter,
- DBUS_TYPE_UINT32,
- &event_type_dbus);
- g_mount_spec_to_dbus (&iter, monitor->priv->mount_spec);
- _g_dbus_message_iter_append_cstring (&iter, file_path);
-
- if (other_file_path)
- {
- g_mount_spec_to_dbus (&iter, monitor->priv->mount_spec);
- _g_dbus_message_iter_append_cstring (&iter, other_file_path);
- }
-
- dbus_message_set_no_reply (message, FALSE);
-
- dbus_connection_send (subscriber->connection, message, NULL);
- dbus_message_unref (message);
- }
-}
diff --git a/daemon/gvfsmonitor.h b/daemon/gvfsmonitor.h
deleted file mode 100644
index 65ec82ff..00000000
--- a/daemon/gvfsmonitor.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_MONITOR_H__
-#define __G_VFS_MONITOR_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <gvfsbackend.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_VFS_MONITOR (g_vfs_monitor_get_type ())
-#define G_VFS_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_VFS_MONITOR, GVfsMonitor))
-#define G_VFS_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), G_TYPE_VFS_MONITOR, GVfsMonitorClass))
-#define G_IS_VFS_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_VFS_MONITOR))
-#define G_IS_VFS_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_VFS_MONITOR))
-
-typedef struct _GVfsMonitor GVfsMonitor;
-typedef struct _GVfsMonitorClass GVfsMonitorClass;
-typedef struct _GVfsMonitorPrivate GVfsMonitorPrivate;
-
-struct _GVfsMonitor
-{
- GObject parent_instance;
-
- GVfsMonitorPrivate *priv;
-};
-
-
-struct _GVfsMonitorClass
-{
- GObjectClass parent_class;
-
-};
-
-GType g_vfs_monitor_get_type (void) G_GNUC_CONST;
-
-GVfsMonitor* g_vfs_monitor_new (GVfsBackend *backend);
-const char * g_vfs_monitor_get_object_path (GVfsMonitor *monitor);
-void g_vfs_monitor_emit_event (GVfsMonitor *monitor,
- GFileMonitorEvent event_type,
- const char *file_path,
- const char *other_file_path);
-
-G_END_DECLS
-
-#endif /* __G_VFS_MONITOR_H__ */
diff --git a/daemon/gvfsreadchannel.c b/daemon/gvfsreadchannel.c
deleted file mode 100644
index c6e079b0..00000000
--- a/daemon/gvfsreadchannel.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <fcntl.h>
-
-#include <glib.h>
-#include <glib-object.h>
-#include <glib/gi18n.h>
-#include <gvfsreadchannel.h>
-#include <gvfsdaemonprotocol.h>
-#include <gvfsdaemonutils.h>
-#include <gvfsjobread.h>
-#include <gvfsjobseekread.h>
-#include <gvfsjobcloseread.h>
-
-struct _GVfsReadChannel
-{
- GVfsChannel parent_instance;
-
- guint read_count;
- int seek_generation;
-};
-
-G_DEFINE_TYPE (GVfsReadChannel, g_vfs_read_channel, G_VFS_TYPE_CHANNEL)
-
-static GVfsJob *read_channel_close (GVfsChannel *channel);
-static GVfsJob *read_channel_handle_request (GVfsChannel *channel,
- guint32 command,
- guint32 seq_nr,
- guint32 arg1,
- guint32 arg2,
- gpointer data,
- gsize data_len,
- GError **error);
-static GVfsJob *read_channel_readahead (GVfsChannel *channel,
- GVfsJob *job);
-
-static void
-g_vfs_read_channel_finalize (GObject *object)
-{
- if (G_OBJECT_CLASS (g_vfs_read_channel_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_read_channel_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_read_channel_class_init (GVfsReadChannelClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsChannelClass *channel_class = G_VFS_CHANNEL_CLASS (klass);
-
- gobject_class->finalize = g_vfs_read_channel_finalize;
- channel_class->close = read_channel_close;
- channel_class->handle_request = read_channel_handle_request;
- channel_class->readahead = read_channel_readahead;
-}
-
-static void
-g_vfs_read_channel_init (GVfsReadChannel *channel)
-{
-}
-
-static GVfsJob *
-read_channel_close (GVfsChannel *channel)
-{
- return g_vfs_job_close_read_new (G_VFS_READ_CHANNEL (channel),
- g_vfs_channel_get_backend_handle (channel),
- g_vfs_channel_get_backend (channel));
-}
-
-/* Always request large chunks. Its very inefficient
- to do network requests for smaller chunks. */
-static guint32
-modify_read_size (GVfsReadChannel *channel,
- guint32 requested_size)
-{
- guint32 real_size;
-
- if (channel->read_count <= 1)
- real_size = 16*1024;
- else if (channel->read_count <= 2)
- real_size = 32*1024;
- else
- real_size = 64*1024;
-
- if (requested_size > real_size)
- real_size = requested_size;
-
- /* Don't do ridicoulously large requests as this
- is just stupid on the network */
- if (real_size > 512 * 1024)
- real_size = 512 * 1024;
-
- return real_size;
-}
-
-static GVfsJob *
-read_channel_handle_request (GVfsChannel *channel,
- guint32 command,
- guint32 seq_nr,
- guint32 arg1,
- guint32 arg2,
- gpointer data,
- gsize data_len,
- GError **error)
-{
- GVfsJob *job;
- GSeekType seek_type;
- GVfsBackendHandle backend_handle;
- GVfsBackend *backend;
- GVfsReadChannel *read_channel;
-
- read_channel = G_VFS_READ_CHANNEL (channel);
- backend_handle = g_vfs_channel_get_backend_handle (channel);
- backend = g_vfs_channel_get_backend (channel);
-
- job = NULL;
- switch (command)
- {
- case G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_READ:
- read_channel->read_count++;
- job = g_vfs_job_read_new (read_channel,
- backend_handle,
- modify_read_size (read_channel, arg1),
- backend);
- break;
- case G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CLOSE:
- job = g_vfs_job_close_read_new (read_channel,
- backend_handle,
- backend);
- break;
- case G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_END:
- case G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_SET:
- seek_type = G_SEEK_SET;
- if (command == G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_END)
- seek_type = G_SEEK_END;
-
- read_channel->read_count = 0;
- read_channel->seek_generation++;
- job = g_vfs_job_seek_read_new (read_channel,
- backend_handle,
- seek_type,
- ((goffset)arg1) | (((goffset)arg2) << 32),
- backend);
- break;
-
- default:
- g_set_error (error, G_IO_ERROR,
- G_IO_ERROR_FAILED,
- "Unknown stream command %"G_GUINT32_FORMAT, command);
- break;
- }
-
- /* Ownership was passed */
- g_free (data);
- return job;
-}
-
-static GVfsJob *
-read_channel_readahead (GVfsChannel *channel,
- GVfsJob *job)
-{
- GVfsJob *readahead_job;
- GVfsReadChannel *read_channel;
- GVfsJobRead *read_job;
-
- readahead_job = NULL;
- if (!job->failed &&
- G_VFS_IS_JOB_READ (job))
- {
- read_job = G_VFS_JOB_READ (job);
- read_channel = G_VFS_READ_CHANNEL (channel);
-
- if (read_job->data_count != 0)
- {
- read_channel->read_count++;
- readahead_job = g_vfs_job_read_new (read_channel,
- g_vfs_channel_get_backend_handle (channel),
- modify_read_size (read_channel, 8192),
- g_vfs_channel_get_backend (channel));
- }
- }
-
- return readahead_job;
-}
-
-
-/* Might be called on an i/o thread
- */
-void
-g_vfs_read_channel_send_seek_offset (GVfsReadChannel *read_channel,
- goffset offset)
-{
- GVfsDaemonSocketProtocolReply reply;
- GVfsChannel *channel;
-
- channel = G_VFS_CHANNEL (read_channel);
-
- reply.type = g_htonl (G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SEEK_POS);
- reply.seq_nr = g_htonl (g_vfs_channel_get_current_seq_nr (channel));
- reply.arg1 = g_htonl (offset & 0xffffffff);
- reply.arg2 = g_htonl (offset >> 32);
-
- g_vfs_channel_send_reply (channel, &reply, NULL, 0);
-}
-
-/* Might be called on an i/o thread
- */
-void
-g_vfs_read_channel_send_closed (GVfsReadChannel *read_channel)
-{
- GVfsDaemonSocketProtocolReply reply;
- GVfsChannel *channel;
-
- channel = G_VFS_CHANNEL (read_channel);
-
- reply.type = g_htonl (G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_CLOSED);
- reply.seq_nr = g_htonl (g_vfs_channel_get_current_seq_nr (channel));
- reply.arg1 = g_htonl (0);
- reply.arg2 = g_htonl (0);
-
- g_vfs_channel_send_reply (channel, &reply, NULL, 0);
-}
-
-/* Might be called on an i/o thread
- */
-void
-g_vfs_read_channel_send_data (GVfsReadChannel *read_channel,
- char *buffer,
- gsize count)
-{
- GVfsDaemonSocketProtocolReply reply;
- GVfsChannel *channel;
-
- channel = G_VFS_CHANNEL (read_channel);
-
- reply.type = g_htonl (G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_DATA);
- reply.seq_nr = g_htonl (g_vfs_channel_get_current_seq_nr (channel));
- reply.arg1 = g_htonl (count);
- reply.arg2 = g_htonl (read_channel->seek_generation);
-
- g_vfs_channel_send_reply (channel, &reply, buffer, count);
-}
-
-
-GVfsReadChannel *
-g_vfs_read_channel_new (GVfsBackend *backend)
-{
- return g_object_new (G_VFS_TYPE_READ_CHANNEL,
- "backend", backend,
- NULL);
-}
diff --git a/daemon/gvfsreadchannel.h b/daemon/gvfsreadchannel.h
deleted file mode 100644
index a9a18bbf..00000000
--- a/daemon/gvfsreadchannel.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_READ_CHANNEL_H__
-#define __G_VFS_READ_CHANNEL_H__
-
-#include <glib-object.h>
-#include <gvfsjob.h>
-#include <gvfschannel.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_READ_CHANNEL (g_vfs_read_channel_get_type ())
-#define G_VFS_READ_CHANNEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_READ_CHANNEL, GVfsReadChannel))
-#define G_VFS_READ_CHANNEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_READ_CHANNEL, GVfsReadChannelClass))
-#define G_VFS_IS_READ_CHANNEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_READ_CHANNEL))
-#define G_VFS_IS_READ_CHANNEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_READ_CHANNEL))
-#define G_VFS_READ_CHANNEL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_READ_CHANNEL, GVfsReadChannelClass))
-
-typedef struct _GVfsReadChannel GVfsReadChannel;
-typedef struct _GVfsReadChannelClass GVfsReadChannelClass;
-typedef struct _GVfsReadChannelPrivate GVfsReadChannelPrivate;
-
-struct _GVfsReadChannelClass
-{
- GVfsChannelClass parent_class;
-};
-
-GType g_vfs_read_channel_get_type (void) G_GNUC_CONST;
-
-GVfsReadChannel *g_vfs_read_channel_new (GVfsBackend *backend);
-void g_vfs_read_channel_send_data (GVfsReadChannel *read_channel,
- char *buffer,
- gsize count);
-void g_vfs_read_channel_send_closed (GVfsReadChannel *read_channel);
-void g_vfs_read_channel_send_seek_offset (GVfsReadChannel *read_channel,
- goffset offset);
-
-G_END_DECLS
-
-#endif /* __G_VFS_READ_CHANNEL_H__ */
diff --git a/daemon/gvfswritechannel.c b/daemon/gvfswritechannel.c
deleted file mode 100644
index e340914b..00000000
--- a/daemon/gvfswritechannel.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <strings.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <fcntl.h>
-
-#include <glib.h>
-#include <glib-object.h>
-#include <glib/gi18n.h>
-#include <gvfswritechannel.h>
-#include <gvfsdaemonprotocol.h>
-#include <gvfsdaemonutils.h>
-#include <gvfsjobwrite.h>
-#include <gvfsjobseekwrite.h>
-#include <gvfsjobclosewrite.h>
-
-struct _GVfsWriteChannel
-{
- GVfsChannel parent_instance;
-};
-
-G_DEFINE_TYPE (GVfsWriteChannel, g_vfs_write_channel, G_VFS_TYPE_CHANNEL)
-
-static GVfsJob *write_channel_close (GVfsChannel *channel);
-static GVfsJob *write_channel_handle_request (GVfsChannel *channel,
- guint32 command,
- guint32 seq_nr,
- guint32 arg1,
- guint32 arg2,
- gpointer data,
- gsize data_len,
- GError **error);
-
-static void
-g_vfs_write_channel_finalize (GObject *object)
-{
- if (G_OBJECT_CLASS (g_vfs_write_channel_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_write_channel_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_write_channel_class_init (GVfsWriteChannelClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsChannelClass *channel_class = G_VFS_CHANNEL_CLASS (klass);
-
- gobject_class->finalize = g_vfs_write_channel_finalize;
- channel_class->close = write_channel_close;
- channel_class->handle_request = write_channel_handle_request;
-}
-
-static void
-g_vfs_write_channel_init (GVfsWriteChannel *channel)
-{
-}
-
-static GVfsJob *
-write_channel_close (GVfsChannel *channel)
-{
- return g_vfs_job_close_write_new (G_VFS_WRITE_CHANNEL (channel),
- g_vfs_channel_get_backend_handle (channel),
- g_vfs_channel_get_backend (channel));
-}
-
-static GVfsJob *
-write_channel_handle_request (GVfsChannel *channel,
- guint32 command,
- guint32 seq_nr,
- guint32 arg1,
- guint32 arg2,
- gpointer data,
- gsize data_len,
- GError **error)
-{
- GVfsJob *job;
- GSeekType seek_type;
- GVfsBackendHandle backend_handle;
- GVfsBackend *backend;
- GVfsWriteChannel *write_channel;
-
- write_channel = G_VFS_WRITE_CHANNEL (channel);
- backend_handle = g_vfs_channel_get_backend_handle (channel);
- backend = g_vfs_channel_get_backend (channel);
-
- job = NULL;
- switch (command)
- {
- case G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_WRITE:
- job = g_vfs_job_write_new (write_channel,
- backend_handle,
- data, data_len,
- backend);
- data = NULL; /* Pass ownership */
- break;
- case G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CLOSE:
- job = g_vfs_job_close_write_new (write_channel,
- backend_handle,
- backend);
- break;
- case G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_END:
- case G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_SET:
- seek_type = G_SEEK_SET;
- if (command == G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_END)
- seek_type = G_SEEK_END;
-
- job = g_vfs_job_seek_write_new (write_channel,
- backend_handle,
- seek_type,
- ((goffset)arg1) | (((goffset)arg2) << 32),
- backend);
- break;
-
- default:
- g_set_error (error, G_IO_ERROR,
- G_IO_ERROR_FAILED,
- "Unknown stream command %"G_GUINT32_FORMAT, command);
- break;
- }
-
- /* Ownership was passed */
- g_free (data);
- return job;
-}
-
-/* Might be called on an i/o thread
- */
-void
-g_vfs_write_channel_send_seek_offset (GVfsWriteChannel *write_channel,
- goffset offset)
-{
- GVfsDaemonSocketProtocolReply reply;
- GVfsChannel *channel;
-
- channel = G_VFS_CHANNEL (write_channel);
-
- reply.type = g_htonl (G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_SEEK_POS);
- reply.seq_nr = g_htonl (g_vfs_channel_get_current_seq_nr (channel));
- reply.arg1 = g_htonl (offset & 0xffffffff);
- reply.arg2 = g_htonl (offset >> 32);
-
- g_vfs_channel_send_reply (channel, &reply, NULL, 0);
-}
-
-/* Might be called on an i/o thread
- */
-void
-g_vfs_write_channel_send_closed (GVfsWriteChannel *write_channel,
- const char *etag)
-{
- GVfsDaemonSocketProtocolReply reply;
- GVfsChannel *channel;
-
- channel = G_VFS_CHANNEL (write_channel);
-
- reply.type = g_htonl (G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_CLOSED);
- reply.seq_nr = g_htonl (g_vfs_channel_get_current_seq_nr (channel));
- reply.arg1 = g_htonl (0);
- reply.arg2 = g_htonl (strlen (etag));
-
- g_vfs_channel_send_reply (channel, &reply, etag, strlen (etag));
-}
-
-/* Might be called on an i/o thread
- */
-void
-g_vfs_write_channel_send_written (GVfsWriteChannel *write_channel,
- gsize bytes_written)
-{
- GVfsDaemonSocketProtocolReply reply;
- GVfsChannel *channel;
-
- channel = G_VFS_CHANNEL (write_channel);
-
- reply.type = g_htonl (G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_WRITTEN);
- reply.seq_nr = g_htonl (g_vfs_channel_get_current_seq_nr (channel));
- reply.arg1 = g_htonl (bytes_written);
- reply.arg2 = 0;
-
- g_vfs_channel_send_reply (channel, &reply, NULL, 0);
-}
-
-
-GVfsWriteChannel *
-g_vfs_write_channel_new (GVfsBackend *backend)
-{
- return g_object_new (G_VFS_TYPE_WRITE_CHANNEL,
- "backend", backend,
- NULL);
-}
diff --git a/daemon/gvfswritechannel.h b/daemon/gvfswritechannel.h
deleted file mode 100644
index ce4dc14e..00000000
--- a/daemon/gvfswritechannel.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_VFS_WRITE_CHANNEL_H__
-#define __G_VFS_WRITE_CHANNEL_H__
-
-#include <glib-object.h>
-#include <gvfsjob.h>
-#include <gvfschannel.h>
-
-G_BEGIN_DECLS
-
-#define G_VFS_TYPE_WRITE_CHANNEL (g_vfs_write_channel_get_type ())
-#define G_VFS_WRITE_CHANNEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_WRITE_CHANNEL, GVfsWriteChannel))
-#define G_VFS_WRITE_CHANNEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_WRITE_CHANNEL, GVfsWriteChannelClass))
-#define G_VFS_IS_WRITE_CHANNEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_WRITE_CHANNEL))
-#define G_VFS_IS_WRITE_CHANNEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_WRITE_CHANNEL))
-#define G_VFS_WRITE_CHANNEL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_WRITE_CHANNEL, GVfsWriteChannelClass))
-
-typedef struct _GVfsWriteChannel GVfsWriteChannel;
-typedef struct _GVfsWriteChannelClass GVfsWriteChannelClass;
-typedef struct _GVfsWriteChannelPrivate GVfsWriteChannelPrivate;
-
-struct _GVfsWriteChannelClass
-{
- GVfsChannelClass parent_class;
-};
-
-GType g_vfs_write_channel_get_type (void) G_GNUC_CONST;
-
-GVfsWriteChannel *g_vfs_write_channel_new (GVfsBackend *backend);
-void g_vfs_write_channel_send_written (GVfsWriteChannel *write_channel,
- gsize bytes_written);
-void g_vfs_write_channel_send_closed (GVfsWriteChannel *write_channel,
- const char *etag);
-void g_vfs_write_channel_send_seek_offset (GVfsWriteChannel *write_channel,
- goffset offset);
-
-G_END_DECLS
-
-#endif /* __G_VFS_WRITE_CHANNEL_H__ */
diff --git a/daemon/http.mount.in b/daemon/http.mount.in
deleted file mode 100644
index 21b7930b..00000000
--- a/daemon/http.mount.in
+++ /dev/null
@@ -1,5 +0,0 @@
-[Mount]
-Type=http
-Exec=@libexecdir@/gvfsd-http
-AutoMount=true
-DBusName=org.gtk.vfs.mountpoint.http
diff --git a/daemon/libsmb-compat.h b/daemon/libsmb-compat.h
deleted file mode 100644
index 9ae8d928..00000000
--- a/daemon/libsmb-compat.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- * libsmb-compat.h: compatibility macros for libsmbclient < 3.2.0-pre2
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Tomas Bzatek <tbzatek@redhat.com>
- */
-
-#include <config.h>
-
-#include <libsmbclient.h>
-
-
-
-#ifndef DEPRECATED_SMBC_INTERFACE
-
-
-typedef SMBCFILE * (*smbc_opendir_fn)(SMBCCTX *c,
- const char *fname);
-
-typedef int (*smbc_closedir_fn)(SMBCCTX *c,
- SMBCFILE *dir);
-
-typedef struct smbc_dirent * (*smbc_readdir_fn)(SMBCCTX *c,
- SMBCFILE *dir);
-
-typedef int (*smbc_getdents_fn)(SMBCCTX *c,
- SMBCFILE *dir,
- struct smbc_dirent *dirp,
- int count);
-
-typedef int (*smbc_stat_fn)(SMBCCTX *c,
- const char *fname,
- struct stat *st);
-
-typedef SMBCFILE * (*smbc_open_fn)(SMBCCTX *c,
- const char *fname,
- int flags,
- mode_t mode);
-
-typedef SMBCFILE * (*smbc_creat_fn)(SMBCCTX *c,
- const char *path,
- mode_t mode);
-
-typedef ssize_t (*smbc_read_fn)(SMBCCTX *c,
- SMBCFILE *file,
- void *buf,
- size_t count);
-
-typedef ssize_t (*smbc_write_fn)(SMBCCTX *c,
- SMBCFILE *file,
- void *buf,
- size_t count);
-
-typedef int (*smbc_unlink_fn)(SMBCCTX *c,
- const char *fname);
-
-typedef int (*smbc_rename_fn)(SMBCCTX *ocontext,
- const char *oname,
- SMBCCTX *ncontext,
- const char *nname);
-
-typedef off_t (*smbc_lseek_fn)(SMBCCTX *c,
- SMBCFILE * file,
- off_t offset,
- int whence);
-
-typedef int (*smbc_close_fn)(SMBCCTX *c,
- SMBCFILE *file);
-
-typedef int (*smbc_fstat_fn)(SMBCCTX *c,
- SMBCFILE *file,
- struct stat *st);
-
-typedef int (*smbc_rmdir_fn)(SMBCCTX *c,
- const char *fname);
-
-typedef int (*smbc_mkdir_fn)(SMBCCTX *c,
- const char *fname,
- mode_t mode);
-
-
-
-#define smbc_getOptionUserData(ctx) \
- smbc_option_get (ctx, "user_data")
-
-#define smbc_setOptionUserData(ctx, data) \
- smbc_option_set (ctx, "user_data", data)
-
-#define smbc_setDebug(ctx, d) \
- ctx->debug = d
-
-#define smbc_setFunctionAuthDataWithContext(ctx, func) { \
- ctx->callbacks.auth_fn = NULL; \
- smbc_option_set (ctx, "auth_function", \
- (void *) func); \
- }
-
-#define smbc_setFunctionAddCachedServer(ctx, func) \
- ctx->callbacks.add_cached_srv_fn = func
-
-#define smbc_setFunctionGetCachedServer(ctx, func) \
- ctx->callbacks.get_cached_srv_fn = func
-
-#define smbc_setFunctionRemoveCachedServer(ctx, func) \
- ctx->callbacks.remove_cached_srv_fn = func
-
-#define smbc_setFunctionPurgeCachedServers(ctx, func) \
- ctx->callbacks.purge_cached_fn = func
-
-/* libsmbclient frees this on it's own, so make sure
- * to use simple system malloc */
-#define smbc_setWorkgroup(ctx, data) \
- ctx->workgroup = strdup (data)
-
-#define smbc_getWorkgroup(ctx) \
- ctx->workgroup
-
-#if defined(HAVE_SAMBA_FLAGS) && defined(SMB_CTX_FLAG_USE_KERBEROS) && defined(SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS)
- #define smbc_setOptionUseKerberos(ctx, val) \
- ctx->flags |= SMB_CTX_FLAG_USE_KERBEROS
-#else
- #define smbc_setOptionUseKerberos(ctx, val) { }
-#endif
-
-#if defined(HAVE_SAMBA_FLAGS) && defined(SMB_CTX_FLAG_USE_KERBEROS) && defined(SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS)
- #define smbc_setOptionFallbackAfterKerberos(ctx, val) \
- ctx->flags |= SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS
-#else
- #define smbc_setOptionFallbackAfterKerberos(ctx, val) { }
-#endif
-
-#if defined(HAVE_SAMBA_FLAGS) && defined(SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON)
- #define smbc_setOptionNoAutoAnonymousLogin(ctx, val) \
- ctx->flags |= SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON
-#else
- #define smbc_setOptionNoAutoAnonymousLogin(ctx, val) { }
-#endif
-
-
-#define smbc_setOptionDebugToStderr(ctx, val) \
- smbc_option_set(ctx, "debug_stderr", (void *) val)
-
-#define smbc_getFunctionStat(ctx) ctx->stat
-
-#define smbc_getFunctionFstat(ctx) ctx->fstat
-
-#define smbc_getFunctionOpen(ctx) ctx->open
-
-#define smbc_getFunctionRead(ctx) ctx->read
-
-#define smbc_getFunctionWrite(ctx) ctx->write
-
-#define smbc_getFunctionLseek(ctx) ctx->lseek
-
-#define smbc_getFunctionClose(ctx) ctx->close_fn
-
-#define smbc_getFunctionUnlink(ctx) ctx->unlink
-
-#define smbc_getFunctionRename(ctx) ctx->rename
-
-#define smbc_getFunctionOpendir(ctx) ctx->opendir
-
-#define smbc_getFunctionGetdents(ctx) ctx->getdents
-
-#define smbc_getFunctionClosedir(ctx) ctx->closedir
-
-#define smbc_getFunctionRmdir(ctx) ctx->rmdir
-
-#define smbc_getFunctionMkdir(ctx) ctx->mkdir
-
-
-
-#endif
diff --git a/daemon/localtest.mount.in b/daemon/localtest.mount.in
deleted file mode 100644
index b3cbea74..00000000
--- a/daemon/localtest.mount.in
+++ /dev/null
@@ -1,4 +0,0 @@
-[Mount]
-Type=localtest
-Exec=@libexecdir@/gvfsd-localtest
-AutoMount=false
diff --git a/daemon/main.c b/daemon/main.c
deleted file mode 100644
index 757229d2..00000000
--- a/daemon/main.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib/gstdio.h>
-#include <dbus/dbus.h>
-#include "gvfsdaemon.h"
-#include "gvfsbackendtest.h"
-#include <gvfsdaemonprotocol.h>
-#include "mount.h"
-#include <locale.h>
-
-int
-main (int argc, char *argv[])
-{
- GMainLoop *loop;
- GVfsDaemon *daemon;
- gboolean replace;
- gboolean no_fuse;
- GError *error;
- GOptionContext *context;
- const GOptionEntry options[] = {
- { "replace", 'r', 0, G_OPTION_ARG_NONE, &replace, N_("Replace old daemon."), NULL },
- { "no-fuse", 0, 0, G_OPTION_ARG_NONE, &no_fuse, N_("Don't start fuse."), NULL },
- { NULL }
- };
-
- setlocale (LC_ALL, "");
-
- bindtextdomain (GETTEXT_PACKAGE, GVFS_LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- g_thread_init (NULL);
-
- g_set_application_name (_("GVFS Daemon"));
- context = g_option_context_new ("");
-
- g_option_context_set_summary (context, _("Main daemon for GVFS"));
-
- g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE);
-
- replace = FALSE;
- no_fuse = FALSE;
-
- if (g_getenv ("GVFS_DISABLE_FUSE") != NULL)
- no_fuse = TRUE;
-
- error = NULL;
- if (!g_option_context_parse (context, &argc, &argv, &error))
- {
- /* Translators: the first %s is the application name, */
- /* the second %s is the error message */
- g_printerr (_("%s: %s"), g_get_application_name(), error->message);
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- g_error_free (error);
- g_option_context_free (context);
- return 1;
- }
-
- g_option_context_free (context);
-
- dbus_threads_init_default ();
-
- g_type_init ();
-
- daemon = g_vfs_daemon_new (TRUE, replace);
- if (daemon == NULL)
- return 1;
-
- mount_init ();
-
- loop = g_main_loop_new (NULL, FALSE);
-
-
-#ifdef HAVE_FUSE
- if (!no_fuse)
- {
- char *fuse_path;
- char *argv2[3];
-
- fuse_path = g_build_filename (g_get_home_dir (), ".gvfs", NULL);
-
- if (!g_file_test (fuse_path, G_FILE_TEST_EXISTS))
- g_mkdir (fuse_path, 0700);
-
- argv2[0] = LIBEXEC_DIR "/gvfs-fuse-daemon";
- argv2[1] = fuse_path;
- argv2[2] = NULL;
-
- g_spawn_async (NULL,
- argv2,
- NULL,
- G_SPAWN_STDOUT_TO_DEV_NULL |
- G_SPAWN_STDERR_TO_DEV_NULL,
- NULL, NULL,
- NULL, NULL);
-
- g_free (fuse_path);
- }
-#endif
-
- g_main_loop_run (loop);
-
- return 0;
-}
diff --git a/daemon/mount.c b/daemon/mount.c
deleted file mode 100644
index 75ef6be6..00000000
--- a/daemon/mount.c
+++ /dev/null
@@ -1,1207 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <unistd.h>
-#include <signal.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include "mount.h"
-#include "gmountoperationdbus.h"
-#include "gvfsdaemonprotocol.h"
-#include "gdbusutils.h"
-#include <glib/gurifuncs.h>
-#include <gio/gio.h>
-
-typedef struct {
- char *display_name;
- char *stable_name;
- char *x_content_types;
- char *icon;
- char *prefered_filename_encoding;
- gboolean user_visible;
-
- /* Daemon object ref */
- char *dbus_id;
- char *object_path;
-
- /* Mount details */
- GMountSpec *mount_spec;
-} VfsMount;
-
-typedef struct {
- char *type;
- char *exec;
- char *dbus_name;
- gboolean automount;
- char *scheme;
- char **scheme_aliases;
- int default_port;
- gboolean hostname_is_inet;
-} VfsMountable;
-
-typedef void (*MountCallback) (VfsMountable *mountable,
- GError *error,
- gpointer user_data);
-
-static GList *mountables = NULL;
-static GList *mounts = NULL;
-
-static gboolean fuse_available;
-
-static void lookup_mount (DBusConnection *connection,
- DBusMessage *message,
- gboolean do_automount);
-static void mountable_mount (VfsMountable *mountable,
- GMountSpec *mount_spec,
- GMountSource *source,
- gboolean automount,
- MountCallback callback,
- gpointer user_data);
-
-static VfsMount *
-find_vfs_mount (const char *dbus_id,
- const char *obj_path)
-{
- GList *l;
- for (l = mounts; l != NULL; l = l->next)
- {
- VfsMount *mount = l->data;
-
- if (strcmp (mount->dbus_id, dbus_id) == 0 &&
- strcmp (mount->object_path, obj_path) == 0)
- return mount;
- }
-
- return NULL;
-}
-
-static VfsMount *
-match_vfs_mount (GMountSpec *match)
-{
- GList *l;
- for (l = mounts; l != NULL; l = l->next)
- {
- VfsMount *mount = l->data;
-
- if (g_mount_spec_match (mount->mount_spec, match))
- return mount;
- }
-
- return NULL;
-}
-
-static VfsMountable *
-find_mountable (const char *type)
-{
- GList *l;
-
- for (l = mountables; l != NULL; l = l->next)
- {
- VfsMountable *mountable = l->data;
-
- if (strcmp (mountable->type, type) == 0)
- return mountable;
- }
-
- return NULL;
-}
-
-static VfsMountable *
-lookup_mountable (GMountSpec *spec)
-{
- const char *type;
-
- type = g_mount_spec_get_type (spec);
- if (type == NULL)
- return NULL;
-
- return find_mountable (type);
-}
-
-static void
-vfs_mountable_free (VfsMountable *mountable)
-{
- g_free (mountable->type);
- g_free (mountable->exec);
- g_free (mountable->dbus_name);
- g_free (mountable->scheme);
- g_strfreev (mountable->scheme_aliases);
- g_free (mountable);
-}
-
-static void
-vfs_mount_free (VfsMount *mount)
-{
- g_free (mount->display_name);
- g_free (mount->stable_name);
- g_free (mount->x_content_types);
- g_free (mount->icon);
- g_free (mount->prefered_filename_encoding);
- g_free (mount->dbus_id);
- g_free (mount->object_path);
- g_mount_spec_unref (mount->mount_spec);
-
- g_free (mount);
-}
-
-static void
-vfs_mount_to_dbus (VfsMount *mount,
- DBusMessageIter *iter)
-{
- DBusMessageIter struct_iter;
- dbus_bool_t user_visible;
- char *fuse_mountpoint;
-
- if (!dbus_message_iter_open_container (iter,
- DBUS_TYPE_STRUCT,
- NULL,
- &struct_iter))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_STRING,
- &mount->dbus_id))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_OBJECT_PATH,
- &mount->object_path))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_STRING,
- &mount->display_name))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_STRING,
- &mount->stable_name))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_STRING,
- &mount->x_content_types))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_STRING,
- &mount->icon))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_STRING,
- &mount->prefered_filename_encoding))
- _g_dbus_oom ();
-
- user_visible = mount->user_visible;
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_BOOLEAN,
- &user_visible))
- _g_dbus_oom ();
-
-
- fuse_mountpoint = NULL;
- if (fuse_available && mount->user_visible)
- {
- char *fs_name;
-
- /* Keep in sync with fuse daemon */
- fs_name = g_uri_escape_string (mount->stable_name, "+@#$., ", TRUE);
-
- fuse_mountpoint = g_build_filename (g_get_home_dir(), ".gvfs", fs_name, NULL);
- }
-
- if (fuse_mountpoint == NULL)
- fuse_mountpoint = g_strdup ("");
-
- _g_dbus_message_iter_append_cstring (&struct_iter, fuse_mountpoint);
-
- g_mount_spec_to_dbus (&struct_iter, mount->mount_spec);
-
- if (!dbus_message_iter_close_container (iter, &struct_iter))
- _g_dbus_oom ();
-}
-
-static void
-vfs_mountable_to_dbus (VfsMountable *mountable,
- DBusMessageIter *iter)
-{
- DBusMessageIter struct_iter;
- dbus_bool_t bool;
- guint32 int32;
- char *s;
- char **a;
- char *empty[] = {NULL};
-
- if (!dbus_message_iter_open_container (iter,
- DBUS_TYPE_STRUCT,
- NULL,
- &struct_iter))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_STRING,
- &mountable->type))
- _g_dbus_oom ();
-
- s = mountable->scheme;
- if (s == NULL)
- s = "";
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_STRING,
- &s))
- _g_dbus_oom ();
-
- a = mountable->scheme_aliases;
- if (a == NULL)
- a = empty;
- _g_dbus_message_iter_append_args (&struct_iter,
- DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &a, (int)g_strv_length (a),
- 0);
-
- int32 = mountable->default_port;
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_INT32,
- &int32))
- _g_dbus_oom ();
-
- bool = mountable->hostname_is_inet;
- if (!dbus_message_iter_append_basic (&struct_iter,
- DBUS_TYPE_BOOLEAN,
- &bool))
- _g_dbus_oom ();
-
- if (!dbus_message_iter_close_container (iter, &struct_iter))
- _g_dbus_oom ();
-}
-
-
-/************************************************************************
- * Support for mounting a VfsMountable *
- ************************************************************************/
-
-
-typedef struct {
- VfsMountable *mountable;
- dbus_bool_t automount;
- GMountSource *source;
- GMountSpec *mount_spec;
- MountCallback callback;
- gpointer user_data;
- char *obj_path;
- gboolean spawned;
-} MountData;
-
-static void spawn_mount (MountData *data);
-
-static void
-mount_data_free (MountData *data)
-{
- g_object_unref (data->source);
- g_mount_spec_unref (data->mount_spec);
- g_free (data->obj_path);
-
- g_free (data);
-}
-
-static void
-mount_finish (MountData *data, GError *error)
-{
- data->callback (data->mountable, error, data->user_data);
- mount_data_free (data);
-}
-
-static void
-dbus_mount_reply (DBusPendingCall *pending,
- void *_data)
-{
- DBusMessage *reply;
- GError *error;
- MountData *data = _data;
-
- reply = dbus_pending_call_steal_reply (pending);
- dbus_pending_call_unref (pending);
-
- if ((dbus_message_is_error (reply, DBUS_ERROR_NAME_HAS_NO_OWNER) ||
- dbus_message_is_error (reply, DBUS_ERROR_SERVICE_UNKNOWN)) &&
- !data->spawned)
- spawn_mount (data);
- else
- {
- error = NULL;
- if (_g_error_from_message (reply, &error))
- {
- mount_finish (data, error);
- g_error_free (error);
- }
- else
- mount_finish (data, NULL);
- }
-
- dbus_message_unref (reply);
-}
-
-static void
-mountable_mount_with_name (MountData *data,
- const char *dbus_name)
-{
- DBusConnection *conn;
- DBusMessage *message;
- DBusPendingCall *pending;
- GError *error = NULL;
- DBusMessageIter iter;
-
- conn = dbus_bus_get (DBUS_BUS_SESSION, NULL);
- message = dbus_message_new_method_call (dbus_name,
- G_VFS_DBUS_MOUNTABLE_PATH,
- G_VFS_DBUS_MOUNTABLE_INTERFACE,
- G_VFS_DBUS_MOUNTABLE_OP_MOUNT);
-
- dbus_message_iter_init_append (message, &iter);
- g_mount_spec_to_dbus (&iter, data->mount_spec);
-
- _g_dbus_message_append_args (message,
- DBUS_TYPE_BOOLEAN, &data->automount,
- 0);
-
- g_mount_source_to_dbus (data->source, message);
-
- if (!dbus_connection_send_with_reply (conn, message,
- &pending,
- G_VFS_DBUS_MOUNT_TIMEOUT_MSECS))
- _g_dbus_oom ();
-
- dbus_message_unref (message);
- dbus_connection_unref (conn);
-
- if (pending == NULL)
- {
- g_set_error (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Error while getting peer-to-peer dbus connection: %s",
- "Connection is closed");
- mount_finish (data, error);
- g_error_free (error);
- return;
- }
-
- if (!dbus_pending_call_set_notify (pending,
- dbus_mount_reply,
- data, NULL))
- _g_dbus_oom ();
-}
-
-static DBusHandlerResult
-spawn_mount_message_function (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
-{
- MountData *data = user_data;
- GError *error = NULL;
- dbus_bool_t succeeded;
- char *error_message;
-
- if (dbus_message_is_method_call (message,
- G_VFS_DBUS_SPAWNER_INTERFACE,
- G_VFS_DBUS_OP_SPAWNED))
- {
- dbus_connection_unregister_object_path (connection, data->obj_path);
-
- if (!dbus_message_get_args (message, NULL,
- DBUS_TYPE_BOOLEAN, &succeeded,
- DBUS_TYPE_STRING, &error_message,
- DBUS_TYPE_INVALID))
- {
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Invalid arguments from spawned child"));
- mount_finish (data, error);
- g_error_free (error);
- }
- else if (!succeeded)
- {
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED, error_message);
- mount_finish (data, error);
- g_error_free (error);
- }
- else
- mountable_mount_with_name (data, dbus_message_get_sender (message));
-
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-static void
-spawn_mount (MountData *data)
-{
- char *exec;
- GError *error;
- DBusConnection *connection;
- static int mount_id = 0;
- DBusObjectPathVTable spawn_vtable = {
- NULL,
- spawn_mount_message_function
- };
-
- data->spawned = TRUE;
-
- error = NULL;
- if (data->mountable->exec == NULL)
- {
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "No exec key defined for mountpoint");
- mount_finish (data, error);
- g_error_free (error);
- }
- else
- {
- data->obj_path = g_strdup_printf ("/org/gtk/gvfs/exec_spaw/%d", mount_id++);
-
- connection = dbus_bus_get (DBUS_BUS_SESSION, NULL);
- if (!dbus_connection_register_object_path (connection,
- data->obj_path,
- &spawn_vtable,
- data))
- _g_dbus_oom ();
-
- exec = g_strconcat (data->mountable->exec, " --spawner ", dbus_bus_get_unique_name (connection), " ", data->obj_path, NULL);
-
- if (!g_spawn_command_line_async (exec, &error))
- {
- dbus_connection_unregister_object_path (connection, data->obj_path);
- mount_finish (data, error);
- g_error_free (error);
- }
-
- /* TODO: Add a timeout here to detect spawned app crashing */
-
- dbus_connection_unref (connection);
- g_free (exec);
- }
-}
-
-static void
-mountable_mount (VfsMountable *mountable,
- GMountSpec *mount_spec,
- GMountSource *source,
- gboolean automount,
- MountCallback callback,
- gpointer user_data)
-{
- MountData *data;
-
- data = g_new0 (MountData, 1);
- data->automount = automount;
- data->mountable = mountable;
- data->source = g_object_ref (source);
- data->mount_spec = g_mount_spec_ref (mount_spec);
- data->callback = callback;
- data->user_data = user_data;
-
- if (mountable->dbus_name == NULL)
- spawn_mount (data);
- else
- mountable_mount_with_name (data, mountable->dbus_name);
-}
-
-static void
-read_mountable_config (void)
-{
- GDir *dir;
- char *mount_dir, *path;
- const char *filename;
- GKeyFile *keyfile;
- char **types;
- VfsMountable *mountable;
- int i;
-
- mount_dir = MOUNTABLE_DIR;
- dir = g_dir_open (mount_dir, 0, NULL);
-
- if (dir)
- {
- while ((filename = g_dir_read_name (dir)) != NULL)
- {
- path = g_build_filename (mount_dir, filename, NULL);
-
- keyfile = g_key_file_new ();
- if (g_key_file_load_from_file (keyfile, path, G_KEY_FILE_NONE, NULL))
- {
- types = g_key_file_get_string_list (keyfile, "Mount", "Type", NULL, NULL);
- if (types != NULL)
- {
- for (i = 0; types[i] != NULL; i++)
- {
- if (*types[i] != 0)
- {
- mountable = g_new0 (VfsMountable, 1);
- mountable->type = g_strdup (types[i]);
- mountable->exec = g_key_file_get_string (keyfile, "Mount", "Exec", NULL);
- mountable->dbus_name = g_key_file_get_string (keyfile, "Mount", "DBusName", NULL);
- mountable->automount = g_key_file_get_boolean (keyfile, "Mount", "AutoMount", NULL);
- mountable->scheme = g_key_file_get_string (keyfile, "Mount", "Scheme", NULL);
- mountable->scheme_aliases =
- g_key_file_get_string_list (keyfile, "Mount", "SchemeAliases", NULL, NULL);
- mountable->default_port = g_key_file_get_integer (keyfile, "Mount", "DefaultPort", NULL);
- mountable->hostname_is_inet = g_key_file_get_boolean (keyfile, "Mount", "HostnameIsInetAddress", NULL);
-
- if (mountable->scheme == NULL)
- mountable->scheme = g_strdup (mountable->type);
-
- mountables = g_list_prepend (mountables, mountable);
- }
- }
- g_strfreev (types);
- }
- }
- g_key_file_free (keyfile);
- g_free (path);
- }
- g_dir_close (dir);
- }
-}
-
-static void
-re_read_mountable_config (void)
-{
- g_list_foreach (mountables, (GFunc)vfs_mountable_free, NULL);
- g_list_free (mountables);
- mountables = NULL;
-
- read_mountable_config ();
-}
-
-/************************************************************************
- * Support for keeping track of active mounts *
- ************************************************************************/
-
-static void
-signal_mounted_unmounted (VfsMount *mount,
- gboolean mounted)
-{
- DBusMessage *message;
- DBusMessageIter iter;
- DBusConnection *conn;
-
- message = dbus_message_new_signal (G_VFS_DBUS_MOUNTTRACKER_PATH,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- mounted ?
- G_VFS_DBUS_MOUNTTRACKER_SIGNAL_MOUNTED :
- G_VFS_DBUS_MOUNTTRACKER_SIGNAL_UNMOUNTED
- );
- if (message == NULL)
- _g_dbus_oom ();
-
- dbus_message_iter_init_append (message, &iter);
- vfs_mount_to_dbus (mount, &iter);
-
- conn = dbus_bus_get (DBUS_BUS_SESSION, NULL);
- dbus_connection_send (conn, message, NULL);
- dbus_connection_unref (conn);
-
- dbus_message_unref (message);
-}
-
-static void
-dbus_client_disconnected (const char *dbus_id)
-{
- GList *l, *next;
-
- next = NULL;
- for (l = mounts; l != NULL; l = next)
- {
- VfsMount *mount = l->data;
- next = l->next;
-
- if (strcmp (mount->dbus_id, dbus_id) == 0)
- {
- signal_mounted_unmounted (mount, FALSE);
-
- vfs_mount_free (mount);
- mounts = g_list_delete_link (mounts, l);
- }
- }
-}
-
-static void
-register_mount (DBusConnection *connection,
- DBusMessage *message)
-{
- VfsMount *mount;
- DBusMessage *reply;
- DBusError error;
- const char *display_name, *stable_name, *x_content_types, *icon, *obj_path, *id, *prefered_filename_encoding;
- dbus_bool_t user_visible;
- DBusMessageIter iter;
- GMountSpec *mount_spec;
-
- id = dbus_message_get_sender (message);
-
- dbus_message_iter_init (message, &iter);
-
- dbus_error_init (&error);
- if (_g_dbus_message_iter_get_args (&iter,
- &error,
- DBUS_TYPE_OBJECT_PATH, &obj_path,
- DBUS_TYPE_STRING, &display_name,
- DBUS_TYPE_STRING, &stable_name,
- DBUS_TYPE_STRING, &x_content_types,
- DBUS_TYPE_STRING, &icon,
- DBUS_TYPE_STRING, &prefered_filename_encoding,
- DBUS_TYPE_BOOLEAN, &user_visible,
- 0))
- {
- if (find_vfs_mount (id, obj_path) != NULL)
- reply = dbus_message_new_error (message,
- DBUS_ERROR_INVALID_ARGS,
- "Mountpoint Already registered");
- else if ((mount_spec = g_mount_spec_from_dbus (&iter)) == NULL)
- reply = dbus_message_new_error (message,
- DBUS_ERROR_INVALID_ARGS,
- "Error in mount spec");
- else if (match_vfs_mount (mount_spec) != NULL)
- reply = dbus_message_new_error (message,
- DBUS_ERROR_INVALID_ARGS,
- "Mountpoint Already registered");
- else
- {
- mount = g_new0 (VfsMount, 1);
- mount->display_name = g_strdup (display_name);
- mount->stable_name = g_strdup (stable_name);
- mount->x_content_types = g_strdup (x_content_types);
- mount->icon = g_strdup (icon);
- mount->prefered_filename_encoding = g_strdup (prefered_filename_encoding);
- mount->user_visible = user_visible;
- mount->dbus_id = g_strdup (id);
- mount->object_path = g_strdup (obj_path);
- mount->mount_spec = mount_spec;
-
- mounts = g_list_prepend (mounts, mount);
-
- signal_mounted_unmounted (mount, TRUE);
-
- reply = dbus_message_new_method_return (message);
- }
- }
- else
- {
- reply = dbus_message_new_error (message,
- error.name, error.message);
- dbus_error_free (&error);
- }
-
- if (reply == NULL)
- _g_dbus_oom ();
-
- dbus_connection_send (connection, reply, NULL);
-}
-
-typedef struct {
- DBusMessage *message;
- DBusConnection *connection;
-} AutoMountData;
-
-static void
-automount_done (VfsMountable *mountable,
- GError *error,
- gpointer _data)
-{
- DBusMessage *reply;
- AutoMountData *data = _data;
-
- if (error)
- {
- reply = _dbus_message_new_gerror (data->message,
- G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED,
- _("Automount failed: %s"), error->message);
- dbus_connection_send (data->connection, reply, NULL);
- }
- else
- lookup_mount (data->connection,
- data->message,
- FALSE);
-
- dbus_connection_unref (data->connection);
- dbus_message_unref (data->message);
- g_free (data);
-}
-
-static DBusMessage *
-maybe_automount (GMountSpec *spec,
- DBusMessage *message,
- DBusConnection *connection,
- gboolean do_automount)
-{
- VfsMountable *mountable;
- DBusMessage *reply;
-
- mountable = lookup_mountable (spec);
-
- reply = NULL;
- if (mountable != NULL && do_automount && mountable->automount)
- {
- AutoMountData *data;
- GMountSource *mount_source;
-
- g_print ("automounting...\n");
-
- mount_source = g_mount_source_new_dummy ();
-
- data = g_new0 (AutoMountData, 1);
- data->message = dbus_message_ref (message);
- data->connection = dbus_connection_ref (connection);
-
- mountable_mount (mountable, spec, mount_source, TRUE, automount_done, data);
- g_object_unref (mount_source);
- }
- else if (mountable != NULL)
- reply = _dbus_message_new_gerror (message,
- G_IO_ERROR,
- G_IO_ERROR_NOT_MOUNTED,
- _("The specified location is not mounted"));
- else
- reply = _dbus_message_new_gerror (message,
- G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("The specified location is not supported"));
-
- return reply;
-}
-
-static void
-lookup_mount (DBusConnection *connection,
- DBusMessage *message,
- gboolean do_automount)
-{
- VfsMount *mount;
- DBusMessage *reply;
- DBusMessageIter iter;
- GMountSpec *spec;
-
- dbus_message_iter_init (message, &iter);
- spec = g_mount_spec_from_dbus (&iter);
-
- reply = NULL;
- if (spec != NULL)
- {
- mount = match_vfs_mount (spec);
-
- if (mount == NULL)
- reply = maybe_automount (spec, message, connection, do_automount);
- else
- {
- reply = dbus_message_new_method_return (message);
-
- if (reply)
- {
- dbus_message_iter_init_append (reply, &iter);
-
- vfs_mount_to_dbus (mount, &iter);
- }
- }
- }
- else
- reply = dbus_message_new_error (message,
- DBUS_ERROR_INVALID_ARGS,
- "Invalid arguments");
-
- g_mount_spec_unref (spec);
- if (reply != NULL)
- dbus_connection_send (connection, reply, NULL);
-}
-
-static void
-list_mounts (DBusConnection *connection,
- DBusMessage *message)
-{
- VfsMount *mount;
- DBusMessage *reply;
- DBusMessageIter iter, array_iter;
- GList *l;
-
- reply = dbus_message_new_method_return (message);
- if (reply == NULL)
- _g_dbus_oom ();
-
- dbus_message_iter_init_append (reply, &iter);
-
-
- if (!dbus_message_iter_open_container (&iter,
- DBUS_TYPE_ARRAY,
- DBUS_STRUCT_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_OBJECT_PATH_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_BOOLEAN_AS_STRING
- DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING
- G_MOUNT_SPEC_TYPE_AS_STRING
- DBUS_STRUCT_END_CHAR_AS_STRING,
- &array_iter))
- _g_dbus_oom ();
-
- for (l = mounts; l != NULL; l = l->next)
- {
- mount = l->data;
-
- vfs_mount_to_dbus (mount, &array_iter);
- }
-
- if (!dbus_message_iter_close_container (&iter, &array_iter))
- _g_dbus_oom ();
-
- dbus_connection_send (connection, reply, NULL);
-}
-
-static void
-mount_location_done (VfsMountable *mountable,
- GError *error,
- gpointer user_data)
-{
- DBusMessage *message, *reply;
- DBusConnection *conn;
-
- message = user_data;
-
- if (error)
- reply = _dbus_message_new_from_gerror (message, error);
- else
- reply = dbus_message_new_method_return (message);
-
- dbus_message_unref (message);
-
- if (reply == NULL)
- _g_dbus_oom ();
-
- conn = dbus_bus_get (DBUS_BUS_SESSION, NULL);
- if (conn)
- {
- dbus_connection_send (conn, reply, NULL);
- dbus_connection_unref (conn);
- }
-
- dbus_message_unref (reply);
-}
-
-static void
-mount_location (DBusConnection *connection,
- DBusMessage *message)
-{
- DBusMessageIter iter;
- DBusMessage *reply;
- DBusError derror;
- GMountSpec *spec;
- const char *obj_path, *dbus_id;
- VfsMountable *mountable;
-
- dbus_message_iter_init (message, &iter);
-
- mountable = NULL;
- spec = NULL;
- reply = NULL;
-
- spec = g_mount_spec_from_dbus (&iter);
- if (spec == NULL)
- reply = dbus_message_new_error (message, DBUS_ERROR_INVALID_ARGS,
- "Invalid arguments");
- else
- {
- dbus_error_init (&derror);
- if (!_g_dbus_message_iter_get_args (&iter,
- &derror,
- DBUS_TYPE_STRING, &dbus_id,
- DBUS_TYPE_OBJECT_PATH, &obj_path,
- 0))
- {
- reply = dbus_message_new_error (message, derror.name, derror.message);
- dbus_error_free (&derror);
- }
- else
- {
- VfsMount *mount;
- mount = match_vfs_mount (spec);
-
- if (mount != NULL)
- reply = _dbus_message_new_gerror (message,
- G_IO_ERROR, G_IO_ERROR_ALREADY_MOUNTED,
- _("Location is already mounted"));
- else
- {
- mountable = lookup_mountable (spec);
-
- if (mountable == NULL)
- reply = _dbus_message_new_gerror (message,
- G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED,
- _("Location is not mountable"));
- }
- }
- }
-
- if (reply)
- dbus_connection_send (connection, reply, NULL);
- else
- {
- GMountSource *source;
-
- source = g_mount_source_new (dbus_id, obj_path);
- mountable_mount (mountable,
- spec,
- source,
- FALSE,
- mount_location_done, dbus_message_ref (message));
- g_object_unref (source);
- }
-
- if (spec)
- g_mount_spec_unref (spec);
-
-}
-
-static void
-list_mount_types (DBusConnection *connection,
- DBusMessage *message)
-{
- VfsMountable *mountable;
- DBusMessage *reply;
- DBusMessageIter iter, array_iter;
- GList *l;
-
- reply = dbus_message_new_method_return (message);
- if (reply == NULL)
- _g_dbus_oom ();
-
- dbus_message_iter_init_append (reply, &iter);
-
-
- if (!dbus_message_iter_open_container (&iter,
- DBUS_TYPE_ARRAY,
- DBUS_TYPE_STRING_AS_STRING,
- &array_iter))
- _g_dbus_oom ();
-
- for (l = mountables; l != NULL; l = l->next)
- {
- mountable = l->data;
- if (!dbus_message_iter_append_basic (&array_iter,
- DBUS_TYPE_STRING,
- &mountable->type))
- _g_dbus_oom ();
- }
-
- if (!dbus_message_iter_close_container (&iter, &array_iter))
- _g_dbus_oom ();
-
- dbus_connection_send (connection, reply, NULL);
-}
-
-static void
-list_mountable_info (DBusConnection *connection,
- DBusMessage *message)
-{
- VfsMountable *mountable;
- DBusMessage *reply;
- DBusMessageIter iter, array_iter;
- GList *l;
-
- reply = dbus_message_new_method_return (message);
- if (reply == NULL)
- _g_dbus_oom ();
-
- dbus_message_iter_init_append (reply, &iter);
-
-
- if (!dbus_message_iter_open_container (&iter,
- DBUS_TYPE_ARRAY,
- DBUS_STRUCT_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_STRING_AS_STRING /* type */
- DBUS_TYPE_STRING_AS_STRING /* scheme */
- DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING /* scheme aliases */
- DBUS_TYPE_INT32_AS_STRING /* default port */
- DBUS_TYPE_BOOLEAN_AS_STRING /* host is inet */
- DBUS_STRUCT_END_CHAR_AS_STRING,
- &array_iter))
- _g_dbus_oom ();
-
- for (l = mountables; l != NULL; l = l->next)
- {
- mountable = l->data;
-
- vfs_mountable_to_dbus (mountable, &array_iter);
- }
-
- if (!dbus_message_iter_close_container (&iter, &array_iter))
- _g_dbus_oom ();
-
- dbus_connection_send (connection, reply, NULL);
-}
-
-static DBusHandlerResult
-dbus_message_function (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
-{
- DBusHandlerResult res;
-
- res = DBUS_HANDLER_RESULT_HANDLED;
- if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_REGISTER_FUSE))
- fuse_available = TRUE;
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_REGISTER_MOUNT))
- register_mount (connection, message);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_LOOKUP_MOUNT))
- lookup_mount (connection, message, TRUE);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_LIST_MOUNTS))
- list_mounts (connection, message);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_MOUNT_LOCATION))
- mount_location (connection, message);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_LIST_MOUNT_TYPES))
- list_mount_types (connection, message);
- else if (dbus_message_is_method_call (message,
- G_VFS_DBUS_MOUNTTRACKER_INTERFACE,
- G_VFS_DBUS_MOUNTTRACKER_OP_LIST_MOUNTABLE_INFO))
- list_mountable_info (connection, message);
- else
- res = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- return res;
-}
-
-struct DBusObjectPathVTable tracker_dbus_vtable = {
- NULL,
- dbus_message_function
-};
-
-
-static DBusHandlerResult
-mount_tracker_filter_func (DBusConnection *conn,
- DBusMessage *message,
- gpointer data)
-{
- const char *name, *from, *to;
-
- if (dbus_message_is_signal (message,
- DBUS_INTERFACE_DBUS,
- "NameOwnerChanged"))
- {
- if (dbus_message_get_args (message, NULL,
- DBUS_TYPE_STRING, &name,
- DBUS_TYPE_STRING, &from,
- DBUS_TYPE_STRING, &to,
- DBUS_TYPE_INVALID))
- {
- if (*name == ':' && *to == 0)
- dbus_client_disconnected (name);
- }
-
- }
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-
-static int reload_pipes[2];
-
-static void
-sigusr1_handler (int sig)
-{
- while (write (reload_pipes[1], "a", 1) != 1)
- ;
-}
-
-static gboolean
-reload_pipes_cb (GIOChannel *io,
- GIOCondition condition,
- gpointer data)
-{
- char a;
-
- while (read (reload_pipes[0], &a, 1) != 1)
- ;
-
- re_read_mountable_config ();
-
- return TRUE;
-}
-
-void
-mount_init (void)
-{
- DBusConnection *conn;
- DBusError error;
- struct sigaction sa;
- GIOChannel *io;
-
- read_mountable_config ();
-
- if (pipe (reload_pipes) != -1)
- {
- io = g_io_channel_unix_new (reload_pipes[0]);
- g_io_add_watch (io, G_IO_IN, reload_pipes_cb, NULL);
-
- sa.sa_handler = sigusr1_handler;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
- sigaction (SIGUSR1, &sa, NULL);
- }
-
- conn = dbus_bus_get (DBUS_BUS_SESSION, NULL);
-
- if (!dbus_connection_register_object_path (conn, G_VFS_DBUS_MOUNTTRACKER_PATH,
- &tracker_dbus_vtable, NULL))
- _g_dbus_oom ();
-
- if (!dbus_connection_add_filter (conn,
- mount_tracker_filter_func, NULL, NULL))
- _g_dbus_oom ();
-
-
- dbus_error_init (&error);
- dbus_bus_add_match (conn,
- "sender='org.freedesktop.DBus',"
- "interface='org.freedesktop.DBus',"
- "member='NameOwnerChanged'",
- &error);
- if (dbus_error_is_set (&error))
- {
- g_warning ("Failed to add dbus match: %s\n", error.message);
- dbus_error_free (&error);
- }
-}
-
diff --git a/daemon/mount.h b/daemon/mount.h
deleted file mode 100644
index ff244b5b..00000000
--- a/daemon/mount.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __MOUNT_H__
-#define __MOUNT_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <gmountsource.h>
-
-G_BEGIN_DECLS
-
-void mount_init (void);
-
-G_END_DECLS
-
-#endif /* __MOUNT_H__ */
-
diff --git a/daemon/network.mount.in b/daemon/network.mount.in
deleted file mode 100644
index 4e02907d..00000000
--- a/daemon/network.mount.in
+++ /dev/null
@@ -1,4 +0,0 @@
-[Mount]
-Type=network
-Exec=@libexecdir@/gvfsd-network
-AutoMount=true
diff --git a/daemon/obexftp-marshal.list b/daemon/obexftp-marshal.list
deleted file mode 100644
index 985a3218..00000000
--- a/daemon/obexftp-marshal.list
+++ /dev/null
@@ -1,2 +0,0 @@
-VOID:STRING,STRING
-VOID:STRING,STRING,UINT64
diff --git a/daemon/obexftp.mount.in b/daemon/obexftp.mount.in
deleted file mode 100644
index 96ade114..00000000
--- a/daemon/obexftp.mount.in
+++ /dev/null
@@ -1,4 +0,0 @@
-[Mount]
-Type=obex
-Exec=@libexecdir@/gvfsd-obexftp
-AutoMount=false
diff --git a/daemon/pty_open.c b/daemon/pty_open.c
deleted file mode 100644
index 6f6d83e8..00000000
--- a/daemon/pty_open.c
+++ /dev/null
@@ -1,843 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-/*
- * Copyright (C) 2001,2002,2004 Red Hat, Inc.
- *
- * This is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Library General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/* Originally from vte */
-
-#include "config.h"
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <sys/uio.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#ifdef HAVE_SYS_UN_H
-#include <sys/un.h>
-#endif
-#ifdef HAVE_STROPTS_H
-#include <stropts.h>
-#endif
-#ifdef HAVE_TERMIOS_H
-#include <termios.h>
-#endif
-#ifdef HAVE_UTMP_H
-#include <utmp.h>
-#endif
-#ifdef HAVE_UTIL_H
-#include <util.h>
-#endif
-#include <glib.h>
-#include "pty_open.h"
-
-int _pty_set_size(int master, int columns, int rows);
-
-/* Solaris does not have the login_tty() function so implement locally. */
-#ifndef HAVE_LOGIN_TTY
-static int login_tty(int pts)
-{
-#if defined(HAVE_STROPTS_H)
- /* push a terminal onto stream head */
- if (ioctl(pts, I_PUSH, "ptem") == -1) return -1;
- if (ioctl(pts, I_PUSH, "ldterm") == -1) return -1;
-#endif
- setsid();
-#if defined(TIOCSCTTY)
- ioctl(pts, TIOCSCTTY, 0);
-#endif
- dup2(pts, 0);
- dup2(pts, 1);
- dup2(pts, 2);
- if (pts > 2) close(pts);
- return 0;
-}
-#endif
-
-/* Reset the handlers for all known signals to their defaults. The parent
- * (or one of the libraries it links to) may have changed one to be ignored. */
-static void
-_pty_reset_signal_handlers(void)
-{
- signal(SIGHUP, SIG_DFL);
- signal(SIGINT, SIG_DFL);
- signal(SIGILL, SIG_DFL);
- signal(SIGABRT, SIG_DFL);
- signal(SIGFPE, SIG_DFL);
- signal(SIGKILL, SIG_DFL);
- signal(SIGSEGV, SIG_DFL);
- signal(SIGPIPE, SIG_DFL);
- signal(SIGALRM, SIG_DFL);
- signal(SIGTERM, SIG_DFL);
- signal(SIGCHLD, SIG_DFL);
- signal(SIGCONT, SIG_DFL);
- signal(SIGSTOP, SIG_DFL);
- signal(SIGTSTP, SIG_DFL);
- signal(SIGTTIN, SIG_DFL);
- signal(SIGTTOU, SIG_DFL);
-#ifdef SIGBUS
- signal(SIGBUS, SIG_DFL);
-#endif
-#ifdef SIGPOLL
- signal(SIGPOLL, SIG_DFL);
-#endif
-#ifdef SIGPROF
- signal(SIGPROF, SIG_DFL);
-#endif
-#ifdef SIGSYS
- signal(SIGSYS, SIG_DFL);
-#endif
-#ifdef SIGTRAP
- signal(SIGTRAP, SIG_DFL);
-#endif
-#ifdef SIGURG
- signal(SIGURG, SIG_DFL);
-#endif
-#ifdef SIGVTALARM
- signal(SIGVTALARM, SIG_DFL);
-#endif
-#ifdef SIGXCPU
- signal(SIGXCPU, SIG_DFL);
-#endif
-#ifdef SIGXFSZ
- signal(SIGXFSZ, SIG_DFL);
-#endif
-#ifdef SIGIOT
- signal(SIGIOT, SIG_DFL);
-#endif
-#ifdef SIGEMT
- signal(SIGEMT, SIG_DFL);
-#endif
-#ifdef SIGSTKFLT
- signal(SIGSTKFLT, SIG_DFL);
-#endif
-#ifdef SIGIO
- signal(SIGIO, SIG_DFL);
-#endif
-#ifdef SIGCLD
- signal(SIGCLD, SIG_DFL);
-#endif
-#ifdef SIGPWR
- signal(SIGPWR, SIG_DFL);
-#endif
-#ifdef SIGINFO
- signal(SIGINFO, SIG_DFL);
-#endif
-#ifdef SIGLOST
- signal(SIGLOST, SIG_DFL);
-#endif
-#ifdef SIGWINCH
- signal(SIGWINCH, SIG_DFL);
-#endif
-#ifdef SIGUNUSED
- signal(SIGUNUSED, SIG_DFL);
-#endif
-}
-
-#ifdef HAVE_SOCKETPAIR
-static int
-_pty_pipe_open(int *a, int *b)
-{
- int p[2], ret = -1;
-#ifdef PF_UNIX
-#ifdef SOCK_STREAM
- ret = socketpair(PF_UNIX, SOCK_STREAM, 0, p);
-#else
-#ifdef SOCK_DGRAM
- ret = socketpair(PF_UNIX, SOCK_DGRAM, 0, p);
-#endif
-#endif
- if (ret == 0) {
- *a = p[0];
- *b = p[1];
- return 0;
- }
-#endif
- return ret;
-}
-#else
-static int
-_pty_pipe_open(int *a, int *b)
-{
- int p[2], ret = -1;
-
- ret = pipe(p);
-
- if (ret == 0) {
- *a = p[0];
- *b = p[1];
- }
- return ret;
-}
-#endif
-
-static int
-_pty_pipe_open_bi(int *a, int *b, int *c, int *d)
-{
- int ret;
- ret = _pty_pipe_open(a, b);
- if (ret != 0) {
- return ret;
- }
- ret = _pty_pipe_open(c, d);
- if (ret != 0) {
- close(*a);
- close(*b);
- }
- return ret;
-}
-
-/* Like read, but hide EINTR and EAGAIN. */
-static ssize_t
-n_read(int fd, void *buffer, size_t count)
-{
- size_t n = 0;
- char *buf = buffer;
- int i;
- while (n < count) {
- i = read(fd, buf + n, count - n);
- switch (i) {
- case 0:
- return n;
- break;
- case -1:
- switch (errno) {
- case EINTR:
- case EAGAIN:
-#ifdef ERESTART
- case ERESTART:
-#endif
- break;
- default:
- return -1;
- }
- break;
- default:
- n += i;
- break;
- }
- }
- return n;
-}
-
-/* Like write, but hide EINTR and EAGAIN. */
-static ssize_t
-n_write(int fd, const void *buffer, size_t count)
-{
- size_t n = 0;
- const char *buf = buffer;
- int i;
- while (n < count) {
- i = write(fd, buf + n, count - n);
- switch (i) {
- case 0:
- return n;
- break;
- case -1:
- switch (errno) {
- case EINTR:
- case EAGAIN:
-#ifdef ERESTART
- case ERESTART:
-#endif
- break;
- default:
- return -1;
- }
- break;
- default:
- n += i;
- break;
- }
- }
- return n;
-}
-
-/* Run the given command (if specified), using the given descriptor as the
- * controlling terminal. */
-static int
-_pty_run_on_pty(int fd, gboolean login,
- int stdin_fd, int stdout_fd, int stderr_fd,
- int ready_reader, int ready_writer,
- char **env_add, const char *command, char **argv,
- const char *directory)
-{
- int i;
- char c;
- char **args, *arg;
-
-#ifdef HAVE_STROPTS_H
- if (!ioctl (fd, I_FIND, "ptem") && ioctl (fd, I_PUSH, "ptem") == -1) {
- close (fd);
- _exit (0);
- return -1;
- }
-
- if (!ioctl (fd, I_FIND, "ldterm") && ioctl (fd, I_PUSH, "ldterm") == -1) {
- close (fd);
- _exit (0);
- return -1;
- }
-
- if (!ioctl (fd, I_FIND, "ttcompat") && ioctl (fd, I_PUSH, "ttcompat") == -1) {
- perror ("ioctl (fd, I_PUSH, \"ttcompat\")");
- close (fd);
- _exit (0);
- return -1;
- }
-#endif /* HAVE_STROPTS_H */
-
- /* Set any environment variables. */
- for (i = 0; (env_add != NULL) && (env_add[i] != NULL); i++) {
- if (putenv(g_strdup(env_add[i])) != 0) {
- g_warning("Error adding `%s' to environment, "
- "continuing.", env_add[i]);
- }
- }
-
- /* Reset our signals -- our parent may have done any number of
- * weird things to them. */
- _pty_reset_signal_handlers();
-
- /* Change to the requested directory. */
- if (directory != NULL) {
- chdir(directory);
- }
-
-#ifdef HAVE_UTMP_H
- /* This sets stdin, stdout, stderr to the socket */
- if (login && login_tty (fd) == -1) {
- g_printerr ("mount child process login_tty failed: %s\n", g_strerror (errno));
- return -1;
- }
-#endif
-
- /* Signal to the parent that we've finished setting things up by
- * sending an arbitrary byte over the status pipe and waiting for
- * a response. This synchronization step ensures that the pty is
- * fully initialized before the parent process attempts to do anything
- * with it, and is required on systems where additional setup, beyond
- * merely opening the device, is required. This is at least the case
- * on Solaris. */
- /* Initialize so valgrind doesn't complain */
- c = 0;
- n_write(ready_writer, &c, 1);
- fsync(ready_writer);
- n_read(ready_reader, &c, 1);
- close(ready_writer);
- if (ready_writer != ready_reader) {
- close(ready_reader);
- }
-
- /* If the caller provided a command, we can't go back, ever. */
- if (command != NULL) {
- /* Outta here. */
- if (argv != NULL) {
- for (i = 0; (argv[i] != NULL); i++) ;
- args = g_malloc0(sizeof(char*) * (i + 1));
- for (i = 0; (argv[i] != NULL); i++) {
- args[i] = g_strdup(argv[i]);
- }
- execvp(command, args);
- } else {
- arg = g_strdup(command);
- execlp(command, arg, NULL);
- }
-
- /* Avoid calling any atexit() code. */
- _exit(0);
- g_assert_not_reached();
- }
-
- return 0;
-}
-
-/* Open the named PTY slave, fork off a child (storing its PID in child),
- * and exec the named command in its own session as a process group leader */
-static int
-_pty_fork_on_pty_name(const char *path, int parent_fd, char **env_add,
- const char *command, char **argv,
- const char *directory,
- int columns, int rows,
- int *stdin_fd, int *stdout_fd, int *stderr_fd,
- pid_t *child, gboolean reapchild, gboolean login)
-{
- int fd, i;
- char c;
- int ready_a[2] = { 0, 0 };
- int ready_b[2] = { 0, 0 };
- pid_t pid, grandchild_pid;
- int pid_pipe[2];
- int stdin_pipe[2];
- int stdout_pipe[2];
- int stderr_pipe[2];
-
- /* Open pipes for synchronizing between parent and child. */
- if (_pty_pipe_open_bi(&ready_a[0], &ready_a[1],
- &ready_b[0], &ready_b[1]) == -1) {
- /* Error setting up pipes. Bail. */
- goto bail_ready;
- }
-
- if (reapchild && pipe(pid_pipe)) {
- /* Error setting up pipes. Bail. */
- goto bail_pid;
- }
-
- if (pipe(stdin_pipe)) {
- /* Error setting up pipes. Bail. */
- goto bail_stdin;
- }
- if (pipe(stdout_pipe)) {
- /* Error setting up pipes. Bail. */
- goto bail_stdout;
- }
- if (pipe(stderr_pipe)) {
- /* Error setting up pipes. Bail. */
- goto bail_stderr;
- }
-
- /* Start up a child. */
- pid = fork();
- switch (pid) {
- case -1:
- /* Error fork()ing. Bail. */
- *child = -1;
- return -1;
- break;
- case 0:
- /* Child. Close the parent's ends of the pipes. */
- close(ready_a[0]);
- close(ready_b[1]);
-
- close(stdin_pipe[1]);
- close(stdout_pipe[0]);
- close(stderr_pipe[0]);
-
- if(reapchild) {
- close(pid_pipe[0]);
-
- /* Fork a intermediate child. This is needed to not
- * produce zombies! */
- grandchild_pid = fork();
-
- if (grandchild_pid < 0) {
- /* Error during fork! */
- n_write (pid_pipe[1], &grandchild_pid,
- sizeof (grandchild_pid));
- _exit (1);
- } else if (grandchild_pid > 0) {
- /* Parent! (This is the actual intermediate child;
- * so write the pid to the parent and then exit */
- n_write (pid_pipe[1], &grandchild_pid,
- sizeof (grandchild_pid));
- close (pid_pipe[1]);
- _exit (0);
- }
-
- /* Start a new session and become process-group leader. */
- setsid();
- setpgid(0, 0);
- }
-
- /* Close most descriptors. */
- for (i = 0; i < sysconf(_SC_OPEN_MAX); i++) {
- if ((i != ready_b[0]) &&
- (i != ready_a[1]) &&
- (i != stdin_pipe[0]) &&
- (i != stdout_pipe[1]) &&
- (i != stderr_pipe[1])) {
- close(i);
- }
- }
-
- /* Set up stdin/out/err */
- dup2(stdin_pipe[0], STDIN_FILENO);
- close (stdin_pipe[0]);
- dup2(stdout_pipe[1], STDOUT_FILENO);
- close (stdout_pipe[1]);
- dup2(stderr_pipe[1], STDERR_FILENO);
- close (stderr_pipe[1]);
-
- /* Open the slave PTY, acquiring it as the controlling terminal
- * for this process and its children. */
- fd = open(path, O_RDWR);
- if (fd == -1) {
- return -1;
- }
-#ifdef TIOCSCTTY
- /* TIOCSCTTY is defined? Let's try that, too. */
- ioctl(fd, TIOCSCTTY, fd);
-#endif
- /* Store 0 as the "child"'s ID to indicate to the caller that
- * it is now the child. */
- *child = 0;
- return _pty_run_on_pty(fd, login,
- stdin_pipe[1], stdout_pipe[1], stderr_pipe[1],
- ready_b[0], ready_a[1],
- env_add, command, argv, directory);
- break;
- default:
- /* Parent. Close the child's ends of the pipes, do the ready
- * handshake, and return the child's PID. */
- close(ready_b[0]);
- close(ready_a[1]);
-
- close(stdin_pipe[0]);
- close(stdout_pipe[1]);
- close(stderr_pipe[1]);
-
- if (reapchild) {
- close(pid_pipe[1]);
-
- /* Reap the intermediate child */
- wait_again:
- if (waitpid (pid, NULL, 0) < 0) {
- if (errno == EINTR) {
- goto wait_again;
- } else if (errno == ECHILD) {
- ; /* NOOP! Child already reaped. */
- } else {
- g_warning ("waitpid() should not fail in pty-open.c");
- }
- }
-
- /*
- * Read the child pid from the pid_pipe
- * */
- if (n_read (pid_pipe[0], child, sizeof (pid_t))
- != sizeof (pid_t) || *child == -1) {
- g_warning ("Error while spanning child!");
- goto bail_fork;
- }
-
- close(pid_pipe[0]);
-
- } else {
- /* No intermediate child, simple */
- *child = pid;
- }
-
- /* Wait for the child to be ready, set the window size, then
- * signal that we're ready. We need to synchronize here to
- * avoid possible races when the child has to do more setup
- * of the terminal than just opening it. */
- n_read(ready_a[0], &c, 1);
- _pty_set_size(parent_fd, columns, rows);
- n_write(ready_b[1], &c, 1);
- close(ready_a[0]);
- close(ready_b[1]);
-
- *stdin_fd = stdin_pipe[1];
- *stdout_fd = stdout_pipe[0];
- *stderr_fd = stderr_pipe[0];
-
- return 0;
- break;
- }
- g_assert_not_reached();
- return -1;
-
- bail_fork:
- close(stderr_pipe[0]);
- close(stderr_pipe[1]);
- bail_stderr:
- close(stdout_pipe[0]);
- close(stdout_pipe[1]);
- bail_stdout:
- close(stdin_pipe[0]);
- close(stdin_pipe[1]);
- bail_stdin:
- if(reapchild) {
- close(pid_pipe[0]);
- close(pid_pipe[1]);
- }
- bail_pid:
- close(ready_a[0]);
- close(ready_a[1]);
- close(ready_b[0]);
- close(ready_b[1]);
- bail_ready:
- *child = -1;
- return -1;
-}
-
-/**
- * pty_set_size:
- * @master: the file descriptor of the pty master
- * @columns: the desired number of columns
- * @rows: the desired number of rows
- *
- * Attempts to resize the pseudo terminal's window size. If successful, the
- * OS kernel will send #SIGWINCH to the child process group.
- *
- * Returns: 0 on success, -1 on failure.
- */
-int
-_pty_set_size(int master, int columns, int rows)
-{
- struct winsize size;
- int ret;
- memset(&size, 0, sizeof(size));
- size.ws_row = rows ? rows : 24;
- size.ws_col = columns ? columns : 80;
- ret = ioctl(master, TIOCSWINSZ, &size);
- return ret;
-}
-
-
-static char *
-_pty_ptsname(int master)
-{
-#if defined(HAVE_PTSNAME_R)
- gsize len = 1024;
- char *buf = NULL;
- int i;
- do {
- buf = g_malloc0(len);
- i = ptsname_r(master, buf, len - 1);
- switch (i) {
- case 0:
- /* Return the allocated buffer with the name in it. */
- return buf;
- break;
- default:
- g_free(buf);
- buf = NULL;
- break;
- }
- len *= 2;
- } while ((i != 0) && (errno == ERANGE));
-#elif defined(HAVE_PTSNAME)
- char *p;
- if ((p = ptsname(master)) != NULL) {
- return g_strdup(p);
- }
-#elif defined(TIOCGPTN)
- int pty = 0;
- if (ioctl(master, TIOCGPTN, &pty) == 0) {
- return g_strdup_printf("/dev/pts/%d", pty);
- }
-#endif
- return NULL;
-}
-
-static int
-_pty_getpt(void)
-{
- int fd, flags;
-#ifdef HAVE_GETPT
- /* Call the system's function for allocating a pty. */
- fd = getpt();
-#elif defined(HAVE_POSIX_OPENPT)
- fd = posix_openpt(O_RDWR | O_NOCTTY);
-#else
- /* Try to allocate a pty by accessing the pty master multiplex. */
- fd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
- if ((fd == -1) && (errno == ENOENT)) {
- fd = open("/dev/ptc", O_RDWR | O_NOCTTY); /* AIX */
- }
-#endif
- /* Set it to blocking. */
- flags = fcntl(fd, F_GETFL);
- flags &= ~(O_NONBLOCK);
- fcntl(fd, F_SETFL, flags);
- return fd;
-}
-
-static int
-_pty_grantpt(int master)
-{
-#ifdef HAVE_GRANTPT
- return grantpt(master);
-#else
- return 0;
-#endif
-}
-
-static int
-_pty_unlockpt(int fd)
-{
-#ifdef HAVE_UNLOCKPT
- return unlockpt(fd);
-#elif defined(TIOCSPTLCK)
- int zero = 0;
- return ioctl(fd, TIOCSPTLCK, &zero);
-#else
- return -1;
-#endif
-}
-
-static int
-_pty_open_unix98(pid_t *child, guint flags, char **env_add,
- const char *command, char **argv,
- const char *directory, int columns, int rows,
- int *stdin_fd, int *stdout_fd, int *stderr_fd)
-{
- int fd;
- char *buf;
-
- /* Attempt to open the master. */
- fd = _pty_getpt();
- if (fd != -1) {
- /* Read the slave number and unlock it. */
- if (((buf = _pty_ptsname(fd)) == NULL) ||
- (_pty_grantpt(fd) != 0) ||
- (_pty_unlockpt(fd) != 0)) {
- close(fd);
- fd = -1;
- } else {
- /* Start up a child process with the given command. */
- if (_pty_fork_on_pty_name(buf, fd, env_add, command,
- argv, directory,
- columns, rows,
- stdin_fd, stdout_fd, stderr_fd,
- child,
- flags & PTY_REAP_CHILD,
- flags & PTY_LOGIN_TTY) != 0) {
- close(fd);
- fd = -1;
- }
- g_free(buf);
- }
- }
- return fd;
-}
-
-/**
- * pty_open:
- * @child: location to store the new process's ID
- * @env_add: a list of environment variables to add to the child's environment
- * @command: name of the binary to run
- * @argv: arguments to pass to @command
- * @directory: directory to start the new command in, or NULL
- * @columns: desired window columns
- * @rows: desired window rows
- * @lastlog: TRUE if the lastlog should be updated
- * @utmp: TRUE if the utmp or utmpx log should be updated
- * @wtmp: TRUE if the wtmp or wtmpx log should be updated
- *
- * Starts a new copy of @command running under a psuedo-terminal, optionally in
- * the supplied @directory, with window size set to @rows x @columns
- * and variables in @env_add added to its environment. If any combination of
- * @lastlog, @utmp, and @wtmp is set, then the session is logged in the
- * corresponding system files.
- *
- * Returns: an open file descriptor for the pty master, -1 on failure
- */
-int
-pty_open(pid_t *child, guint flags, char **env_add,
- const char *command, char **argv, const char *directory,
- int columns, int rows,
- int *stdin_fd, int *stdout_fd, int *stderr_fd)
-{
- int ret = -1;
- if (ret == -1) {
- ret = _pty_open_unix98(child, flags, env_add, command,
- argv, directory, columns, rows,
- stdin_fd, stdout_fd, stderr_fd);
- }
- return ret;
-}
-
-
-#ifdef PTY_MAIN
-int fd;
-
-static void
-sigchld_handler(int signum)
-{
-}
-
-int
-main(int argc, char **argv)
-{
- pid_t child = 0;
- char c;
- int ret;
- signal(SIGCHLD, sigchld_handler);
- fd = pty_open(&child, 0, NULL,
- (argc > 1) ? argv[1] : NULL,
- (argc > 1) ? argv + 1 : NULL,
- NULL,
- 0, 0,
- NULL, NULL, NULL);
- if (child == 0) {
- int i;
- for (i = 0; ; i++) {
- switch (i % 3) {
- case 0:
- case 1:
- fprintf(stdout, "%d\n", i);
- break;
- case 2:
- fprintf(stderr, "%d\n", i);
- break;
- default:
- g_assert_not_reached();
- break;
- }
- sleep(1);
- }
- }
- g_print("Child pid is %d.\n", (int)child);
- do {
- ret = n_read(fd, &c, 1);
- if (ret == 0) {
- break;
- }
- if ((ret == -1) && (errno != EAGAIN) && (errno != EINTR)) {
- break;
- }
- if (argc < 2) {
- n_write(STDOUT_FILENO, "[", 1);
- }
- n_write(STDOUT_FILENO, &c, 1);
- if (argc < 2) {
- n_write(STDOUT_FILENO, "]", 1);
- }
- } while (TRUE);
- return 0;
-}
-#endif
diff --git a/daemon/pty_open.h b/daemon/pty_open.h
deleted file mode 100644
index c9bc0862..00000000
--- a/daemon/pty_open.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-/*
- * Copyright (C) 2001,2002,2004 Red Hat, Inc.
- *
- * This is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Library General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef PTY_OPEN_H
-#define PTY_OPEN_H
-
-#include <sys/types.h>
-
-G_BEGIN_DECLS
-
-enum {
- PTY_REAP_CHILD = 1,
- PTY_LOGIN_TTY = 2
-};
-
-/* Start up the given binary (exact path, not interpreted at all) in a
- * pseudo-terminal of its own, returning the descriptor for the master
- * side of the PTY pair, logging the session to the specified files, and
- * storing the child's PID in the given argument. */
-int pty_open(pid_t *child, guint flags, char **env_add,
- const char *command, char **argv, const char *directory,
- int columns, int rows,
- int *stdin_fd, int *stdout_fd, int *stderr_fd);
-int pty_get_size(int master, int *columns, int *rows);
-
-G_END_DECLS
-
-#endif
diff --git a/daemon/sftp.h b/daemon/sftp.h
deleted file mode 100644
index 95edf8c7..00000000
--- a/daemon/sftp.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-/* From draft-ietf-secsh-filexfer-02.txt */
-
-/* version */
-#define SSH_FILEXFER_VERSION 3
-
-/* client to server */
-#define SSH_FXP_INIT 1
-#define SSH_FXP_OPEN 3
-#define SSH_FXP_CLOSE 4
-#define SSH_FXP_READ 5
-#define SSH_FXP_WRITE 6
-#define SSH_FXP_LSTAT 7
-#define SSH_FXP_STAT_VERSION_0 7
-#define SSH_FXP_FSTAT 8
-#define SSH_FXP_SETSTAT 9
-#define SSH_FXP_FSETSTAT 10
-#define SSH_FXP_OPENDIR 11
-#define SSH_FXP_READDIR 12
-#define SSH_FXP_REMOVE 13
-#define SSH_FXP_MKDIR 14
-#define SSH_FXP_RMDIR 15
-#define SSH_FXP_REALPATH 16
-#define SSH_FXP_STAT 17
-#define SSH_FXP_RENAME 18
-#define SSH_FXP_READLINK 19
-#define SSH_FXP_SYMLINK 20
-
-/* server to client */
-#define SSH_FXP_VERSION 2
-#define SSH_FXP_STATUS 101
-#define SSH_FXP_HANDLE 102
-#define SSH_FXP_DATA 103
-#define SSH_FXP_NAME 104
-#define SSH_FXP_ATTRS 105
-
-#define SSH_FXP_EXTENDED 200
-#define SSH_FXP_EXTENDED_REPLY 201
-
-/* attributes */
-#define SSH_FILEXFER_ATTR_SIZE 0x00000001
-#define SSH_FILEXFER_ATTR_UIDGID 0x00000002
-#define SSH_FILEXFER_ATTR_PERMISSIONS 0x00000004
-#define SSH_FILEXFER_ATTR_ACMODTIME 0x00000008
-#define SSH_FILEXFER_ATTR_EXTENDED 0x80000000
-
-/* portable open modes */
-#define SSH_FXF_READ 0x00000001
-#define SSH_FXF_WRITE 0x00000002
-#define SSH_FXF_APPEND 0x00000004
-#define SSH_FXF_CREAT 0x00000008
-#define SSH_FXF_TRUNC 0x00000010
-#define SSH_FXF_EXCL 0x00000020
-
-/* status messages */
-#define SSH_FX_OK 0
-#define SSH_FX_EOF 1
-#define SSH_FX_NO_SUCH_FILE 2
-#define SSH_FX_PERMISSION_DENIED 3
-#define SSH_FX_FAILURE 4
-#define SSH_FX_BAD_MESSAGE 5
-#define SSH_FX_NO_CONNECTION 6
-#define SSH_FX_CONNECTION_LOST 7
-#define SSH_FX_OP_UNSUPPORTED 8
-#define SSH_FX_MAX 8
-
diff --git a/daemon/sftp.mount.in b/daemon/sftp.mount.in
deleted file mode 100644
index 85257535..00000000
--- a/daemon/sftp.mount.in
+++ /dev/null
@@ -1,8 +0,0 @@
-[Mount]
-Type=sftp
-Exec=@libexecdir@/gvfsd-sftp
-AutoMount=false
-Scheme=sftp
-SchemeAliases=ssh
-DefaultPort=22
-HostnameIsInetAddress=true
diff --git a/daemon/smb-browse.mount.in b/daemon/smb-browse.mount.in
deleted file mode 100644
index 99428105..00000000
--- a/daemon/smb-browse.mount.in
+++ /dev/null
@@ -1,6 +0,0 @@
-[Mount]
-Type=smb-network;smb-server
-Exec=@libexecdir@/gvfsd-smb-browse
-DBusName=org.gtk.vfs.mountpoint.smb_browse
-AutoMount=true
-Scheme=smb
diff --git a/daemon/smb.mount.in b/daemon/smb.mount.in
deleted file mode 100644
index 7612af2a..00000000
--- a/daemon/smb.mount.in
+++ /dev/null
@@ -1,5 +0,0 @@
-[Mount]
-Type=smb-share
-Exec=@libexecdir@/gvfsd-smb
-AutoMount=false
-Scheme=smb
diff --git a/daemon/soup-input-stream.c b/daemon/soup-input-stream.c
deleted file mode 100644
index fd9cf8cf..00000000
--- a/daemon/soup-input-stream.c
+++ /dev/null
@@ -1,917 +0,0 @@
-/* soup-input-stream.c, based on gsocketinputstream.c
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-
-#include <libsoup/soup.h>
-
-#include "soup-input-stream.h"
-
-static void soup_input_stream_seekable_iface_init (GSeekableIface *seekable_iface);
-
-G_DEFINE_TYPE_WITH_CODE (SoupInputStream, soup_input_stream, G_TYPE_INPUT_STREAM,
- G_IMPLEMENT_INTERFACE (G_TYPE_SEEKABLE,
- soup_input_stream_seekable_iface_init))
-
-typedef void (*SoupInputStreamCallback) (GInputStream *);
-
-typedef struct {
- SoupSession *session;
- GMainContext *async_context;
- SoupMessage *msg;
- gboolean got_headers, finished;
- goffset offset;
-
- GCancellable *cancellable;
- GSource *cancel_watch;
- SoupInputStreamCallback got_headers_cb;
- SoupInputStreamCallback got_chunk_cb;
- SoupInputStreamCallback finished_cb;
- SoupInputStreamCallback cancelled_cb;
-
- guchar *leftover_buffer;
- gsize leftover_bufsize, leftover_offset;
-
- guchar *caller_buffer;
- gsize caller_bufsize, caller_nread;
- GAsyncReadyCallback outstanding_callback;
- GSimpleAsyncResult *result;
-
-} SoupInputStreamPrivate;
-#define SOUP_INPUT_STREAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SOUP_TYPE_INPUT_STREAM, SoupInputStreamPrivate))
-
-
-static gssize soup_input_stream_read (GInputStream *stream,
- void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error);
-static gboolean soup_input_stream_close (GInputStream *stream,
- GCancellable *cancellable,
- GError **error);
-static void soup_input_stream_read_async (GInputStream *stream,
- void *buffer,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data);
-static gssize soup_input_stream_read_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error);
-static void soup_input_stream_close_async (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data);
-static gboolean soup_input_stream_close_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error);
-
-static goffset soup_input_stream_tell (GSeekable *seekable);
-
-static gboolean soup_input_stream_can_seek (GSeekable *seekable);
-static gboolean soup_input_stream_seek (GSeekable *seekable,
- goffset offset,
- GSeekType type,
- GCancellable *cancellable,
- GError **error);
-
-static gboolean soup_input_stream_can_truncate (GSeekable *seekable);
-static gboolean soup_input_stream_truncate (GSeekable *seekable,
- goffset offset,
- GCancellable *cancellable,
- GError **error);
-
-static void soup_input_stream_got_headers (SoupMessage *msg, gpointer stream);
-static void soup_input_stream_got_chunk (SoupMessage *msg, SoupBuffer *chunk, gpointer stream);
-static void soup_input_stream_finished (SoupMessage *msg, gpointer stream);
-
-static void
-soup_input_stream_finalize (GObject *object)
-{
- SoupInputStream *stream = SOUP_INPUT_STREAM (object);
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- g_object_unref (priv->session);
-
- g_signal_handlers_disconnect_by_func (priv->msg, G_CALLBACK (soup_input_stream_got_headers), stream);
- g_signal_handlers_disconnect_by_func (priv->msg, G_CALLBACK (soup_input_stream_got_chunk), stream);
- g_signal_handlers_disconnect_by_func (priv->msg, G_CALLBACK (soup_input_stream_finished), stream);
- g_object_unref (priv->msg);
- g_free (priv->leftover_buffer);
-
- if (G_OBJECT_CLASS (soup_input_stream_parent_class)->finalize)
- (*G_OBJECT_CLASS (soup_input_stream_parent_class)->finalize) (object);
-}
-
-static void
-soup_input_stream_class_init (SoupInputStreamClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GInputStreamClass *stream_class = G_INPUT_STREAM_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (SoupInputStreamPrivate));
-
- gobject_class->finalize = soup_input_stream_finalize;
-
- stream_class->read_fn = soup_input_stream_read;
- stream_class->close_fn = soup_input_stream_close;
- stream_class->read_async = soup_input_stream_read_async;
- stream_class->read_finish = soup_input_stream_read_finish;
- stream_class->close_async = soup_input_stream_close_async;
- stream_class->close_finish = soup_input_stream_close_finish;
-}
-
-static void
-soup_input_stream_seekable_iface_init (GSeekableIface *seekable_iface)
-{
- seekable_iface->tell = soup_input_stream_tell;
- seekable_iface->can_seek = soup_input_stream_can_seek;
- seekable_iface->seek = soup_input_stream_seek;
- seekable_iface->can_truncate = soup_input_stream_can_truncate;
- seekable_iface->truncate_fn = soup_input_stream_truncate;
-}
-
-static void
-soup_input_stream_init (SoupInputStream *stream)
-{
- ;
-}
-
-static void
-soup_input_stream_queue_message (SoupInputStream *stream)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- priv->got_headers = priv->finished = FALSE;
-
- /* Add an extra ref since soup_session_queue_message steals one */
- g_object_ref (priv->msg);
- soup_session_queue_message (priv->session, priv->msg, NULL, NULL);
-}
-
-/**
- * soup_input_stream_new:
- * @session: the #SoupSession to use
- * @msg: the #SoupMessage whose response will be streamed
- *
- * Prepares to send @msg over @session, and returns a #GInputStream
- * that can be used to read the response.
- *
- * @msg may not be sent until the first read call; if you need to look
- * at the status code or response headers before reading the body, you
- * can use soup_input_stream_send() or soup_input_stream_send_async()
- * to force the message to be sent and the response headers read.
- *
- * If @msg gets a non-2xx result, the first read (or send) will return
- * an error with type %SOUP_INPUT_STREAM_HTTP_ERROR.
- *
- * Internally, #SoupInputStream is implemented using asynchronous I/O,
- * so if you are using the synchronous API (eg,
- * g_input_stream_read()), you should create a new #GMainContext and
- * set it as the %SOUP_SESSION_ASYNC_CONTEXT property on @session. (If
- * you don't, then synchronous #GInputStream calls will cause the main
- * loop to be run recursively.) The async #GInputStream API works fine
- * with %SOUP_SESSION_ASYNC_CONTEXT either set or unset.
- *
- * Returns: a new #GInputStream.
- **/
-GInputStream *
-soup_input_stream_new (SoupSession *session, SoupMessage *msg)
-{
- SoupInputStream *stream;
- SoupInputStreamPrivate *priv;
-
- g_return_val_if_fail (SOUP_IS_MESSAGE (msg), NULL);
-
- stream = g_object_new (SOUP_TYPE_INPUT_STREAM, NULL);
- priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- priv->session = g_object_ref (session);
- priv->async_context = soup_session_get_async_context (session);
- priv->msg = g_object_ref (msg);
-
- g_signal_connect (msg, "got_headers",
- G_CALLBACK (soup_input_stream_got_headers), stream);
- g_signal_connect (msg, "got_chunk",
- G_CALLBACK (soup_input_stream_got_chunk), stream);
- g_signal_connect (msg, "finished",
- G_CALLBACK (soup_input_stream_finished), stream);
-
- soup_input_stream_queue_message (stream);
- return G_INPUT_STREAM (stream);
-}
-
-static void
-soup_input_stream_got_headers (SoupMessage *msg, gpointer stream)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- /* If the status is unsuccessful, we just ignore the signal and let
- * libsoup keep going (eventually either it will requeue the request
- * (after handling authentication/redirection), or else the
- * "finished" handler will run).
- */
- if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
- return;
-
- priv->got_headers = TRUE;
- if (!priv->caller_buffer)
- {
- /* Not ready to read the body yet */
- soup_session_pause_message (priv->session, msg);
- }
-
- if (priv->got_headers_cb)
- priv->got_headers_cb (stream);
-}
-
-static void
-soup_input_stream_got_chunk (SoupMessage *msg, SoupBuffer *chunk_buffer,
- gpointer stream)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
- const gchar *chunk = chunk_buffer->data;
- gsize chunk_size = chunk_buffer->length;
-
- /* We only pay attention to the chunk if it's part of a successful
- * response.
- */
- if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
- return;
-
- /* Sanity check */
- if (priv->caller_bufsize == 0 || priv->leftover_bufsize != 0)
- g_warning ("soup_input_stream_got_chunk called again before previous chunk was processed");
-
- /* Copy what we can into priv->caller_buffer */
- if (priv->caller_bufsize - priv->caller_nread > 0)
- {
- gsize nread = MIN (chunk_size, priv->caller_bufsize - priv->caller_nread);
-
- memcpy (priv->caller_buffer + priv->caller_nread, chunk, nread);
- priv->caller_nread += nread;
- priv->offset += nread;
- chunk += nread;
- chunk_size -= nread;
- }
-
- if (chunk_size > 0)
- {
- /* Copy the rest into priv->leftover_buffer. If there's already
- * some data there, realloc and append. Otherwise just copy.
- */
- if (priv->leftover_bufsize)
- {
- priv->leftover_buffer = g_realloc (priv->leftover_buffer,
- priv->leftover_bufsize + chunk_size);
- memcpy (priv->leftover_buffer + priv->leftover_bufsize,
- chunk, chunk_size);
- priv->leftover_bufsize += chunk_size;
- }
- else
- {
- priv->leftover_bufsize = chunk_size;
- priv->leftover_buffer = g_memdup (chunk, chunk_size);
- priv->leftover_offset = 0;
- }
- }
-
- soup_session_pause_message (priv->session, msg);
- if (priv->got_chunk_cb)
- priv->got_chunk_cb (stream);
-}
-
-static void
-soup_input_stream_finished (SoupMessage *msg, gpointer stream)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- priv->finished = TRUE;
-
- if (priv->finished_cb)
- priv->finished_cb (stream);
-}
-
-static gboolean
-soup_input_stream_cancelled (GIOChannel *chan, GIOCondition condition,
- gpointer stream)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- priv->cancel_watch = NULL;
-
- soup_session_pause_message (priv->session, priv->msg);
- if (priv->cancelled_cb)
- priv->cancelled_cb (stream);
-
- return FALSE;
-}
-
-static void
-soup_input_stream_prepare_for_io (GInputStream *stream,
- GCancellable *cancellable,
- guchar *buffer,
- gsize count)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
- int cancel_fd;
-
- priv->cancellable = cancellable;
- cancel_fd = g_cancellable_get_fd (cancellable);
- if (cancel_fd != -1)
- {
- GIOChannel *chan = g_io_channel_unix_new (cancel_fd);
- priv->cancel_watch = soup_add_io_watch (priv->async_context, chan,
- G_IO_IN | G_IO_ERR | G_IO_HUP,
- soup_input_stream_cancelled,
- stream);
- g_io_channel_unref (chan);
- }
-
- priv->caller_buffer = buffer;
- priv->caller_bufsize = count;
- priv->caller_nread = 0;
-
- if (priv->got_headers)
- soup_session_unpause_message (priv->session, priv->msg);
-}
-
-static void
-soup_input_stream_done_io (GInputStream *stream)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- if (priv->cancel_watch)
- {
- g_source_destroy (priv->cancel_watch);
- priv->cancel_watch = NULL;
- }
- priv->cancellable = NULL;
-
- priv->caller_buffer = NULL;
- priv->caller_bufsize = 0;
-}
-
-static gboolean
-set_error_if_http_failed (SoupMessage *msg, GError **error)
-{
- if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
- {
- g_set_error_literal (error, SOUP_HTTP_ERROR,
- msg->status_code, msg->reason_phrase);
- return TRUE;
- }
- return FALSE;
-}
-
-static gsize
-read_from_leftover (SoupInputStreamPrivate *priv,
- gpointer buffer, gsize bufsize)
-{
- gsize nread;
-
- if (priv->leftover_bufsize - priv->leftover_offset <= bufsize)
- {
- nread = priv->leftover_bufsize - priv->leftover_offset;
- memcpy (buffer, priv->leftover_buffer + priv->leftover_offset, nread);
-
- g_free (priv->leftover_buffer);
- priv->leftover_buffer = NULL;
- priv->leftover_bufsize = priv->leftover_offset = 0;
- }
- else
- {
- nread = bufsize;
- memcpy (buffer, priv->leftover_buffer + priv->leftover_offset, nread);
- priv->leftover_offset += nread;
- }
-
- priv->offset += nread;
- return nread;
-}
-
-/* This does the work of soup_input_stream_send(), assuming that the
- * GInputStream pending flag has already been set. It is also used by
- * soup_input_stream_send_async() in some circumstances.
- */
-static gboolean
-soup_input_stream_send_internal (GInputStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- soup_input_stream_prepare_for_io (stream, cancellable, NULL, 0);
- while (!priv->finished && !priv->got_headers &&
- !g_cancellable_is_cancelled (cancellable))
- g_main_context_iteration (priv->async_context, TRUE);
- soup_input_stream_done_io (stream);
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return FALSE;
- else if (set_error_if_http_failed (priv->msg, error))
- return FALSE;
- return TRUE;
-}
-
-/**
- * soup_input_stream_send:
- * @stream: a #SoupInputStream
- * @cancellable: optional #GCancellable object, %NULL to ignore.
- * @error: location to store the error occuring, or %NULL to ignore
- *
- * Synchronously sends the HTTP request associated with @stream, and
- * reads the response headers. Call this after soup_input_stream_new()
- * and before the first g_input_stream_read() if you want to check the
- * HTTP status code before you start reading.
- *
- * Return value: %TRUE if msg has a successful (2xx) status, %FALSE if
- * not.
- **/
-gboolean
-soup_input_stream_send (GInputStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- gboolean result;
-
- g_return_val_if_fail (SOUP_IS_INPUT_STREAM (stream), FALSE);
-
- if (!g_input_stream_set_pending (stream, error))
- return FALSE;
- result = soup_input_stream_send_internal (stream, cancellable, error);
- g_input_stream_clear_pending (stream);
-
- return result;
-}
-
-static gssize
-soup_input_stream_read (GInputStream *stream,
- void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- if (priv->finished)
- return 0;
-
- /* If there is data leftover from a previous read, return it. */
- if (priv->leftover_bufsize)
- return read_from_leftover (priv, buffer, count);
-
- /* No leftover data, accept one chunk from the network */
- soup_input_stream_prepare_for_io (stream, cancellable, buffer, count);
- while (!priv->finished && priv->caller_nread == 0 &&
- !g_cancellable_is_cancelled (cancellable))
- g_main_context_iteration (priv->async_context, TRUE);
- soup_input_stream_done_io (stream);
-
- if (priv->caller_nread > 0)
- return priv->caller_nread;
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return -1;
- else if (set_error_if_http_failed (priv->msg, error))
- return -1;
- else
- return 0;
-}
-
-static gboolean
-soup_input_stream_close (GInputStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- if (!priv->finished)
- soup_session_cancel_message (priv->session, priv->msg, SOUP_STATUS_CANCELLED);
-
- return TRUE;
-}
-
-static void
-wrapper_callback (GObject *source_object, GAsyncResult *res,
- gpointer user_data)
-{
- GInputStream *stream = G_INPUT_STREAM (source_object);
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- g_input_stream_clear_pending (stream);
- if (priv->outstanding_callback)
- (*priv->outstanding_callback) (source_object, res, user_data);
- priv->outstanding_callback = NULL;
- g_object_unref (stream);
-}
-
-static void
-send_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
-{
- GError *error = NULL;
- gboolean success;
-
- success = soup_input_stream_send_internal (G_INPUT_STREAM (object),
- cancellable, &error);
- g_simple_async_result_set_op_res_gboolean (res, success);
- if (error)
- {
- g_simple_async_result_set_from_error (res, error);
- g_error_free (error);
- }
-}
-
-static void
-soup_input_stream_send_async_in_thread (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *res;
-
- res = g_simple_async_result_new (G_OBJECT (stream), callback, user_data,
- soup_input_stream_send_async_in_thread);
- g_simple_async_result_run_in_thread (res, send_async_thread,
- io_priority, cancellable);
- g_object_unref (res);
-}
-
-static void
-send_async_finished (GInputStream *stream)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
- GSimpleAsyncResult *result;
- GError *error = NULL;
-
- if (!g_cancellable_set_error_if_cancelled (priv->cancellable, &error))
- set_error_if_http_failed (priv->msg, &error);
-
- priv->got_headers_cb = NULL;
- priv->finished_cb = NULL;
- soup_input_stream_done_io (stream);
-
- result = priv->result;
- priv->result = NULL;
-
- g_simple_async_result_set_op_res_gboolean (result, error == NULL);
- if (error)
- {
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- }
- g_simple_async_result_complete (result);
-}
-
-static void
-soup_input_stream_send_async_internal (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
-
- g_object_ref (stream);
- priv->outstanding_callback = callback;
-
- /* If the session uses the default GMainContext, then we can do
- * async I/O directly. But if it has its own main context, it's
- * easier to just run it in another thread.
- */
- if (soup_session_get_async_context (priv->session))
- {
- soup_input_stream_send_async_in_thread (stream, io_priority, cancellable,
- wrapper_callback, user_data);
- return;
- }
-
- priv->got_headers_cb = send_async_finished;
- priv->finished_cb = send_async_finished;
-
- soup_input_stream_prepare_for_io (stream, cancellable, NULL, 0);
- priv->result = g_simple_async_result_new (G_OBJECT (stream),
- wrapper_callback, user_data,
- soup_input_stream_send_async);
-}
-
-/**
- * soup_input_stream_send_async:
- * @stream: a #SoupInputStream
- * @io_priority: the io priority of the request.
- * @cancellable: optional #GCancellable object, %NULL to ignore.
- * @callback: callback to call when the request is satisfied
- * @user_data: the data to pass to callback function
- *
- * Asynchronously sends the HTTP request associated with @stream, and
- * reads the response headers. Call this after soup_input_stream_new()
- * and before the first g_input_stream_read_async() if you want to
- * check the HTTP status code before you start reading.
- **/
-void
-soup_input_stream_send_async (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GError *error = NULL;
-
- g_return_if_fail (SOUP_IS_INPUT_STREAM (stream));
-
- if (!g_input_stream_set_pending (stream, &error))
- {
- g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
- callback,
- user_data,
- error);
- g_error_free (error);
- return;
- }
- soup_input_stream_send_async_internal (stream, io_priority, cancellable,
- callback, user_data);
-}
-
-/**
- * soup_input_stream_send_finish:
- * @stream: a #SoupInputStream
- * @result: a #GAsyncResult.
- * @error: a #GError location to store the error occuring, or %NULL to
- * ignore.
- *
- * Finishes a soup_input_stream_send_async() operation.
- *
- * Return value: %TRUE if the message was sent successfully and
- * received a successful status code, %FALSE if not.
- **/
-gboolean
-soup_input_stream_send_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple;
-
- g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
- g_return_val_if_fail (g_simple_async_result_get_source_tag (simple) == soup_input_stream_send_async, FALSE);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return FALSE;
-
- return g_simple_async_result_get_op_res_gboolean (simple);
-}
-
-static void
-read_async_done (GInputStream *stream)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
- GSimpleAsyncResult *result;
- GError *error = NULL;
-
- result = priv->result;
- priv->result = NULL;
-
- if (g_cancellable_set_error_if_cancelled (priv->cancellable, &error) ||
- set_error_if_http_failed (priv->msg, &error))
- {
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- }
- else
- g_simple_async_result_set_op_res_gssize (result, priv->caller_nread);
-
- priv->got_chunk_cb = NULL;
- priv->finished_cb = NULL;
- priv->cancelled_cb = NULL;
- soup_input_stream_done_io (stream);
-
- g_simple_async_result_complete (result);
-}
-
-static void
-soup_input_stream_read_async (GInputStream *stream,
- void *buffer,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
- GSimpleAsyncResult *result;
-
- /* If the session uses the default GMainContext, then we can do
- * async I/O directly. But if it has its own main context, we fall
- * back to the async-via-sync-in-another-thread implementation.
- */
- if (soup_session_get_async_context (priv->session))
- {
- G_INPUT_STREAM_CLASS (soup_input_stream_parent_class)->
- read_async (stream, buffer, count, io_priority,
- cancellable, callback, user_data);
- return;
- }
-
- result = g_simple_async_result_new (G_OBJECT (stream),
- callback, user_data,
- soup_input_stream_read_async);
-
- if (priv->finished)
- {
- g_simple_async_result_set_op_res_gssize (result, 0);
- g_simple_async_result_complete_in_idle (result);
- return;
- }
-
- if (priv->leftover_bufsize)
- {
- gsize nread = read_from_leftover (priv, buffer, count);
- g_simple_async_result_set_op_res_gssize (result, nread);
- g_simple_async_result_complete_in_idle (result);
- return;
- }
-
- priv->result = result;
-
- priv->got_chunk_cb = read_async_done;
- priv->finished_cb = read_async_done;
- priv->cancelled_cb = read_async_done;
- soup_input_stream_prepare_for_io (stream, cancellable, buffer, count);
-}
-
-static gssize
-soup_input_stream_read_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple;
-
- g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), -1);
- simple = G_SIMPLE_ASYNC_RESULT (result);
- g_return_val_if_fail (g_simple_async_result_get_source_tag (simple) == soup_input_stream_read_async, -1);
-
- return g_simple_async_result_get_op_res_gssize (simple);
-}
-
-static void
-soup_input_stream_close_async (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *result;
- gboolean success;
- GError *error = NULL;
-
- result = g_simple_async_result_new (G_OBJECT (stream),
- callback, user_data,
- soup_input_stream_close_async);
- success = soup_input_stream_close (stream, cancellable, &error);
- g_simple_async_result_set_op_res_gboolean (result, success);
- if (error)
- {
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- }
-
- g_simple_async_result_complete_in_idle (result);
-}
-
-static gboolean
-soup_input_stream_close_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- /* Failures handled in generic close_finish code */
- return TRUE;
-}
-
-static goffset
-soup_input_stream_tell (GSeekable *seekable)
-{
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (seekable);
-
- return priv->offset;
-}
-
-static gboolean
-soup_input_stream_can_seek (GSeekable *seekable)
-{
- return TRUE;
-}
-
-extern void soup_message_io_cleanup (SoupMessage *msg);
-
-static gboolean
-soup_input_stream_seek (GSeekable *seekable,
- goffset offset,
- GSeekType type,
- GCancellable *cancellable,
- GError **error)
-{
- GInputStream *stream = G_INPUT_STREAM (seekable);
- SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (seekable);
- char *range;
-
- if (type == G_SEEK_END)
- {
- /* FIXME: we could send "bytes=-offset", but unless we know the
- * Content-Length, we wouldn't be able to answer a tell() properly.
- * We could find the Content-Length by doing a HEAD...
- */
-
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- "G_SEEK_END not currently supported");
- return FALSE;
- }
-
- if (!g_input_stream_set_pending (stream, error))
- return FALSE;
-
- soup_session_cancel_message (priv->session, priv->msg, SOUP_STATUS_CANCELLED);
- soup_message_io_cleanup (priv->msg);
-
- switch (type)
- {
- case G_SEEK_CUR:
- offset += priv->offset;
- /* fall through */
-
- case G_SEEK_SET:
- range = g_strdup_printf ("bytes=%"G_GUINT64_FORMAT"-", (guint64)offset);
- priv->offset = offset;
- break;
-
- case G_SEEK_END:
- range = NULL; /* keep compilers happy */
- g_return_val_if_reached (FALSE);
- break;
-
- default:
- g_return_val_if_reached (FALSE);
- }
-
- soup_message_headers_remove (priv->msg->request_headers, "Range");
- soup_message_headers_append (priv->msg->request_headers, "Range", range);
- g_free (range);
-
- soup_input_stream_queue_message (SOUP_INPUT_STREAM (stream));
-
- g_input_stream_clear_pending (stream);
- return TRUE;
-}
-
-static gboolean
-soup_input_stream_can_truncate (GSeekable *seekable)
-{
- return FALSE;
-}
-
-static gboolean
-soup_input_stream_truncate (GSeekable *seekable,
- goffset offset,
- GCancellable *cancellable,
- GError **error)
-{
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- "Truncate not allowed on input stream");
- return FALSE;
-}
-
-GQuark
-soup_http_error_quark (void)
-{
- static GQuark error;
- if (!error)
- error = g_quark_from_static_string ("soup_http_error_quark");
- return error;
-}
diff --git a/daemon/soup-input-stream.h b/daemon/soup-input-stream.h
deleted file mode 100644
index dd2c5402..00000000
--- a/daemon/soup-input-stream.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __SOUP_INPUT_STREAM_H__
-#define __SOUP_INPUT_STREAM_H__
-
-#include <gio/gio.h>
-#include <libsoup/soup-types.h>
-
-G_BEGIN_DECLS
-
-#define SOUP_TYPE_INPUT_STREAM (soup_input_stream_get_type ())
-#define SOUP_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SOUP_TYPE_INPUT_STREAM, SoupInputStream))
-#define SOUP_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SOUP_TYPE_INPUT_STREAM, SoupInputStreamClass))
-#define SOUP_IS_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SOUP_TYPE_INPUT_STREAM))
-#define SOUP_IS_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SOUP_TYPE_INPUT_STREAM))
-#define SOUP_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SOUP_TYPE_INPUT_STREAM, SoupInputStreamClass))
-
-typedef struct SoupInputStream SoupInputStream;
-typedef struct SoupInputStreamClass SoupInputStreamClass;
-
-struct SoupInputStream
-{
- GInputStream parent;
-
-};
-
-struct SoupInputStreamClass
-{
- GInputStreamClass parent_class;
-
- /* Padding for future expansion */
- void (*_g_reserved1) (void);
- void (*_g_reserved2) (void);
- void (*_g_reserved3) (void);
- void (*_g_reserved4) (void);
- void (*_g_reserved5) (void);
-};
-
-GType soup_input_stream_get_type (void) G_GNUC_CONST;
-
-GInputStream *soup_input_stream_new (SoupSession *session,
- SoupMessage *msg);
-
-gboolean soup_input_stream_send (GInputStream *stream,
- GCancellable *cancellable,
- GError **error);
-
-void soup_input_stream_send_async (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-gboolean soup_input_stream_send_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error);
-
-#define SOUP_HTTP_ERROR soup_http_error_quark()
-GQuark soup_http_error_quark (void);
-
-G_END_DECLS
-
-#endif /* __SOUP_INPUT_STREAM_H__ */
diff --git a/daemon/soup-output-stream.c b/daemon/soup-output-stream.c
deleted file mode 100644
index 86ff8a43..00000000
--- a/daemon/soup-output-stream.c
+++ /dev/null
@@ -1,417 +0,0 @@
-/* soup-output-stream.c, based on gunixoutputstream.c
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-
-#include <libsoup/soup.h>
-
-#include "soup-output-stream.h"
-#include "soup-input-stream.h"
-
-G_DEFINE_TYPE (SoupOutputStream, soup_output_stream, G_TYPE_OUTPUT_STREAM)
-
-typedef void (*SoupOutputStreamCallback) (GOutputStream *);
-
-typedef struct {
- SoupSession *session;
- GMainContext *async_context;
- SoupMessage *msg;
- gboolean finished;
-
- goffset size, offset;
- GByteArray *ba;
-
- GCancellable *cancellable;
- GSource *cancel_watch;
- SoupOutputStreamCallback finished_cb;
- SoupOutputStreamCallback cancelled_cb;
-
- GSimpleAsyncResult *result;
-} SoupOutputStreamPrivate;
-#define SOUP_OUTPUT_STREAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SOUP_TYPE_OUTPUT_STREAM, SoupOutputStreamPrivate))
-
-static gssize soup_output_stream_write (GOutputStream *stream,
- const void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error);
-static gboolean soup_output_stream_close (GOutputStream *stream,
- GCancellable *cancellable,
- GError **error);
-static void soup_output_stream_write_async (GOutputStream *stream,
- const void *buffer,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data);
-static gssize soup_output_stream_write_finish (GOutputStream *stream,
- GAsyncResult *result,
- GError **error);
-static void soup_output_stream_close_async (GOutputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data);
-static gboolean soup_output_stream_close_finish (GOutputStream *stream,
- GAsyncResult *result,
- GError **error);
-
-static void soup_output_stream_finished (SoupMessage *msg, gpointer stream);
-
-static void
-soup_output_stream_finalize (GObject *object)
-{
- SoupOutputStreamPrivate *priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (object);
-
- g_object_unref (priv->session);
-
- g_signal_handlers_disconnect_by_func (priv->msg, G_CALLBACK (soup_output_stream_finished), object);
- g_object_unref (priv->msg);
-
- if (priv->ba)
- g_byte_array_free (priv->ba, TRUE);
-
- if (G_OBJECT_CLASS (soup_output_stream_parent_class)->finalize)
- (*G_OBJECT_CLASS (soup_output_stream_parent_class)->finalize) (object);
-}
-
-static void
-soup_output_stream_class_init (SoupOutputStreamClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GOutputStreamClass *stream_class = G_OUTPUT_STREAM_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (SoupOutputStreamPrivate));
-
- gobject_class->finalize = soup_output_stream_finalize;
-
- stream_class->write_fn = soup_output_stream_write;
- stream_class->close_fn = soup_output_stream_close;
- stream_class->write_async = soup_output_stream_write_async;
- stream_class->write_finish = soup_output_stream_write_finish;
- stream_class->close_async = soup_output_stream_close_async;
- stream_class->close_finish = soup_output_stream_close_finish;
-}
-
-static void
-soup_output_stream_init (SoupOutputStream *stream)
-{
- SoupOutputStreamPrivate *priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (stream);
-
- priv->ba = g_byte_array_new ();
-}
-
-
-/**
- * soup_output_stream_new:
- * @session: the #SoupSession to use
- * @msg: the #SoupMessage whose request will be streamed
- * @size: the total size of the request body, or -1 if not known
- *
- * Prepares to send @msg over @session, and returns a #GOutputStream
- * that can be used to write the response. The server's response will
- * be available in @msg after calling soup_output_stream_close()
- * (which will return a %SOUP_OUTPUT_STREAM_HTTP_ERROR #GError if the
- * status is not 2xx).
- *
- * If you know the total number of bytes that will be written, pass
- * that in @size. Otherwise, pass -1. (If you pass a size, you MUST
- * write that many bytes to the stream; Trying to write more than
- * that, or closing the stream without having written enough, will
- * result in an error.
- *
- * In some situations, the request will not actually be sent until you
- * call g_output_stream_close(). (In fact, currently this is *always*
- * true.)
- *
- * Internally, #SoupOutputStream is implemented using asynchronous
- * I/O, so if you are using the synchronous API (eg,
- * g_output_stream_write()), you should create a new #GMainContext and
- * set it as the %SOUP_SESSION_ASYNC_CONTEXT property on @session. (If
- * you don't, then synchronous #GOutputStream calls will cause the
- * main loop to be run recursively.) The async #GOutputStream API
- * works fine with %SOUP_SESSION_ASYNC_CONTEXT either set or unset.
- *
- * Returns: a new #GOutputStream.
- **/
-GOutputStream *
-soup_output_stream_new (SoupSession *session, SoupMessage *msg, goffset size)
-{
- SoupOutputStream *stream;
- SoupOutputStreamPrivate *priv;
-
- g_return_val_if_fail (SOUP_IS_MESSAGE (msg), NULL);
-
- stream = g_object_new (SOUP_TYPE_OUTPUT_STREAM, NULL);
- priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (stream);
-
- priv->session = g_object_ref (session);
- priv->async_context = soup_session_get_async_context (session);
- priv->msg = g_object_ref (msg);
- priv->size = size;
-
- return G_OUTPUT_STREAM (stream);
-}
-
-static gboolean
-soup_output_stream_cancelled (GIOChannel *chan, GIOCondition condition,
- gpointer stream)
-{
- SoupOutputStreamPrivate *priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (stream);
-
- priv->cancel_watch = NULL;
-
- soup_session_pause_message (priv->session, priv->msg);
- if (priv->cancelled_cb)
- priv->cancelled_cb (stream);
-
- return FALSE;
-}
-
-static void
-soup_output_stream_prepare_for_io (GOutputStream *stream, GCancellable *cancellable)
-{
- SoupOutputStreamPrivate *priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (stream);
- int cancel_fd;
-
- /* Move the buffer to the SoupMessage */
- soup_message_body_append (priv->msg->request_body, SOUP_MEMORY_TAKE,
- priv->ba->data, priv->ba->len);
- g_byte_array_free (priv->ba, FALSE);
- priv->ba = NULL;
-
- /* Set up cancellation */
- priv->cancellable = cancellable;
- cancel_fd = g_cancellable_get_fd (cancellable);
- if (cancel_fd != -1)
- {
- GIOChannel *chan = g_io_channel_unix_new (cancel_fd);
- priv->cancel_watch = soup_add_io_watch (priv->async_context, chan,
- G_IO_IN | G_IO_ERR | G_IO_HUP,
- soup_output_stream_cancelled,
- stream);
- g_io_channel_unref (chan);
- }
-
- /* Add an extra ref since soup_session_queue_message steals one */
- g_object_ref (priv->msg);
- soup_session_queue_message (priv->session, priv->msg, NULL, NULL);
-}
-
-static void
-soup_output_stream_done_io (GOutputStream *stream)
-{
- SoupOutputStreamPrivate *priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (stream);
-
- if (priv->cancel_watch)
- {
- g_source_destroy (priv->cancel_watch);
- priv->cancel_watch = NULL;
- }
- priv->cancellable = NULL;
-}
-
-static gboolean
-set_error_if_http_failed (SoupMessage *msg, GError **error)
-{
- if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
- {
- g_set_error_literal (error, SOUP_HTTP_ERROR,
- msg->status_code, msg->reason_phrase);
- return TRUE;
- }
- return FALSE;
-}
-
-static gssize
-soup_output_stream_write (GOutputStream *stream,
- const void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error)
-{
- SoupOutputStreamPrivate *priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (stream);
-
- if (priv->size > 0 && priv->offset + count > priv->size) {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NO_SPACE,
- "Write would exceed caller-defined file size");
- return -1;
- }
-
- g_byte_array_append (priv->ba, buffer, count);
- priv->offset += count;
- return count;
-}
-
-static int
-soup_output_stream_close (GOutputStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- SoupOutputStreamPrivate *priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (stream);
-
- if (priv->size > 0 && priv->offset != priv->size) {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NO_SPACE,
- "File is incomplete");
- return -1;
- }
-
- soup_output_stream_prepare_for_io (stream, cancellable);
- while (!priv->finished && !g_cancellable_is_cancelled (cancellable))
- g_main_context_iteration (priv->async_context, TRUE);
- soup_output_stream_done_io (stream);
-
- return !set_error_if_http_failed (priv->msg, error);
-}
-
-static void
-soup_output_stream_write_async (GOutputStream *stream,
- const void *buffer,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- SoupOutputStreamPrivate *priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (stream);
- GSimpleAsyncResult *result;
-
- result = g_simple_async_result_new (G_OBJECT (stream),
- callback, user_data,
- soup_output_stream_write_async);
-
- if (priv->size > 0 && priv->offset + count > priv->size)
- {
- GError *error;
-
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_NO_SPACE,
- "Write would exceed caller-defined file size");
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- }
- else
- {
- g_byte_array_append (priv->ba, buffer, count);
- priv->offset += count;
- g_simple_async_result_set_op_res_gssize (result, count);
- }
-
- g_simple_async_result_complete_in_idle (result);
-}
-
-static gssize
-soup_output_stream_write_finish (GOutputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple;
- gssize nwritten;
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == soup_output_stream_write_async);
-
- nwritten = g_simple_async_result_get_op_res_gssize (simple);
- return nwritten;
-}
-
-static void
-close_async_done (GOutputStream *stream)
-{
- SoupOutputStreamPrivate *priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (stream);
- GSimpleAsyncResult *result;
- GError *error = NULL;
-
- result = priv->result;
- priv->result = NULL;
-
- if (g_cancellable_set_error_if_cancelled (priv->cancellable, &error) ||
- set_error_if_http_failed (priv->msg, &error))
- {
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- }
- else
- g_simple_async_result_set_op_res_gboolean (result, TRUE);
-
- priv->finished_cb = NULL;
- priv->cancelled_cb = NULL;
- soup_output_stream_done_io (stream);
-
- g_simple_async_result_complete (result);
-}
-
-static void
-soup_output_stream_finished (SoupMessage *msg, gpointer stream)
-{
- SoupOutputStreamPrivate *priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (stream);
-
- priv->finished = TRUE;
-
- g_signal_handlers_disconnect_by_func (priv->msg, G_CALLBACK (soup_output_stream_finished), stream);
- close_async_done (stream);
-}
-
-static void
-soup_output_stream_close_async (GOutputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- SoupOutputStreamPrivate *priv = SOUP_OUTPUT_STREAM_GET_PRIVATE (stream);
- GSimpleAsyncResult *result;
-
- result = g_simple_async_result_new (G_OBJECT (stream),
- callback, user_data,
- soup_output_stream_close_async);
-
- if (priv->size > 0 && priv->offset != priv->size)
- {
- GError *error;
-
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_NO_SPACE,
- "File is incomplete");
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- g_simple_async_result_complete_in_idle (result);
- return;
- }
-
- priv->result = result;
- priv->cancelled_cb = close_async_done;
- g_signal_connect (priv->msg, "finished",
- G_CALLBACK (soup_output_stream_finished), stream);
- soup_output_stream_prepare_for_io (stream, cancellable);
-}
-
-static gboolean
-soup_output_stream_close_finish (GOutputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- /* Failures handled in generic close_finish code */
- return TRUE;
-}
diff --git a/daemon/soup-output-stream.h b/daemon/soup-output-stream.h
deleted file mode 100644
index f8412fda..00000000
--- a/daemon/soup-output-stream.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __SOUP_OUTPUT_STREAM_H__
-#define __SOUP_OUTPUT_STREAM_H__
-
-#include <gio/gio.h>
-#include <libsoup/soup-types.h>
-
-G_BEGIN_DECLS
-
-#define SOUP_TYPE_OUTPUT_STREAM (soup_output_stream_get_type ())
-#define SOUP_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SOUP_TYPE_OUTPUT_STREAM, SoupOutputStream))
-#define SOUP_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SOUP_TYPE_OUTPUT_STREAM, SoupOutputStreamClass))
-#define SOUP_IS_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SOUP_TYPE_OUTPUT_STREAM))
-#define SOUP_IS_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SOUP_TYPE_OUTPUT_STREAM))
-#define SOUP_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SOUP_TYPE_OUTPUT_STREAM, SoupOutputStreamClass))
-
-typedef struct SoupOutputStream SoupOutputStream;
-typedef struct SoupOutputStreamClass SoupOutputStreamClass;
-
-struct SoupOutputStream
-{
- GOutputStream parent;
-
-};
-
-struct SoupOutputStreamClass
-{
- GOutputStreamClass parent_class;
-
- /* Padding for future expansion */
- void (*_g_reserved1) (void);
- void (*_g_reserved2) (void);
- void (*_g_reserved3) (void);
- void (*_g_reserved4) (void);
- void (*_g_reserved5) (void);
-};
-
-GType soup_output_stream_get_type (void) G_GNUC_CONST;
-
-GOutputStream *soup_output_stream_new (SoupSession *session,
- SoupMessage *msg,
- goffset size);
-
-G_END_DECLS
-
-#endif /* __SOUP_OUTPUT_STREAM_H__ */
diff --git a/daemon/trash.mount.in b/daemon/trash.mount.in
deleted file mode 100644
index 2f161634..00000000
--- a/daemon/trash.mount.in
+++ /dev/null
@@ -1,5 +0,0 @@
-[Mount]
-Type=trash
-Exec=@libexecdir@/gvfsd-trash
-AutoMount=true
-
diff --git a/dbus.txt b/dbus.txt
deleted file mode 100644
index c9925b11..00000000
--- a/dbus.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-All info for mapping uri -> dbus name + remainder path is stored in config files read by the client at startup.
-
-Each "mountpoint" in a mountpoint daemon owns a name like "org.gtk.vfs.mount.smb.$server.$share".
-It also instantiates a Mountpoint interface at /org/gtk/vfs/mount/smb/$server/$share which
-listens to operations.
-
-Each daemon that contains at least one mountpoint also registers a org.gtk.vfs.Daemon interface
-at /org/gtk/vfs/Daemon which supports operations like GetConnection and CancelOp.
-
-Clients use GetNameOwner to map uri -> mountpoint name -> owner of name -> GetConnection call so that
-it can handle multiple mountpoints in each daemon. This can be cached, and NameOwnerChanged can be used
-to invalidate the cache.
-
-----------------------
-How we map URIs
-----------------------
-
-Mapping functions needed:
-uri to mount + path
-mount + path to uri
-root parent
-
-Mapping %m://%u@%h:%p/%f
-
-ftp:
-
-m_ftp.h_%h.p_%p.u_%u
-
-smb:
-
-smb://user@/ <-> smb-root.u_user
-smb:/// <-> smb-root; path = /
-smb:///foo <-> smb-root; path = /foo, type == link
-smb://foo/ <-> smb-browse; path = /foo
-smb://foo/server -> smb-browse; path = /foo/server, type == link
-smb://user@foo/ <-> smb-browse.u_user; path = /foo
-smb://user@foo:21/ <-> smb-browse.u_user.p_21; path = /foo
-smb://domain;user@foo:21/ <-> smb-browse.d_domain.u_user.p_21; path = /foo
-smb:///foo/share/blah <-> smb-share.h_foo.s_share, path = /blah
-
-m_smb-browse.u_%u path includes hostname
-
-computer:
-
-m_computer
-
-network:
-
-m_network
-
-http:
-https:
-
-m_http(s), username+path+port in path
-
-authentication (no mount)
-
-dav:
-davs:
-
-m_dav.h_%h.p_%p.u_%u.f_%f (f== path prefix)
-
-
-nfs.h_server.p_port.u_user.f_/opt/prefix
-
-Find it by using ListNames
-
-nfs:
-
-nfs.h_server.p_port.f_/opt/prefix
-
-Find it by using ListNames
-
-sftp:
-
-trash:
----
-
-HowTo handle:
-
-uri query part
-filename encoding - paths are raw, get utf8 via get_display_name op. (What about IRIs? Try to do utf8 paths if possible?)
-automounting? - http?
diff --git a/gconf/Makefile.am b/gconf/Makefile.am
deleted file mode 100644
index 7d7abb9d..00000000
--- a/gconf/Makefile.am
+++ /dev/null
@@ -1,32 +0,0 @@
-
-NULL =
-
-module_flags = -export_dynamic -avoid-version -module -no-undefined -export-symbols-regex '^g_io_module_(load|unload)'
-
-if USE_GCONF
-giomodules_LTLIBRARIES = libgiogconf.la
-endif
-
-libgiogconf_la_SOURCES = \
- gapplookupgconf.c gapplookupgconf.h \
- gconf-module.c \
- $(NULL)
-
-libgiogconf_la_CFLAGS = \
- -DG_LOG_DOMAIN=\"GVFS-GConf\" \
- -I$(top_srcdir)/common \
- $(GLIB_CFLAGS) \
- $(GCONF_CFLAGS) \
- -DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\" \
- -DGVFS_LOCALEDIR=\""$(localedir)"\" \
- -DG_DISABLE_DEPRECATED \
- $(NULL)
-
-libgiogconf_la_LDFLAGS = \
- $(module_flags) \
- $(NULL)
-
-libgiogconf_la_LIBADD = \
- $(GLIB_LIBS) \
- $(GCONF_LIBS) \
- $(NULL)
diff --git a/gconf/gapplookupgconf.c b/gconf/gapplookupgconf.c
deleted file mode 100644
index 059659d1..00000000
--- a/gconf/gapplookupgconf.c
+++ /dev/null
@@ -1,184 +0,0 @@
-
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexader Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-#include <gconf/gconf-client.h>
-
-#include "gapplookupgconf.h"
-
-
-struct _GAppLookupGConf {
- GObject parent;
-
-};
-
-static void lookup_iface_init (GDesktopAppInfoLookupIface *iface);
-static void g_app_lookup_gconf_finalize (GObject *object);
-
-#define _G_IMPLEMENT_INTERFACE_DYNAMIC(TYPE_IFACE, iface_init) { \
- const GInterfaceInfo g_implement_interface_info = { \
- (GInterfaceInitFunc) iface_init, NULL, NULL \
- }; \
- g_type_module_add_interface (type_module, g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \
-}
-
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (GAppLookupGConf, g_app_lookup_gconf, G_TYPE_OBJECT, 0,
- _G_IMPLEMENT_INTERFACE_DYNAMIC (G_TYPE_DESKTOP_APP_INFO_LOOKUP,
- lookup_iface_init))
-
-static void
-g_app_lookup_gconf_finalize (GObject *object)
-{
- if (G_OBJECT_CLASS (g_app_lookup_gconf_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_app_lookup_gconf_parent_class)->finalize) (object);
-}
-
-static GObject *
-g_app_lookup_gconf_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GObject *object;
- GAppLookupGConfClass *klass;
- GObjectClass *parent_class;
-
- object = NULL;
-
- /* Invoke parent constructor. */
- klass = G_APP_LOOKUP_GCONF_CLASS (g_type_class_peek (G_TYPE_APP_LOOKUP_GCONF));
- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
- object = parent_class->constructor (type,
- n_construct_properties,
- construct_properties);
-
- return object;
-}
-
-static void
-g_app_lookup_gconf_init (GAppLookupGConf *lookup)
-{
-}
-
-static void
-g_app_lookup_gconf_class_finalize (GAppLookupGConfClass *klass)
-{
-}
-
-
-static void
-g_app_lookup_gconf_class_init (GAppLookupGConfClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->constructor = g_app_lookup_gconf_constructor;
- gobject_class->finalize = g_app_lookup_gconf_finalize;
-}
-
-#define GCONF_PATH_PREFIX "/desktop/gnome/url-handlers/"
-
-static GAppInfo *
-get_default_for_uri_scheme (GDesktopAppInfoLookup *lookup,
- const char *uri_scheme)
-{
- GAppInfo *appinfo;
- GConfClient *client;
- char *command_key, *enabled_key, *terminal_key, *command;
- gboolean enabled, needs_terminal;
- GAppInfoCreateFlags flags;
-
- appinfo = NULL;
-
- client = gconf_client_get_default ();
-
- command_key = g_strconcat (GCONF_PATH_PREFIX,
- uri_scheme,
- "/command",
- NULL);
- command = gconf_client_get_string (client,
- command_key,
- NULL);
- g_free (command_key);
- if (command)
- {
- enabled_key = g_strconcat (GCONF_PATH_PREFIX,
- uri_scheme,
- "/enabled",
- NULL);
- enabled = gconf_client_get_bool (client,
- enabled_key,
- NULL);
- g_free (enabled_key);
-
- terminal_key = g_strconcat (GCONF_PATH_PREFIX,
- uri_scheme,
- "/needs_terminal",
- NULL);
- needs_terminal = gconf_client_get_bool (client,
- terminal_key,
- NULL);
- g_free (terminal_key);
-
- if (enabled)
- {
- if (g_str_has_suffix (command, "\"%s\"") ||
- g_str_has_suffix (command, "\'%s\'"))
- command[strlen (command) - 4] = 0;
- else if (g_str_has_suffix (command, "%s"))
- command[strlen (command) - 2] = 0;
-
- flags = G_APP_INFO_CREATE_SUPPORTS_URIS;
- if (needs_terminal)
- flags |= G_APP_INFO_CREATE_NEEDS_TERMINAL;
- appinfo = g_app_info_create_from_commandline (command,
- NULL,
- flags,
- NULL);
- }
- }
-
- g_object_unref (client);
-
- return appinfo;
-}
-
-static void
-lookup_iface_init (GDesktopAppInfoLookupIface *iface)
-{
- iface->get_default_for_uri_scheme = get_default_for_uri_scheme;
-}
-
-void
-g_app_lookup_gconf_register (GIOModule *module)
-{
- g_app_lookup_gconf_register_type (G_TYPE_MODULE (module));
- g_io_extension_point_implement (G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME,
- G_TYPE_APP_LOOKUP_GCONF,
- "gconf",
- 10);
-}
diff --git a/gconf/gapplookupgconf.h b/gconf/gapplookupgconf.h
deleted file mode 100644
index a268415e..00000000
--- a/gconf/gapplookupgconf.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#ifndef __G_APP_LOOKUP_GCONF_H__
-#define __G_APP_LOOKUP_GCONF_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <gio/gdesktopappinfo.h>
-
-
-G_BEGIN_DECLS
-
-#define G_TYPE_APP_LOOKUP_GCONF (g_app_lookup_gconf_get_type ())
-#define G_APP_LOOKUP_GCONF(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_APP_LOOKUP_GCONF, GAppLookupGConf))
-#define G_APP_LOOKUP_GCONF_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_APP_LOOKUP_GCONF, GAppLookupGConfClass))
-#define G_IS_APP_LOOKUP_GCONF(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_APP_LOOKUP_GCONF))
-#define G_IS_APP_LOOKUP_GCONF_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_APP_LOOKUP_GCONF))
-
-typedef struct _GAppLookupGConf GAppLookupGConf;
-typedef struct _GAppLookupGConfClass GAppLookupGConfClass;
-
-struct _GAppLookupGConfClass {
- GObjectClass parent_class;
-};
-
-GType g_app_lookup_gconf_get_type (void) G_GNUC_CONST;
-void g_app_lookup_gconf_register (GIOModule *module);
-
-G_END_DECLS
-
-#endif /* __G_APP_LOOKUP_GCONF_H__ */
diff --git a/gconf/gconf-module.c b/gconf/gconf-module.c
deleted file mode 100644
index 113073f4..00000000
--- a/gconf/gconf-module.c
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gmodule.h>
-#include <gio/gio.h>
-
-#include "gapplookupgconf.h"
-
-void
-g_io_module_load (GIOModule *module)
-{
- bindtextdomain (GETTEXT_PACKAGE, GVFS_LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-
- g_app_lookup_gconf_register (module);
-}
-
-void
-g_io_module_unload (GIOModule *module)
-{
-}
diff --git a/monitor/Makefile.am b/monitor/Makefile.am
deleted file mode 100644
index d4197d52..00000000
--- a/monitor/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-
-SUBDIRS = proxy
-
-if USE_HAL
-SUBDIRS += hal
-endif
-
-if USE_GPHOTO2
-SUBDIRS += gphoto2
-endif
diff --git a/monitor/gphoto2/Makefile.am b/monitor/gphoto2/Makefile.am
deleted file mode 100644
index df37aa20..00000000
--- a/monitor/gphoto2/Makefile.am
+++ /dev/null
@@ -1,60 +0,0 @@
-
-NULL =
-
-libexec_PROGRAMS = gvfs-gphoto2-volume-monitor
-
-BUILT_SOURCES = \
- hal-marshal.h hal-marshal.c
-
-hal-marshal.h: hal-marshal.list
- glib-genmarshal $< --prefix=hal_marshal --header > $@
-
-hal-marshal.c: hal-marshal.list
- echo "#include \"hal-marshal.h\"" > $@ && glib-genmarshal $< --prefix=hal_marshal --body >> $@
-
-
-gvfs_gphoto2_volume_monitor_SOURCES = \
- hal-utils.c hal-utils.h \
- hal-marshal.c hal-marshal.h \
- hal-device.c hal-device.h \
- hal-pool.c hal-pool.h \
- gphoto2-volume-monitor-daemon.c \
- ggphoto2volume.c ggphoto2volume.h \
- ggphoto2volumemonitor.c ggphoto2volumemonitor.h \
- $(NULL)
-
-gvfs_gphoto2_volume_monitor_CFLAGS = \
- -DG_LOG_DOMAIN=\"GVFS-GPhoto2\" \
- -I$(top_srcdir)/common \
- -I$(top_srcdir)/monitor/proxy \
- $(GLIB_CFLAGS) \
- $(HAL_CFLAGS) \
- -DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\" \
- -DGVFS_LOCALEDIR=\""$(localedir)"\" \
- -DG_DISABLE_DEPRECATED \
- $(NULL)
-
-gvfs_gphoto2_volume_monitor_LDFLAGS = \
- $(NULL)
-
-gvfs_gphoto2_volume_monitor_LDADD = \
- $(GLIB_LIBS) \
- $(HAL_LIBS) \
- $(top_builddir)/common/libgvfscommon-noin.la \
- $(top_builddir)/monitor/proxy/libgvfsproxyvolumemonitordaemon-noin.la \
- $(NULL)
-
-remote_volume_monitorsdir = $(datadir)/gvfs/remote-volume-monitors
-remote_volume_monitors_DATA = gphoto2.monitor
-
-servicedir = $(datadir)/dbus-1/services
-service_in_files = org.gtk.Private.GPhoto2VolumeMonitor.service.in
-service_DATA = $(service_in_files:.service.in=.service)
-
-$(service_DATA): $(service_in_files) Makefile
- @sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
-
-clean-local:
- rm -f *~ *.loT $(BUILT_SOURCES) $(service_DATA)
-
-EXTRA_DIST = hal-marshal.list $(service_in_files) gphoto2.monitor
diff --git a/monitor/gphoto2/ggphoto2volume.c b/monitor/gphoto2/ggphoto2volume.c
deleted file mode 100644
index 8cdf8257..00000000
--- a/monitor/gphoto2/ggphoto2volume.c
+++ /dev/null
@@ -1,575 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-
-#include "ggphoto2volume.h"
-
-#include "hal-utils.h"
-
-/* Protects all fields of GHalDrive that can change */
-G_LOCK_DEFINE_STATIC(gphoto2_volume);
-
-struct _GGPhoto2Volume {
- GObject parent;
-
- GVolumeMonitor *volume_monitor; /* owned by volume monitor */
-
- char *device_path;
- HalDevice *device;
- HalDevice *drive_device;
-
- GFile *foreign_mount_root;
- GMount *foreign_mount;
-
- char *name;
- char *icon;
-};
-
-static void g_gphoto2_volume_volume_iface_init (GVolumeIface *iface);
-
-G_DEFINE_TYPE_EXTENDED (GGPhoto2Volume, g_gphoto2_volume, G_TYPE_OBJECT, 0,
- G_IMPLEMENT_INTERFACE (G_TYPE_VOLUME,
- g_gphoto2_volume_volume_iface_init))
-
-static void
-g_gphoto2_volume_finalize (GObject *object)
-{
- GGPhoto2Volume *volume;
-
- volume = G_GPHOTO2_VOLUME (object);
-
- if (volume->device != NULL)
- g_object_unref (volume->device);
-
- if (volume->foreign_mount_root != NULL)
- g_object_unref (volume->foreign_mount_root);
-
- if (volume->foreign_mount != NULL)
- g_object_unref (volume->foreign_mount);
-
- if (volume->volume_monitor != NULL)
- g_object_remove_weak_pointer (G_OBJECT (volume->volume_monitor), (gpointer) &(volume->volume_monitor));
-
- g_free (volume->name);
- g_free (volume->icon);
-
- if (G_OBJECT_CLASS (g_gphoto2_volume_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_gphoto2_volume_parent_class)->finalize) (object);
-}
-
-static void
-g_gphoto2_volume_class_init (GGPhoto2VolumeClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_gphoto2_volume_finalize;
-}
-
-static void
-g_gphoto2_volume_init (GGPhoto2Volume *gphoto2_volume)
-{
-}
-
-static gboolean
-changed_in_idle (gpointer data)
-{
- GGPhoto2Volume *volume = data;
-
- g_signal_emit_by_name (volume, "changed");
- if (volume->volume_monitor != NULL)
- g_signal_emit_by_name (volume->volume_monitor, "volume_changed", volume);
- g_object_unref (volume);
-
- return FALSE;
-}
-
-static char **
-dupv_and_uniqify (char **str_array)
-{
- int n, m, o;
- int len;
- char **result;
-
- result = g_strdupv (str_array);
- len = g_strv_length (result);
-
- for (n = 0; n < len; n++)
- {
- char *s = result[n];
- for (m = n + 1; m < len; m++)
- {
- char *p = result[m];
- if (strcmp (s, p) == 0)
- {
- for (o = m + 1; o < len; o++)
- result[o - 1] = result[o];
- len--;
- result[len] = NULL;
- m--;
- }
- }
- }
-
- return result;
-}
-
-static void
-do_update_from_hal_for_camera (GGPhoto2Volume *v)
-{
- const char *vendor;
- const char *product;
- const char *icon_from_hal;
- const char *name_from_hal;
- gboolean is_audio_player;
-
- vendor = hal_device_get_property_string (v->drive_device, "usb_device.vendor");
- product = hal_device_get_property_string (v->drive_device, "usb_device.product");
- icon_from_hal = hal_device_get_property_string (v->device, "info.desktop.icon");
- name_from_hal = hal_device_get_property_string (v->device, "info.desktop.name");
-
- is_audio_player = hal_device_has_capability (v->device, "portable_audio_player");
-
- v->name = NULL;
- if (strlen (name_from_hal) > 0)
- v->name = g_strdup (name_from_hal);
- else if (vendor == NULL)
- {
- if (product != NULL)
- v->name = g_strdup (product);
- }
- else
- {
- if (product != NULL)
- v->name = g_strdup_printf ("%s %s", vendor, product);
- else
- {
- if (is_audio_player)
- {
- /* Translators: %s is the device vendor */
- v->name = g_strdup_printf (_("%s Audio Player"), vendor);
- }
- else
- {
- /* Translators: %s is the device vendor */
- v->name = g_strdup_printf (_("%s Camera"), vendor);
- }
- }
- }
- if (v->name == NULL)
- {
- if (is_audio_player)
- v->name = g_strdup (_("Audio Player"));
- else
- v->name = g_strdup (_("Camera"));
- }
-
- if (strlen (icon_from_hal) > 0)
- v->icon = g_strdup (icon_from_hal);
- else if (is_audio_player)
- v->icon = g_strdup ("multimedia-player");
- else
- v->icon = g_strdup ("camera-photo");
-
- g_object_set_data_full (G_OBJECT (v),
- "hal-storage-device-capabilities",
- dupv_and_uniqify (hal_device_get_property_strlist (v->device, "info.capabilities")),
- (GDestroyNotify) g_strfreev);
-}
-
-static void
-update_from_hal (GGPhoto2Volume *mv, gboolean emit_changed)
-{
- char *old_name;
- char *old_icon;
-
- G_LOCK (gphoto2_volume);
-
- old_name = g_strdup (mv->name);
- old_icon = g_strdup (mv->icon);
-
- g_free (mv->name);
- g_free (mv->icon);
-
- do_update_from_hal_for_camera (mv);
-
- if (emit_changed)
- {
- if (old_name == NULL ||
- old_icon == NULL ||
- strcmp (old_name, mv->name) != 0 ||
- strcmp (old_icon, mv->icon) != 0)
- g_idle_add (changed_in_idle, g_object_ref (mv));
- }
- g_free (old_name);
- g_free (old_icon);
-
- G_UNLOCK (gphoto2_volume);
-}
-
-static void
-hal_changed (HalDevice *device, const char *key, gpointer user_data)
-{
- GGPhoto2Volume *gphoto2_volume = G_GPHOTO2_VOLUME (user_data);
-
- /*g_warning ("hal modifying %s (property %s changed)", gphoto2_volume->device_path, key);*/
- update_from_hal (gphoto2_volume, TRUE);
-}
-
-GGPhoto2Volume *
-g_gphoto2_volume_new (GVolumeMonitor *volume_monitor,
- HalDevice *device,
- HalPool *pool,
- GFile *foreign_mount_root)
-{
- GGPhoto2Volume *volume;
- HalDevice *drive_device;
- const char *storage_udi;
- const char *device_path;
-
- g_return_val_if_fail (volume_monitor != NULL, NULL);
- g_return_val_if_fail (device != NULL, NULL);
- g_return_val_if_fail (pool != NULL, NULL);
- g_return_val_if_fail (foreign_mount_root != NULL, NULL);
-
- if (!hal_device_has_capability (device, "camera") ||
- (hal_device_has_capability (device, "portable_audio_player") &&
- hal_device_get_property_bool (device, "camera.libgphoto2.support")))
- return NULL;
-
- /* OK, so we abuse storage_udi and drive_device for the USB main
- * device that holds this interface...
- */
- storage_udi = hal_device_get_property_string (device, "info.parent");
- if (storage_udi == NULL)
- return NULL;
-
- drive_device = hal_pool_get_device_by_udi (pool, storage_udi);
- if (drive_device == NULL)
- return NULL;
-
- /* TODO: other OS'es? Will address this with DK aka HAL 2.0 */
- device_path = hal_device_get_property_string (drive_device, "linux.device_file");
- if (strlen (device_path) == 0)
- device_path = NULL;
-
- volume = g_object_new (G_TYPE_GPHOTO2_VOLUME, NULL);
- volume->volume_monitor = volume_monitor;
- g_object_add_weak_pointer (G_OBJECT (volume_monitor), (gpointer) &(volume->volume_monitor));
- volume->device_path = g_strdup (device_path);
- volume->device = g_object_ref (device);
- volume->drive_device = g_object_ref (drive_device);
- volume->foreign_mount_root = foreign_mount_root != NULL ? g_object_ref (foreign_mount_root) : NULL;
-
- g_signal_connect_object (device, "hal_property_changed", (GCallback) hal_changed, volume, 0);
- g_signal_connect_object (drive_device, "hal_property_changed", (GCallback) hal_changed, volume, 0);
-
- update_from_hal (volume, FALSE);
-
- return volume;
-}
-
-void
-g_gphoto2_volume_removed (GGPhoto2Volume *volume)
-{
- ;
-}
-
-static GIcon *
-g_gphoto2_volume_get_icon (GVolume *volume)
-{
- GGPhoto2Volume *gphoto2_volume = G_GPHOTO2_VOLUME (volume);
- GIcon *icon;
-
- G_LOCK (gphoto2_volume);
- icon = g_themed_icon_new (gphoto2_volume->icon);
- G_UNLOCK (gphoto2_volume);
- return icon;
-}
-
-static char *
-g_gphoto2_volume_get_name (GVolume *volume)
-{
- GGPhoto2Volume *gphoto2_volume = G_GPHOTO2_VOLUME (volume);
- char *name;
-
- G_LOCK (gphoto2_volume);
- name = g_strdup (gphoto2_volume->name);
- G_UNLOCK (gphoto2_volume);
-
- return name;
-}
-
-static char *
-g_gphoto2_volume_get_uuid (GVolume *volume)
-{
- return NULL;
-}
-
-static gboolean
-g_gphoto2_volume_can_mount (GVolume *volume)
-{
- return TRUE;
-}
-
-static gboolean
-g_gphoto2_volume_can_eject (GVolume *volume)
-{
- return FALSE;
-}
-
-static gboolean
-g_gphoto2_volume_should_automount (GVolume *volume)
-{
- return TRUE;
-}
-
-static GDrive *
-g_gphoto2_volume_get_drive (GVolume *volume)
-{
- return NULL;
-}
-
-static GMount *
-g_gphoto2_volume_get_mount (GVolume *volume)
-{
- GGPhoto2Volume *gphoto2_volume = G_GPHOTO2_VOLUME (volume);
- GMount *mount;
-
- G_LOCK (gphoto2_volume);
- mount = NULL;
- if (gphoto2_volume->foreign_mount != NULL)
- mount = g_object_ref (gphoto2_volume->foreign_mount);
- G_UNLOCK (gphoto2_volume);
-
- return mount;
-}
-
-gboolean
-g_gphoto2_volume_has_udi (GGPhoto2Volume *volume,
- const char *udi)
-{
- GGPhoto2Volume *gphoto2_volume = G_GPHOTO2_VOLUME (volume);
- gboolean res;
-
- G_LOCK (gphoto2_volume);
- res = FALSE;
- if (gphoto2_volume->device != NULL)
- res = strcmp (hal_device_get_udi (gphoto2_volume->device), udi) == 0;
- G_UNLOCK (gphoto2_volume);
- return res;
-}
-
-static void
-foreign_mount_unmounted (GMount *mount, gpointer user_data)
-{
- GGPhoto2Volume *volume = G_GPHOTO2_VOLUME (user_data);
- gboolean check;
-
- G_LOCK (gphoto2_volume);
- check = volume->foreign_mount == mount;
- G_UNLOCK (gphoto2_volume);
- if (check)
- g_gphoto2_volume_adopt_foreign_mount (volume, NULL);
-}
-
-void
-g_gphoto2_volume_adopt_foreign_mount (GGPhoto2Volume *volume, GMount *foreign_mount)
-{
- G_LOCK (gphoto2_volume);
- if (volume->foreign_mount != NULL)
- g_object_unref (volume->foreign_mount);
-
- if (foreign_mount != NULL)
- {
- volume->foreign_mount = g_object_ref (foreign_mount);
- g_signal_connect_object (foreign_mount, "unmounted", (GCallback) foreign_mount_unmounted, volume, 0);
- }
- else
- volume->foreign_mount = NULL;
-
- g_idle_add (changed_in_idle, g_object_ref (volume));
- G_UNLOCK (gphoto2_volume);
-}
-
-gboolean
-g_gphoto2_volume_has_foreign_mount_root (GGPhoto2Volume *volume,
- GFile *mount_root)
-{
- GGPhoto2Volume *gphoto2_volume = G_GPHOTO2_VOLUME (volume);
- gboolean res;
-
- G_LOCK (gphoto2_volume);
- res = FALSE;
- if (gphoto2_volume->foreign_mount_root != NULL)
- res = g_file_equal (gphoto2_volume->foreign_mount_root, mount_root);
- G_UNLOCK (gphoto2_volume);
-
- return res;
-}
-
-
-
-typedef struct
-{
- GGPhoto2Volume *enclosing_volume;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} ForeignMountOp;
-
-static void
-mount_foreign_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- ForeignMountOp *data = user_data;
- data->callback (G_OBJECT (data->enclosing_volume), res, data->user_data);
- g_free (data);
-}
-
-static void
-g_gphoto2_volume_mount (GVolume *volume,
- GMountMountFlags flags,
- GMountOperation *mount_operation,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GGPhoto2Volume *gphoto2_volume = G_GPHOTO2_VOLUME (volume);
- ForeignMountOp *data;
-
- /*g_warning ("gphoto2_volume_mount (can_mount=%d foreign=%p device_path=%s)",
- g_gphoto2_volume_can_mount (volume),
- gphoto2_volume->foreign_mount_root,
- gphoto2_volume->device_path);*/
-
- G_LOCK (gphoto2_volume);
-
- data = g_new0 (ForeignMountOp, 1);
- data->enclosing_volume = gphoto2_volume;
- data->callback = callback;
- data->user_data = user_data;
-
- g_file_mount_enclosing_volume (gphoto2_volume->foreign_mount_root,
- 0,
- mount_operation,
- cancellable,
- mount_foreign_callback,
- data);
-
- G_UNLOCK (gphoto2_volume);
-}
-
-static gboolean
-g_gphoto2_volume_mount_finish (GVolume *volume,
- GAsyncResult *result,
- GError **error)
-{
- GGPhoto2Volume *gphoto2_volume = G_GPHOTO2_VOLUME (volume);
- gboolean res;
-
- G_LOCK (gphoto2_volume);
- res = g_file_mount_enclosing_volume_finish (gphoto2_volume->foreign_mount_root, result, error);
- G_UNLOCK (gphoto2_volume);
-
- return res;
-}
-
-static char *
-g_gphoto2_volume_get_identifier (GVolume *volume,
- const char *kind)
-{
- GGPhoto2Volume *gphoto2_volume = G_GPHOTO2_VOLUME (volume);
- char *id;
-
- G_LOCK (gphoto2_volume);
- id = NULL;
- if (strcmp (kind, G_VOLUME_IDENTIFIER_KIND_HAL_UDI) == 0)
- id = g_strdup (hal_device_get_udi (gphoto2_volume->device));
- else if (strcmp (kind, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE) == 0)
- id = g_strdup (gphoto2_volume->device_path);
- G_UNLOCK (gphoto2_volume);
-
- return id;
-}
-
-static char **
-g_gphoto2_volume_enumerate_identifiers (GVolume *volume)
-{
- GGPhoto2Volume *gphoto2_volume = G_GPHOTO2_VOLUME (volume);
- GPtrArray *res;
-
- G_LOCK (gphoto2_volume);
-
- res = g_ptr_array_new ();
-
- g_ptr_array_add (res,
- g_strdup (G_VOLUME_IDENTIFIER_KIND_HAL_UDI));
-
- if (gphoto2_volume->device_path && *gphoto2_volume->device_path != 0)
- g_ptr_array_add (res,
- g_strdup (G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE));
-
- /* Null-terminate */
- g_ptr_array_add (res, NULL);
-
- G_UNLOCK (gphoto2_volume);
-
- return (char **)g_ptr_array_free (res, FALSE);
-}
-
-static GFile *
-g_gphoto2_volume_get_activation_root (GVolume *volume)
-{
- GGPhoto2Volume *gphoto2_volume = G_GPHOTO2_VOLUME (volume);
-
- return g_object_ref (gphoto2_volume->foreign_mount_root);
-}
-
-static void
-g_gphoto2_volume_volume_iface_init (GVolumeIface *iface)
-{
- iface->get_name = g_gphoto2_volume_get_name;
- iface->get_icon = g_gphoto2_volume_get_icon;
- iface->get_uuid = g_gphoto2_volume_get_uuid;
- iface->get_drive = g_gphoto2_volume_get_drive;
- iface->get_mount = g_gphoto2_volume_get_mount;
- iface->can_mount = g_gphoto2_volume_can_mount;
- iface->can_eject = g_gphoto2_volume_can_eject;
- iface->should_automount = g_gphoto2_volume_should_automount;
- iface->mount_fn = g_gphoto2_volume_mount;
- iface->mount_finish = g_gphoto2_volume_mount_finish;
- iface->eject = NULL;
- iface->eject_finish = NULL;
- iface->get_identifier = g_gphoto2_volume_get_identifier;
- iface->enumerate_identifiers = g_gphoto2_volume_enumerate_identifiers;
- iface->get_activation_root = g_gphoto2_volume_get_activation_root;
-}
diff --git a/monitor/gphoto2/ggphoto2volume.h b/monitor/gphoto2/ggphoto2volume.h
deleted file mode 100644
index 20fe486a..00000000
--- a/monitor/gphoto2/ggphoto2volume.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_GPHOTO2_VOLUME_H__
-#define __G_GPHOTO2_VOLUME_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include "hal-pool.h"
-#include "ggphoto2volumemonitor.h"
-
-G_BEGIN_DECLS
-
-#define G_TYPE_GPHOTO2_VOLUME (g_gphoto2_volume_get_type ())
-#define G_GPHOTO2_VOLUME(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_GPHOTO2_VOLUME, GGPhoto2Volume))
-#define G_GPHOTO2_VOLUME_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_GPHOTO2_VOLUME, GGPhoto2VolumeClass))
-#define G_IS_GPHOTO2_VOLUME(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_GPHOTO2_VOLUME))
-#define G_IS_GPHOTO2_VOLUME_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_GPHOTO2_VOLUME))
-
-typedef struct _GGPhoto2VolumeClass GGPhoto2VolumeClass;
-
-struct _GGPhoto2VolumeClass {
- GObjectClass parent_class;
-};
-
-GType g_gphoto2_volume_get_type (void) G_GNUC_CONST;
-
-GGPhoto2Volume *g_gphoto2_volume_new (GVolumeMonitor *volume_monitor,
- HalDevice *device,
- HalPool *pool,
- GFile *foreign_mount_root);
-
-gboolean g_gphoto2_volume_has_udi (GGPhoto2Volume *volume,
- const char *udi);
-
-gboolean g_gphoto2_volume_has_foreign_mount_root (GGPhoto2Volume *volume,
- GFile *mount_root);
-
-void g_gphoto2_volume_adopt_foreign_mount (GGPhoto2Volume *volume,
- GMount *foreign_mount);
-
-void g_gphoto2_volume_removed (GGPhoto2Volume *volume);
-
-G_END_DECLS
-
-#endif /* __G_GPHOTO2_VOLUME_H__ */
diff --git a/monitor/gphoto2/ggphoto2volumemonitor.c b/monitor/gphoto2/ggphoto2volumemonitor.c
deleted file mode 100644
index 5b8e8341..00000000
--- a/monitor/gphoto2/ggphoto2volumemonitor.c
+++ /dev/null
@@ -1,564 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <limits.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-
-#include "ggphoto2volumemonitor.h"
-#include "ggphoto2volume.h"
-
-#include "hal-pool.h"
-
-G_LOCK_DEFINE_STATIC(hal_vm);
-
-static GGPhoto2VolumeMonitor *the_volume_monitor = NULL;
-static HalPool *pool = NULL;
-
-struct _GGPhoto2VolumeMonitor {
- GNativeVolumeMonitor parent;
-
- GUnixMountMonitor *mount_monitor;
-
- HalPool *pool;
-
- GList *last_camera_devices;
-
- GList *camera_volumes;
-};
-
-static void hal_changed (HalPool *pool,
- HalDevice *device,
- gpointer user_data);
-
-static void update_all (GGPhoto2VolumeMonitor *monitor,
- gboolean emit_changes);
-
-static void update_cameras (GGPhoto2VolumeMonitor *monitor,
- GList **added_volumes,
- GList **removed_volumes);
-
-
-G_DEFINE_TYPE (GGPhoto2VolumeMonitor, g_gphoto2_volume_monitor, G_TYPE_VOLUME_MONITOR)
-
-static void
-list_free (GList *objects)
-{
- g_list_foreach (objects, (GFunc)g_object_unref, NULL);
- g_list_free (objects);
-}
-
-static HalPool *
-get_hal_pool (void)
-{
- char *cap_only[] = {"camera", "portable_audio_player", "usb_device", NULL};
-
- if (pool == NULL)
- pool = hal_pool_new (cap_only);
-
- return pool;
-}
-
-static void
-g_gphoto2_volume_monitor_dispose (GObject *object)
-{
- GGPhoto2VolumeMonitor *monitor;
-
- monitor = G_GPHOTO2_VOLUME_MONITOR (object);
-
- G_LOCK (hal_vm);
- the_volume_monitor = NULL;
- G_UNLOCK (hal_vm);
-
- if (G_OBJECT_CLASS (g_gphoto2_volume_monitor_parent_class)->dispose)
- (*G_OBJECT_CLASS (g_gphoto2_volume_monitor_parent_class)->dispose) (object);
-}
-
-static void
-g_gphoto2_volume_monitor_finalize (GObject *object)
-{
- GGPhoto2VolumeMonitor *monitor;
-
- monitor = G_GPHOTO2_VOLUME_MONITOR (object);
-
- g_signal_handlers_disconnect_by_func (monitor->pool, hal_changed, monitor);
-
- g_object_unref (monitor->pool);
-
- list_free (monitor->last_camera_devices);
- list_free (monitor->camera_volumes);
-
- if (G_OBJECT_CLASS (g_gphoto2_volume_monitor_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_gphoto2_volume_monitor_parent_class)->finalize) (object);
-}
-
-static GList *
-get_mounts (GVolumeMonitor *volume_monitor)
-{
- return NULL;
-}
-
-static GList *
-get_volumes (GVolumeMonitor *volume_monitor)
-{
- GGPhoto2VolumeMonitor *monitor;
- GList *l;
-
- monitor = G_GPHOTO2_VOLUME_MONITOR (volume_monitor);
-
- G_LOCK (hal_vm);
-
- l = g_list_copy (monitor->camera_volumes);
- g_list_foreach (l, (GFunc)g_object_ref, NULL);
-
- G_UNLOCK (hal_vm);
-
- return l;
-}
-
-static GList *
-get_connected_drives (GVolumeMonitor *volume_monitor)
-{
- return NULL;
-}
-
-static GVolume *
-get_volume_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
-{
- return NULL;
-}
-
-static GMount *
-get_mount_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
-{
- return NULL;
-}
-
-static void
-hal_changed (HalPool *pool,
- HalDevice *device,
- gpointer user_data)
-{
- GGPhoto2VolumeMonitor *monitor = G_GPHOTO2_VOLUME_MONITOR (user_data);
-
- /*g_warning ("hal changed");*/
-
- update_all (monitor, TRUE);
-}
-
-static GObject *
-g_gphoto2_volume_monitor_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GObject *object;
- GGPhoto2VolumeMonitor *monitor;
- GGPhoto2VolumeMonitorClass *klass;
- GObjectClass *parent_class;
-
- G_LOCK (hal_vm);
- if (the_volume_monitor != NULL)
- {
- object = g_object_ref (the_volume_monitor);
- G_UNLOCK (hal_vm);
- return object;
- }
- G_UNLOCK (hal_vm);
-
- /*g_warning ("creating hal vm");*/
-
- object = NULL;
-
- /* Invoke parent constructor. */
- klass = G_GPHOTO2_VOLUME_MONITOR_CLASS (g_type_class_peek (G_TYPE_GPHOTO2_VOLUME_MONITOR));
- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
- object = parent_class->constructor (type,
- n_construct_properties,
- construct_properties);
-
- monitor = G_GPHOTO2_VOLUME_MONITOR (object);
- monitor->pool = g_object_ref (get_hal_pool ());
-
- g_signal_connect (monitor->pool,
- "device_added", G_CALLBACK (hal_changed),
- monitor);
-
- g_signal_connect (monitor->pool,
- "device_removed", G_CALLBACK (hal_changed),
- monitor);
-
- update_all (monitor, FALSE);
-
- G_LOCK (hal_vm);
- the_volume_monitor = monitor;
- G_UNLOCK (hal_vm);
-
- return object;
-}
-
-static void
-g_gphoto2_volume_monitor_init (GGPhoto2VolumeMonitor *monitor)
-{
-}
-
-static gboolean
-is_supported (void)
-{
- return get_hal_pool() != NULL;
-}
-
-static GVolume *
-adopt_orphan_mount (GMount *mount, GVolumeMonitor *monitor)
-{
- GList *l;
- GFile *mount_root;
- GVolume *ret;
-
- /* This is called by the union volume monitor which does
- have a ref to this. So its guaranteed to live, unfortunately
- the pointer is not passed as an argument :/
- */
- ret = NULL;
-
- G_LOCK (hal_vm);
- if (the_volume_monitor == NULL)
- {
- G_UNLOCK (hal_vm);
- return NULL;
- }
-
- mount_root = g_mount_get_root (mount);
-
- /* gphoto2:// are foreign mounts */
- for (l = the_volume_monitor->camera_volumes; l != NULL; l = l->next)
- {
- GGPhoto2Volume *volume = l->data;
-
- if (g_gphoto2_volume_has_foreign_mount_root (volume, mount_root))
- {
- g_gphoto2_volume_adopt_foreign_mount (volume, mount);
- ret = g_object_ref (volume);
- goto found;
- }
- }
-
- found:
- g_object_unref (mount_root);
-
- G_UNLOCK (hal_vm);
- return ret;
-}
-
-static void
-g_gphoto2_volume_monitor_class_init (GGPhoto2VolumeMonitorClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVolumeMonitorClass *monitor_class = G_VOLUME_MONITOR_CLASS (klass);
-
- gobject_class->constructor = g_gphoto2_volume_monitor_constructor;
- gobject_class->finalize = g_gphoto2_volume_monitor_finalize;
- gobject_class->dispose = g_gphoto2_volume_monitor_dispose;
-
- monitor_class->get_mounts = get_mounts;
- monitor_class->get_volumes = get_volumes;
- monitor_class->get_connected_drives = get_connected_drives;
- monitor_class->get_volume_for_uuid = get_volume_for_uuid;
- monitor_class->get_mount_for_uuid = get_mount_for_uuid;
- monitor_class->adopt_orphan_mount = adopt_orphan_mount;
- monitor_class->is_supported = is_supported;
-}
-
-/**
- * g_gphoto2_volume_monitor_new:
- *
- * Returns: a new #GVolumeMonitor.
- **/
-GVolumeMonitor *
-g_gphoto2_volume_monitor_new (void)
-{
- GGPhoto2VolumeMonitor *monitor;
-
- monitor = g_object_new (G_TYPE_GPHOTO2_VOLUME_MONITOR, NULL);
-
- return G_VOLUME_MONITOR (monitor);
-}
-
-static void
-diff_sorted_lists (GList *list1,
- GList *list2,
- GCompareFunc compare,
- GList **added,
- GList **removed)
-{
- int order;
-
- *added = *removed = NULL;
-
- while (list1 != NULL &&
- list2 != NULL)
- {
- order = (*compare) (list1->data, list2->data);
- if (order < 0)
- {
- *removed = g_list_prepend (*removed, list1->data);
- list1 = list1->next;
- }
- else if (order > 0)
- {
- *added = g_list_prepend (*added, list2->data);
- list2 = list2->next;
- }
- else
- { /* same item */
- list1 = list1->next;
- list2 = list2->next;
- }
- }
-
- while (list1 != NULL)
- {
- *removed = g_list_prepend (*removed, list1->data);
- list1 = list1->next;
- }
- while (list2 != NULL)
- {
- *added = g_list_prepend (*added, list2->data);
- list2 = list2->next;
- }
-}
-
-static GGPhoto2Volume *
-find_camera_volume_by_udi (GGPhoto2VolumeMonitor *monitor, const char *udi)
-{
- GList *l;
-
- for (l = monitor->camera_volumes; l != NULL; l = l->next)
- {
- GGPhoto2Volume *volume = l->data;
-
- if (g_gphoto2_volume_has_udi (volume, udi))
- return volume;
- }
-
- return NULL;
-}
-
-static gint
-hal_device_compare (HalDevice *a, HalDevice *b)
-{
- return strcmp (hal_device_get_udi (a), hal_device_get_udi (b));
-}
-
-static void
-list_emit (GGPhoto2VolumeMonitor *monitor,
- const char *monitor_signal,
- const char *object_signal,
- GList *objects)
-{
- GList *l;
-
- for (l = objects; l != NULL; l = l->next)
- {
- g_signal_emit_by_name (monitor, monitor_signal, l->data);
- if (object_signal)
- g_signal_emit_by_name (l->data, object_signal);
- }
-}
-
-typedef struct {
- GGPhoto2VolumeMonitor *monitor;
- GList *added_volumes, *removed_volumes;
-} ChangedLists;
-
-
-static gboolean
-emit_lists_in_idle (gpointer data)
-{
- ChangedLists *lists = data;
-
- list_emit (lists->monitor,
- "volume_removed", "removed",
- lists->removed_volumes);
- list_emit (lists->monitor,
- "volume_added", NULL,
- lists->added_volumes);
-
- list_free (lists->removed_volumes);
- list_free (lists->added_volumes);
- g_object_unref (lists->monitor);
- g_free (lists);
-
- return FALSE;
-}
-
-/* Must be called from idle if emit_changes, with no locks held */
-static void
-update_all (GGPhoto2VolumeMonitor *monitor,
- gboolean emit_changes)
-{
- ChangedLists *lists;
- GList *added_volumes, *removed_volumes;
-
- added_volumes = NULL;
- removed_volumes = NULL;
-
- G_LOCK (hal_vm);
- update_cameras (monitor, &added_volumes, &removed_volumes);
- G_UNLOCK (hal_vm);
-
- if (emit_changes)
- {
- lists = g_new0 (ChangedLists, 1);
- lists->monitor = g_object_ref (monitor);
- lists->added_volumes = added_volumes;
- lists->removed_volumes = removed_volumes;
-
- g_idle_add (emit_lists_in_idle, lists);
- }
- else
- {
- list_free (removed_volumes);
- list_free (added_volumes);
- }
-}
-
-static void
-update_cameras (GGPhoto2VolumeMonitor *monitor,
- GList **added_volumes,
- GList **removed_volumes)
-{
- GList *new_camera_devices;
- GList *new_mtp_devices;
- GList *removed, *added;
- GList *l, *ll;
- GGPhoto2Volume *volume;
- const char *udi;
-
- new_mtp_devices = hal_pool_find_by_capability (monitor->pool, "portable_audio_player");
- for (l = new_mtp_devices; l != NULL; l = ll)
- {
- HalDevice *d = l->data;
- ll = l->next;
- if (! hal_device_get_property_bool (d, "camera.libgphoto2.support"))
- {
- /*g_warning ("ignoring %s", hal_device_get_udi (d));*/
- /* filter out everything that isn't supported by libgphoto2 */
- new_mtp_devices = g_list_delete_link (new_mtp_devices, l);
- }
- }
-
- new_camera_devices = hal_pool_find_by_capability (monitor->pool, "camera");
- new_camera_devices = g_list_concat (new_camera_devices, new_mtp_devices);
- for (l = new_camera_devices; l != NULL; l = ll)
- {
- HalDevice *d = l->data;
- ll = l->next;
- /*g_warning ("got %s", hal_device_get_udi (d));*/
- if (! hal_device_get_property_bool (d, "camera.libgphoto2.support"))
- {
- /*g_warning ("ignoring %s", hal_device_get_udi (d));*/
- /* filter out everything that isn't supported by libgphoto2 */
- new_camera_devices = g_list_delete_link (new_camera_devices, l);
- }
- }
- g_list_foreach (new_camera_devices, (GFunc) g_object_ref, NULL);
-
- new_camera_devices = g_list_sort (new_camera_devices, (GCompareFunc) hal_device_compare);
- diff_sorted_lists (monitor->last_camera_devices,
- new_camera_devices, (GCompareFunc) hal_device_compare,
- &added, &removed);
-
- for (l = removed; l != NULL; l = l->next)
- {
- HalDevice *d = l->data;
-
- udi = hal_device_get_udi (d);
- /*g_warning ("camera removing %s", udi);*/
-
- volume = find_camera_volume_by_udi (monitor, udi);
- if (volume != NULL)
- {
- g_gphoto2_volume_removed (volume);
- monitor->camera_volumes = g_list_remove (monitor->camera_volumes, volume);
- *removed_volumes = g_list_prepend (*removed_volumes, volume);
- }
- }
-
- for (l = added; l != NULL; l = l->next)
- {
- HalDevice *d = l->data;
- char *uri;
- GFile *foreign_mount_root;
- int usb_bus_num;
- int usb_device_num;
- gboolean found;
-
- /* Look for the device in the added volumes, so as
- * not to add devices that are both audio players, and cameras */
- found = FALSE;
- for (ll = *added_volumes; ll; ll = ll->next)
- {
- if (g_gphoto2_volume_has_udi (ll->data, hal_device_get_udi (d)) != FALSE)
- {
- found = TRUE;
- break;
- }
- }
-
- if (found)
- continue;
-
- usb_bus_num = hal_device_get_property_int (d, "usb.bus_number");
- usb_device_num = hal_device_get_property_int (d, "usb.linux.device_number");
-
- uri = g_strdup_printf ("gphoto2://[usb:%03d,%03d]", usb_bus_num, usb_device_num);
- /*g_warning ("uri is '%s'", uri);*/
- foreign_mount_root = g_file_new_for_uri (uri);
- g_free (uri);
-
- udi = hal_device_get_udi (d);
- /*g_warning ("camera adding %s", udi);*/
-
- volume = g_gphoto2_volume_new (G_VOLUME_MONITOR (monitor),
- d,
- monitor->pool,
- foreign_mount_root);
- g_object_unref (foreign_mount_root);
- if (volume != NULL)
- {
- monitor->camera_volumes = g_list_prepend (monitor->camera_volumes, volume);
- *added_volumes = g_list_prepend (*added_volumes, g_object_ref (volume));
- }
- }
-
- g_list_free (added);
- g_list_free (removed);
- list_free (monitor->last_camera_devices);
- monitor->last_camera_devices = new_camera_devices;
-}
diff --git a/monitor/gphoto2/ggphoto2volumemonitor.h b/monitor/gphoto2/ggphoto2volumemonitor.h
deleted file mode 100644
index fcb74fef..00000000
--- a/monitor/gphoto2/ggphoto2volumemonitor.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_GPHOTO2_VOLUME_MONITOR_H__
-#define __G_GPHOTO2_VOLUME_MONITOR_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_GPHOTO2_VOLUME_MONITOR (g_gphoto2_volume_monitor_get_type ())
-#define G_GPHOTO2_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_GPHOTO2_VOLUME_MONITOR, GGPhoto2VolumeMonitor))
-#define G_GPHOTO2_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_GPHOTO2_VOLUME_MONITOR, GGPhoto2VolumeMonitorClass))
-#define G_IS_GPHOTO2_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_GPHOTO2_VOLUME_MONITOR))
-#define G_IS_GPHOTO2_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_GPHOTO2_VOLUME_MONITOR))
-
-typedef struct _GGPhoto2VolumeMonitor GGPhoto2VolumeMonitor;
-typedef struct _GGPhoto2VolumeMonitorClass GGPhoto2VolumeMonitorClass;
-
-/* Forward definitions */
-typedef struct _GGPhoto2Volume GGPhoto2Volume;
-
-struct _GGPhoto2VolumeMonitorClass {
- GVolumeMonitorClass parent_class;
-};
-
-GType g_gphoto2_volume_monitor_get_type (void) G_GNUC_CONST;
-
-GVolumeMonitor *g_gphoto2_volume_monitor_new (void);
-void g_gphoto2_volume_monitor_force_update (GGPhoto2VolumeMonitor *monitor);
-
-G_END_DECLS
-
-#endif /* __G_GPHOTO2_VOLUME_MONITOR_H__ */
diff --git a/monitor/gphoto2/gphoto2-volume-monitor-daemon.c b/monitor/gphoto2/gphoto2-volume-monitor-daemon.c
deleted file mode 100644
index f4998f35..00000000
--- a/monitor/gphoto2/gphoto2-volume-monitor-daemon.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gmodule.h>
-#include <gio/gio.h>
-
-#include <gvfsproxyvolumemonitordaemon.h>
-
-#include "ggphoto2volumemonitor.h"
-
-int
-main (int argc, char *argv[])
-{
- g_vfs_proxy_volume_monitor_daemon_init ();
- return g_vfs_proxy_volume_monitor_daemon_main (argc,
- argv,
- "org.gtk.Private.GPhoto2VolumeMonitor",
- G_TYPE_GPHOTO2_VOLUME_MONITOR);
-}
diff --git a/monitor/gphoto2/gphoto2.monitor b/monitor/gphoto2/gphoto2.monitor
deleted file mode 100644
index e0a69852..00000000
--- a/monitor/gphoto2/gphoto2.monitor
+++ /dev/null
@@ -1,4 +0,0 @@
-[RemoteVolumeMonitor]
-Name=GProxyVolumeMonitorGPhoto2
-DBusName=org.gtk.Private.GPhoto2VolumeMonitor
-IsNative=false
diff --git a/monitor/gphoto2/hal-device.c b/monitor/gphoto2/hal-device.c
deleted file mode 100644
index 9f0b5bc3..00000000
--- a/monitor/gphoto2/hal-device.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/* hal-device.c
- *
- * Copyright (C) 2007 David Zeuthen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <glib/gi18n-lib.h>
-#include "hal-device.h"
-#include "hal-marshal.h"
-
-struct _HalDevicePrivate
-{
- LibHalContext *hal_ctx;
- LibHalPropertySet *properties;
- char *udi;
- GTimeVal time_added;
-};
-
-enum {
- HAL_PROPERTY_CHANGED,
- HAL_CONDITION,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (HalDevice, hal_device, G_TYPE_OBJECT)
-
-static void
-hal_device_finalize (HalDevice *device)
-{
- if (device->priv->properties != NULL)
- libhal_free_property_set (device->priv->properties);
- g_free (device->priv->udi);
-
- if (G_OBJECT_CLASS (hal_device_parent_class)->finalize)
- (* G_OBJECT_CLASS (hal_device_parent_class)->finalize) (G_OBJECT (device));
-}
-
-static void
-hal_device_class_init (HalDeviceClass *klass)
-{
- GObjectClass *obj_class = (GObjectClass *) klass;
-
- obj_class->finalize = (GObjectFinalizeFunc) hal_device_finalize;
-
- signals[HAL_PROPERTY_CHANGED] =
- g_signal_new ("hal_property_changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalDeviceClass, hal_property_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[HAL_CONDITION] =
- g_signal_new ("hal_condition",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalDeviceClass, hal_condition),
- NULL, NULL,
- hal_marshal_VOID__STRING_STRING,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_STRING);
-}
-
-static void
-hal_device_init (HalDevice *device)
-{
- device->priv = g_new0 (HalDevicePrivate, 1);
- g_get_current_time (&(device->priv->time_added));
-}
-
-const char *
-hal_device_get_property_string (HalDevice *device, const char *key)
-{
- const char *ret;
-
- ret = libhal_ps_get_string (device->priv->properties, key);
- if (ret != NULL)
- return ret;
-
- /* play it safe and don't make clients crash */
- return "";
-}
-
-int
-hal_device_get_property_int (HalDevice *device, const char *key)
-{
- return libhal_ps_get_int32 (device->priv->properties, key);
-}
-
-double
-hal_device_get_property_double (HalDevice *device, const char *key)
-{
- return libhal_ps_get_double (device->priv->properties, key);
-}
-
-guint64
-hal_device_get_property_uint64 (HalDevice *device, const char *key)
-{
- return libhal_ps_get_uint64 (device->priv->properties, key);
-}
-
-gboolean
-hal_device_get_property_bool (HalDevice *device, const char *key)
-{
- return libhal_ps_get_bool (device->priv->properties, key);
-}
-
-char **
-hal_device_get_property_strlist (HalDevice *device, const char *key)
-{
- static char * empty[1] = {NULL};
- char **ret;
-
- ret = (char **) libhal_ps_get_strlist (device->priv->properties, key);
- if (ret != NULL)
- return (char **) ret;
-
- /* play it safe and don't make clients crash */
- return empty;
-}
-
-gboolean
-hal_device_has_capability (HalDevice *device, const char *capability)
-{
- int n;
- char **caps;
- gboolean ret;
-
- ret = FALSE;
- caps = hal_device_get_property_strlist (device, "info.capabilities");
- if (caps == NULL)
- goto out;
-
- for (n = 0; caps[n] != NULL; n++)
- {
- if (g_ascii_strcasecmp (caps[n], capability) == 0)
- {
- ret = TRUE;
- break;
- }
- }
-
- out:
- return ret;
-}
-
-gboolean
-hal_device_has_interface (HalDevice *device, const char *interface)
-{
- int n;
- char **ifs;
- gboolean ret;
-
- ret = FALSE;
- ifs = hal_device_get_property_strlist (device, "info.interfaces");
- if (ifs == NULL)
- goto out;
-
- for (n = 0; ifs[n] != NULL; n++)
- {
- if (g_ascii_strcasecmp (ifs[n], interface) == 0)
- {
- ret = TRUE;
- break;
- }
- }
-
-out:
- return ret;
-}
-
-gboolean
-hal_device_has_property (HalDevice *device, const char *key)
-{
- gboolean ret;
- LibHalPropertySetIterator it;
-
- ret = FALSE;
- if (device->priv->properties == NULL)
- goto out;
-
- libhal_psi_init (&it, device->priv->properties);
-
- while (libhal_psi_has_more (&it))
- {
- char *pkey = libhal_psi_get_key (&it);
-
- if (pkey != NULL && g_ascii_strcasecmp (pkey, key) == 0)
- {
- ret = TRUE;
- break;
- }
- libhal_psi_next (&it);
- }
-
- out:
- return ret;
-}
-
-
-HalDevice *
-hal_device_new_from_udi (LibHalContext *hal_ctx, const char *udi)
-{
- HalDevice *device;
-
- device = HAL_DEVICE (g_object_new (HAL_TYPE_DEVICE, NULL));
- device->priv->udi = g_strdup (udi);
- device->priv->hal_ctx = hal_ctx;
- device->priv->properties = libhal_device_get_all_properties (hal_ctx, udi, NULL);
- return device;
-}
-
-HalDevice *
-hal_device_new_from_udi_and_properties (LibHalContext *hal_ctx,
- char *udi,
- LibHalPropertySet *properties)
-{
- HalDevice *device;
-
- device = HAL_DEVICE (g_object_new (HAL_TYPE_DEVICE, NULL));
- device->priv->udi = g_strdup (udi);
- device->priv->hal_ctx = hal_ctx;
- device->priv->properties = properties;
- return device;
-}
-
-void
-_hal_device_hal_property_changed (HalDevice *device, const char *key);
-
-void
-_hal_device_hal_condition (HalDevice *device, const char *name, const char *detail);
-
-void
-_hal_device_hal_property_changed (HalDevice *device, const char *key)
-{
- LibHalPropertySet *new_props;
-
- new_props = libhal_device_get_all_properties (device->priv->hal_ctx, device->priv->udi, NULL);
- if (new_props != NULL)
- {
- libhal_free_property_set (device->priv->properties);
- device->priv->properties = new_props;
- g_signal_emit (device, signals[HAL_PROPERTY_CHANGED], 0, key);
- }
-}
-
-void
-_hal_device_hal_condition (HalDevice *device, const char *name, const char *detail)
-{
- g_signal_emit (device, signals[HAL_CONDITION], 0, name, detail);
-}
-
-const char *
-hal_device_get_udi (HalDevice *device)
-{
- return device->priv->udi;
-}
-
-LibHalPropertySet *
-hal_device_get_properties (HalDevice *device)
-{
- return device->priv->properties;
-}
-
-gboolean
-hal_device_is_recently_plugged_in (HalDevice *device)
-{
- GTimeVal now;
- glong delta_msec;
-
- g_get_current_time (&now);
-
- delta_msec = (now.tv_sec - device->priv->time_added.tv_sec) * 1000 +
- (now.tv_usec - device->priv->time_added.tv_usec) / 1000;
-
- return delta_msec < 2000;
-}
diff --git a/monitor/gphoto2/hal-device.h b/monitor/gphoto2/hal-device.h
deleted file mode 100644
index 8e91aa63..00000000
--- a/monitor/gphoto2/hal-device.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* hal-device.h
- *
- * Copyright (C) 2007 David Zeuthen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef HAL_DEVICE_H
-#define HAL_DEVICE_H
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <libhal.h>
-
-#define HAL_TYPE_DEVICE (hal_device_get_type ())
-#define HAL_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HAL_TYPE_DEVICE, HalDevice))
-#define HAL_DEVICE_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), HAL_DEVICE, HalDeviceClass))
-#define HAL_IS_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HAL_TYPE_DEVICE))
-#define HAL_IS_DEVICE_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), HAL_TYPE_DEVICE))
-#define HAL_DEVICE_GET_CLASS (G_TYPE_INSTANCE_GET_CLASS ((obj), HAL_TYPE_DEVICE, HalDeviceClass))
-
-
-typedef struct _HalDevice HalDevice;
-typedef struct _HalDeviceClass HalDeviceClass;
-
-struct _HalDevicePrivate;
-typedef struct _HalDevicePrivate HalDevicePrivate;
-
-struct _HalDevice
-{
- GObject parent;
-
- /* private */
- HalDevicePrivate *priv;
-};
-
-struct _HalDeviceClass
-{
- GObjectClass parent_class;
-
- /* signals */
- void (*hal_property_changed) (HalDevice *device, const char *key);
- void (*hal_condition) (HalDevice *device, const char *name, const char *detail);
-};
-
-
-GType hal_device_get_type (void);
-
-HalDevice * hal_device_new_from_udi (LibHalContext *hal_ctx,
- const char *udi);
-
-HalDevice * hal_device_new_from_udi_and_properties (LibHalContext *hal_ctx,
- char *udi,
- LibHalPropertySet *properties);
-
-const char * hal_device_get_udi (HalDevice *device);
-LibHalPropertySet * hal_device_get_properties (HalDevice *device);
-const char * hal_device_get_property_string (HalDevice *device,
- const char *key);
-int hal_device_get_property_int (HalDevice *device,
- const char *key);
-guint64 hal_device_get_property_uint64 (HalDevice *device,
- const char *key);
-double hal_device_get_property_double (HalDevice *device,
- const char *key);
-gboolean hal_device_get_property_bool (HalDevice *device,
- const char *key);
-char ** hal_device_get_property_strlist (HalDevice *device,
- const char *key);
-
-gboolean hal_device_has_property (HalDevice *device,
- const char *key);
-gboolean hal_device_has_capability (HalDevice *device,
- const char *capability);
-gboolean hal_device_has_interface (HalDevice *device,
- const char *interface);
-
-gboolean hal_device_is_recently_plugged_in (HalDevice *device);
-
-#endif /* HAL_DEVICE_H */
diff --git a/monitor/gphoto2/hal-marshal.c b/monitor/gphoto2/hal-marshal.c
deleted file mode 100644
index 75fec6e4..00000000
--- a/monitor/gphoto2/hal-marshal.c
+++ /dev/null
@@ -1,163 +0,0 @@
-#include "hal-marshal.h"
-
-#include <glib-object.h>
-
-
-#ifdef G_ENABLE_DEBUG
-#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v) g_value_get_char (v)
-#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-#define g_marshal_value_peek_int(v) g_value_get_int (v)
-#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-#define g_marshal_value_peek_long(v) g_value_get_long (v)
-#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-#define g_marshal_value_peek_float(v) g_value_get_float (v)
-#define g_marshal_value_peek_double(v) g_value_get_double (v)
-#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-#define g_marshal_value_peek_param(v) g_value_get_param (v)
-#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-#define g_marshal_value_peek_object(v) g_value_get_object (v)
-#else /* !G_ENABLE_DEBUG */
-/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
- * Do not access GValues directly in your code. Instead, use the
- * g_value_get_*() functions
- */
-#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
-#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-#endif /* !G_ENABLE_DEBUG */
-
-
-/* VOID:OBJECT,STRING (hal-marshal.list:1) */
-void
-hal_marshal_VOID__OBJECT_STRING (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__OBJECT_STRING) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__OBJECT_STRING callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__OBJECT_STRING) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_object (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- data2);
-}
-
-/* VOID:OBJECT,STRING,STRING (hal-marshal.list:2) */
-void
-hal_marshal_VOID__OBJECT_STRING_STRING (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__OBJECT_STRING_STRING) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer arg_3,
- gpointer data2);
- register GMarshalFunc_VOID__OBJECT_STRING_STRING callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 4);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__OBJECT_STRING_STRING) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_object (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- g_marshal_value_peek_string (param_values + 3),
- data2);
-}
-
-/* VOID:STRING,STRING (hal-marshal.list:3) */
-void
-hal_marshal_VOID__STRING_STRING (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__STRING_STRING) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__STRING_STRING callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__STRING_STRING) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- data2);
-}
-
diff --git a/monitor/gphoto2/hal-marshal.h b/monitor/gphoto2/hal-marshal.h
deleted file mode 100644
index 0ac3074c..00000000
--- a/monitor/gphoto2/hal-marshal.h
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#ifndef __hal_marshal_MARSHAL_H__
-#define __hal_marshal_MARSHAL_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-/* VOID:OBJECT,STRING (hal-marshal.list:1) */
-extern void hal_marshal_VOID__OBJECT_STRING (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:OBJECT,STRING,STRING (hal-marshal.list:2) */
-extern void hal_marshal_VOID__OBJECT_STRING_STRING (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:STRING,STRING (hal-marshal.list:3) */
-extern void hal_marshal_VOID__STRING_STRING (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-G_END_DECLS
-
-#endif /* __hal_marshal_MARSHAL_H__ */
-
diff --git a/monitor/gphoto2/hal-marshal.list b/monitor/gphoto2/hal-marshal.list
deleted file mode 100644
index 52c82338..00000000
--- a/monitor/gphoto2/hal-marshal.list
+++ /dev/null
@@ -1,3 +0,0 @@
-VOID:OBJECT,STRING
-VOID:OBJECT,STRING,STRING
-VOID:STRING,STRING
diff --git a/monitor/gphoto2/hal-pool.c b/monitor/gphoto2/hal-pool.c
deleted file mode 100644
index 770effd9..00000000
--- a/monitor/gphoto2/hal-pool.c
+++ /dev/null
@@ -1,458 +0,0 @@
-/* hal-pool.c
- *
- * Copyright (C) 2007 David Zeuthen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-
-#include <gdbusutils.h>
-
-#include "hal-pool.h"
-#include "hal-marshal.h"
-
-enum {
- DEVICE_ADDED,
- DEVICE_REMOVED,
- DEVICE_PROPERTY_CHANGED,
- DEVICE_CONDITION,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-struct _HalPoolPrivate
-{
- char **cap_only;
-
- DBusConnection *dbus_connection;
- LibHalContext *hal_ctx;
- GHashTable *devices;
-};
-
-G_DEFINE_TYPE (HalPool, hal_pool, G_TYPE_OBJECT)
-
-static void
-hal_pool_finalize (HalPool *pool)
-{
- g_strfreev (pool->priv->cap_only);
-
- dbus_bus_remove_match (pool->priv->dbus_connection,
- "type='signal',"
- "interface='org.freedesktop.Hal.Device',"
- "sender='org.freedesktop.Hal'", NULL);
- libhal_ctx_shutdown (pool->priv->hal_ctx, NULL);
- dbus_connection_close (pool->priv->dbus_connection);
- dbus_connection_unref (pool->priv->dbus_connection);
-
- if (G_OBJECT_CLASS (hal_pool_parent_class)->finalize)
- (* G_OBJECT_CLASS (hal_pool_parent_class)->finalize) (G_OBJECT (pool));
-}
-
-static void
-hal_pool_class_init (HalPoolClass *klass)
-{
- GObjectClass *obj_class = (GObjectClass *) klass;
-
- obj_class->finalize = (GObjectFinalizeFunc) hal_pool_finalize;
-
- g_type_class_ref (HAL_TYPE_DEVICE);
-
- signals[DEVICE_ADDED] =
- g_signal_new ("device_added",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalPoolClass, device_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- HAL_TYPE_DEVICE);
-
- signals[DEVICE_REMOVED] =
- g_signal_new ("device_removed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalPoolClass, device_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- HAL_TYPE_DEVICE);
-
- signals[DEVICE_PROPERTY_CHANGED] =
- g_signal_new ("device_property_changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalPoolClass, device_property_changed),
- NULL, NULL,
- hal_marshal_VOID__OBJECT_STRING,
- G_TYPE_NONE, 2,
- HAL_TYPE_DEVICE,
- G_TYPE_STRING);
-
- signals[DEVICE_CONDITION] =
- g_signal_new ("device_condition",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalPoolClass, device_condition),
- NULL, NULL,
- hal_marshal_VOID__OBJECT_STRING_STRING,
- G_TYPE_NONE, 3,
- HAL_TYPE_DEVICE,
- G_TYPE_STRING,
- G_TYPE_STRING);
-}
-
-static void
-hal_pool_init (HalPool *pool)
-{
- pool->priv = g_new0 (HalPoolPrivate, 1);
- pool->priv->hal_ctx = NULL;
-}
-
-static gboolean
-has_cap_only (HalPool *pool, HalDevice *device)
-{
- const char *subsys;
- unsigned int n;
-
- for (n = 0; pool->priv->cap_only != NULL && pool->priv->cap_only[n] != NULL; n++)
- {
- if (hal_device_has_capability (device, pool->priv->cap_only[n]))
- return TRUE;
-
- subsys = hal_device_get_property_string (device, "info.subsystem");
-
- if (subsys != NULL && strcmp (subsys, pool->priv->cap_only[n]) == 0)
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-hal_pool_add_device_by_udi (HalPool *pool,
- const char *udi,
- gboolean emit_signal)
-{
- HalDevice *device;
-
- device = hal_device_new_from_udi (pool->priv->hal_ctx, udi);
- if (device != NULL)
- {
- if (!has_cap_only (pool, device))
- g_object_unref (device);
- else
- {
- g_hash_table_insert (pool->priv->devices, g_strdup (udi), device);
- if (emit_signal)
- g_signal_emit (pool, signals[DEVICE_ADDED], 0, device);
- }
- }
-}
-
-#ifdef HAVE_HAL_FAST_INIT
-static void
-hal_pool_add_device_by_udi_and_properties (HalPool *pool,
- char *udi,
- LibHalPropertySet *properties,
- gboolean emit_signal)
-{
- HalDevice *device;
-
- device = hal_device_new_from_udi_and_properties (pool->priv->hal_ctx, udi, properties);
- if (device != NULL)
- {
- if (!has_cap_only (pool, device))
- g_object_unref (device);
- else
- {
- g_hash_table_insert (pool->priv->devices, g_strdup (udi), device);
- if (emit_signal)
- g_signal_emit (pool, signals[DEVICE_ADDED], 0, device);
- }
- }
-}
-#endif
-
-static void
-_hal_device_added (LibHalContext *hal_ctx, const char *udi)
-{
- HalPool *pool;
-
- pool = HAL_POOL (libhal_ctx_get_user_data (hal_ctx));
- hal_pool_add_device_by_udi (pool, udi, TRUE);
-}
-
-static void
-_hal_device_removed (LibHalContext *hal_ctx, const char *udi)
-{
- HalPool *pool;
- HalDevice *device;
-
- pool = HAL_POOL (libhal_ctx_get_user_data (hal_ctx));
- if ((device = hal_pool_get_device_by_udi (pool, udi)) != NULL)
- {
- g_object_ref (device);
- g_hash_table_remove (pool->priv->devices, udi);
- g_signal_emit (pool, signals[DEVICE_REMOVED], 0, device);
- g_object_unref (device);
- }
-}
-
-void
-_hal_device_hal_property_changed (HalDevice *device, const char *key);
-
-void
-_hal_device_hal_condition (HalDevice *device, const char *name, const char *detail);
-
-static void
-_hal_property_modified (LibHalContext *ctx,
- const char *udi,
- const char *key,
- dbus_bool_t is_removed,
- dbus_bool_t is_added)
-{
- HalPool *pool;
- HalDevice *device;
-
- pool = HAL_POOL (libhal_ctx_get_user_data (ctx));
-
- device = hal_pool_get_device_by_udi (pool, udi);
- if (device != NULL)
- {
- _hal_device_hal_property_changed (device, key);
- g_signal_emit (pool, signals[DEVICE_PROPERTY_CHANGED], 0, device, key);
- }
-}
-
-static void
-_hal_condition (LibHalContext *ctx,
- const char *udi,
- const char *condition_name,
- const char *condition_detail)
-{
- HalPool *pool;
- HalDevice *device;
-
- pool = HAL_POOL (libhal_ctx_get_user_data (ctx));
-
- device = hal_pool_get_device_by_udi (pool, udi);
- if (device != NULL)
- {
- _hal_device_hal_condition (device, condition_name, condition_detail);
- g_signal_emit (pool, signals[DEVICE_CONDITION], 0, device, condition_name, condition_detail);
- }
-}
-
-LibHalContext *
-hal_pool_get_hal_ctx (HalPool *pool)
-{
- return pool->priv->hal_ctx;
-}
-
-DBusConnection *
-hal_pool_get_dbus_connection (HalPool *pool)
-{
- return pool->priv->dbus_connection;
-}
-
-HalPool *
-hal_pool_new (char **cap_only)
-{
- int i;
- char **devices;
- int num_devices;
- HalPool *pool;
- LibHalContext *hal_ctx;
- DBusError error;
- DBusConnection *dbus_connection;
-#ifdef HAVE_HAL_FAST_INIT
- LibHalPropertySet **properties;
-#endif
-
- pool = NULL;
-
- dbus_error_init (&error);
- /* see discussion on gtk-devel-list (Subject: Re: gvfs hal volume monitoring backend) on
- * why this is private
- */
- dbus_connection = dbus_bus_get_private (DBUS_BUS_SYSTEM, &error);
- if (dbus_error_is_set (&error))
- {
- dbus_error_free (&error);
- goto out;
- }
-
- dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
-
- hal_ctx = libhal_ctx_new ();
- if (hal_ctx == NULL)
- {
- dbus_connection_close (dbus_connection);
- dbus_connection_unref (dbus_connection);
- goto out;
- }
-
- _g_dbus_connection_integrate_with_main (dbus_connection);
- libhal_ctx_set_dbus_connection (hal_ctx, dbus_connection);
-
- if (!libhal_ctx_init (hal_ctx, &error))
- {
- dbus_connection_close (dbus_connection);
- dbus_connection_unref (dbus_connection);
- dbus_error_free (&error);
- goto out;
- }
-
- pool = HAL_POOL (g_object_new (HAL_TYPE_POOL, NULL));
- pool->priv->dbus_connection = dbus_connection;
- pool->priv->hal_ctx = hal_ctx;
- pool->priv->devices = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
- pool->priv->cap_only = g_strdupv (cap_only);
-
- /* Gah, unfortunately we have to watch all devices as HAL's PropertyModified signal
- * doesn't include the capabilities...
- */
- dbus_bus_add_match (dbus_connection,
- "type='signal',"
- "interface='org.freedesktop.Hal.Device',"
- "sender='org.freedesktop.Hal'", NULL);
- libhal_ctx_set_device_added (hal_ctx, _hal_device_added);
- libhal_ctx_set_device_removed (hal_ctx, _hal_device_removed);
- libhal_ctx_set_device_property_modified (hal_ctx, _hal_property_modified);
- libhal_ctx_set_device_condition (hal_ctx, _hal_condition);
- libhal_ctx_set_user_data (hal_ctx, pool);
-
-#ifdef HAVE_HAL_FAST_INIT
- /* First try new O(1) algorithm to get all devices and properties in a single call..
- *
- * This method is only available in post hal 0.5.10.
- */
- if (libhal_get_all_devices_with_properties (pool->priv->hal_ctx,
- &num_devices,
- &devices,
- &properties,
- NULL))
- {
- for (i = 0; i < num_devices; i++)
- hal_pool_add_device_by_udi_and_properties (pool, devices[i], properties[i], FALSE);
- libhal_free_string_array (devices);
- free (properties); /* hal_pool_add_device_by_udi_and_properties steals the given properties */
- goto out;
- }
-#endif
-
- /* fallback to using O(n) algorithm; will work on any hal 0.5.x release */
- devices = libhal_get_all_devices (pool->priv->hal_ctx, &num_devices, NULL);
- if (devices != NULL)
- {
- for (i = 0; i < num_devices; i++)
- {
- char *device_udi;
- device_udi = devices[i];
- hal_pool_add_device_by_udi (pool, device_udi, FALSE);
- }
- libhal_free_string_array (devices);
- goto out;
- }
-
- /* FAIL! */
-
- g_object_unref (pool);
- return NULL;
-
- out:
- return pool;
-}
-
-HalDevice *
-hal_pool_get_device_by_udi (HalPool *pool, const char *udi)
-{
- return g_hash_table_lookup (pool->priv->devices, udi);
-}
-
-HalDevice *
-hal_pool_get_device_by_capability_and_string (HalPool *pool,
- const char *capability,
- const char *key,
- const char *value)
-{
- GList *i;
- GList *devices;
- HalDevice *result;
-
- result = NULL;
- devices = NULL;
-
- if (pool->priv->devices == NULL)
- goto out;
-
- devices = g_hash_table_get_values (pool->priv->devices);
- for (i = devices; i != NULL; i = i->next)
- {
- HalDevice *d = i->data;
- const char *s;
-
- if (!hal_device_has_capability (d, capability))
- continue;
-
- s = hal_device_get_property_string (d, key);
- if (s == NULL)
- continue;
-
- if (strcmp (s, value) == 0)
- {
- result = d;
- goto out;
- }
- }
-
-out:
- if (devices != NULL)
- g_list_free (devices);
- return result;
-}
-
-GList *
-hal_pool_find_by_capability (HalPool *pool, const char *capability)
-{
- GList *i;
- GList *j;
- GList *devices;
-
- devices = NULL;
-
- if (pool->priv->devices == NULL)
- goto out;
-
- devices = g_hash_table_get_values (pool->priv->devices);
- for (i = devices; i != NULL; i = j)
- {
- HalDevice *d = i->data;
-
- j = i->next;
-
- if (!hal_device_has_capability (d, capability))
- devices = g_list_delete_link (devices, i);
- }
-
- out:
- return devices;
-}
diff --git a/monitor/gphoto2/hal-pool.h b/monitor/gphoto2/hal-pool.h
deleted file mode 100644
index 04c8687d..00000000
--- a/monitor/gphoto2/hal-pool.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* hal-pool.h
- *
- * Copyright (C) 2007 David Zeuthen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#if !defined(HAL_POOL_H)
-#define HAL_POOL_H
-
-#include <gio/gio.h>
-#include <gio/gunixmounts.h>
-#include "hal-device.h"
-
-#define HAL_TYPE_POOL (hal_pool_get_type ())
-#define HAL_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HAL_TYPE_POOL, HalPool))
-#define HAL_POOL_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), HAL_POOL, HalPoolClass))
-#define HAL_IS_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HAL_TYPE_POOL))
-#define HAL_IS_POOL_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), HAL_TYPE_POOL))
-#define HAL_POOL_GET_CLASS (G_TYPE_INSTANCE_GET_CLASS ((obj), HAL_TYPE_POOL, HalPoolClass))
-
-
-typedef struct _HalPool HalPool;
-typedef struct _HalPoolClass HalPoolClass;
-
-struct _HalPoolPrivate;
-typedef struct _HalPoolPrivate HalPoolPrivate;
-
-struct _HalPool
-{
- GObject parent;
-
- /* private */
- HalPoolPrivate *priv;
-};
-
-struct _HalPoolClass
-{
- GObjectClass parent_class;
-
- /* signals */
- void (*device_added) (HalPool *pool, HalDevice *device);
- void (*device_removed) (HalPool *pool, HalDevice *device);
- void (*device_property_changed) (HalPool *pool, HalDevice *device, const char *key);
- void (*device_condition) (HalPool *pool, HalDevice *device, const char *name, const char *detail);
-};
-
-GType hal_pool_get_type (void);
-HalPool * hal_pool_new (char **cap_only);
-LibHalContext * hal_pool_get_hal_ctx (HalPool *pool);
-DBusConnection * hal_pool_get_dbus_connection (HalPool *pool);
-HalDevice * hal_pool_get_device_by_udi (HalPool *pool,
- const char *udi);
-HalDevice * hal_pool_get_device_by_capability_and_string (HalPool *pool,
- const char *capability,
- const char *key,
- const char *value);
-GList * hal_pool_find_by_capability (HalPool *pool,
- const char *capability);
-
-#endif /* HAL_POOL_H */
diff --git a/monitor/gphoto2/hal-utils.c b/monitor/gphoto2/hal-utils.c
deleted file mode 100644
index ca90bc7c..00000000
--- a/monitor/gphoto2/hal-utils.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- * Christian Kellner <gicmo@gnome.org>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-
-#include "string.h"
-
-#include "hal-utils.h"
-
-static const struct {
- const char *disc_type;
- const char *icon_name;
- char *ui_name;
- char *ui_name_blank;
-} disc_data[] = {
- {"cd_rom", "media-optical-cd-rom", N_("CD-ROM Disc"), N_("Blank CD-ROM Disc")},
- {"cd_r", "media-optical-cd-r", N_("CD-R Disc"), N_("Blank CD-R Disc")},
- {"cd_rw", "media-optical-cd-rw", N_("CD-RW Disc"), N_("Blank CD-RW Disc")},
- {"dvd_rom", "media-optical-dvd-rom", N_("DVD-ROM Disc"), N_("Blank DVD-ROM Disc")},
- {"dvd_ram", "media-optical-dvd-ram", N_("DVD-RAM Disc"), N_("Blank DVD-RAM Disc")},
- {"dvd_r", "media-optical-dvd-r", N_("DVD-ROM Disc"), N_("Blank DVD-ROM Disc")},
- {"dvd_rw", "media-optical-dvd-rw", N_("DVD-RW Disc"), N_("Blank DVD-RW Disc")},
- {"dvd_plus_r", "media-optical-dvd-r-plus", N_("DVD+R Disc"), N_("Blank DVD+R Disc")},
- {"dvd_plus_rw", "media-optical-dvd-rw-plus", N_("DVD+RW Disc"), N_("Blank DVD+RW Disc")},
- {"dvd_plus_r_dl", "media-optical-dvd-dl-r-plus", N_("DVD+R DL Disc"), N_("Blank DVD+R DL Disc")},
- {"bd_rom", "media-optical-bd-rom", N_("Blu-Ray Disc"), N_("Blank Blu-Ray Disc")},
- {"bd_r", "media-optical-bd-r", N_("Blu-Ray R Disc"), N_("Blank Blu-Ray R Disc")},
- {"bd_re", "media-optical-bd-re", N_("Blu-Ray RW Disc"), N_("Blank Blu-Ray RW Disc")},
- {"hddvd_rom", "media-optical-hddvd-rom", N_("HD DVD Disc"), N_("Blank HD DVD Disc")},
- {"hddvd_r", "media-optical-hddvd-r", N_("HD DVD-R Disc"), N_("Blank HD DVD-R Disc")},
- {"hddvd_rw", "media-optical-hddvd-rw", N_("HD DVD-RW Disc"), N_("Blank HD DVD-RW Disc")},
- {"mo", "media-optical-mo", N_("MO Disc"), N_("Blank MO Disc")},
- {NULL, "media-optical", N_("Disc"), N_("Blank Disc")}
-};
-
-const char *
-get_disc_icon (const char *disc_type)
-{
- int n;
-
- for (n = 0; disc_data[n].disc_type != NULL; n++)
- {
- if (strcmp (disc_data[n].disc_type, disc_type) == 0)
- break;
- }
-
- return disc_data[n].icon_name;
-}
-
-const char *
-get_disc_name (const char *disc_type, gboolean is_blank)
-{
- int n;
-
- for (n = 0; disc_data[n].disc_type != NULL; n++)
- {
- if (strcmp (disc_data[n].disc_type, disc_type) == 0)
- break;
- }
-
- if (is_blank)
- return dgettext (GETTEXT_PACKAGE, disc_data[n].ui_name_blank);
- else
- return dgettext (GETTEXT_PACKAGE, disc_data[n].ui_name);
-}
-
-/*
- * Creates a GThemedIcon from icon_name and creates default
- * fallbacks from fallbacks. Is smart in the case that icon_name
- * and fallbacks are identically.
- * Note: See the GThemedIcon documentation for more information
- * on default fallbacks
- */
-GIcon *
-get_themed_icon_with_fallbacks (const char *icon_name,
- const char *fallbacks)
-{
- int i = 0, dashes = 0;
- const char *p;
- char *dashp;
- char *last;
- char **names;
- GIcon *icon;
-
- if (G_UNLIKELY (icon_name == NULL))
- return NULL;
-
- if (fallbacks == NULL)
- return g_themed_icon_new (icon_name);
-
- p = fallbacks;
- while (*p)
- {
- if (*p == '-')
- dashes++;
- p++;
- }
-
- if (strcmp (icon_name, fallbacks))
- {
- names = g_new (char *, dashes + 3);
- names[i++] = g_strdup (icon_name);
- }
- else
- names = g_new (char *, dashes + 2);
-
- names[i++] = last = g_strdup (fallbacks);
-
- while ((dashp = strrchr (last, '-')) != NULL)
- names[i++] = last = g_strndup (last, dashp - last);
-
- names[i++] = NULL;
- icon = g_themed_icon_new_from_names (names, -1);
- g_strfreev (names);
-
- return icon;
-}
-
diff --git a/monitor/gphoto2/hal-utils.h b/monitor/gphoto2/hal-utils.h
deleted file mode 100644
index 7244a29c..00000000
--- a/monitor/gphoto2/hal-utils.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- * Chrsitian Kellner <gicmo@gnome.org>
- */
-
-#ifndef __HAL_UTILS_H__
-#define __HAL_UTILS_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-const char * get_disc_icon (const char *disc_type);
-const char * get_disc_name (const char *disc_type, gboolean is_blank);
-
-GIcon * get_themed_icon_with_fallbacks (const char *icon_name,
- const char *fallbacks);
-
-G_END_DECLS
-
-#endif /* __HAL_UTILS_H__ */
diff --git a/monitor/gphoto2/org.gtk.Private.GPhoto2VolumeMonitor.service.in b/monitor/gphoto2/org.gtk.Private.GPhoto2VolumeMonitor.service.in
deleted file mode 100644
index b06e3df6..00000000
--- a/monitor/gphoto2/org.gtk.Private.GPhoto2VolumeMonitor.service.in
+++ /dev/null
@@ -1,3 +0,0 @@
-[D-BUS Service]
-Name=org.gtk.Private.GPhoto2VolumeMonitor
-Exec=@libexecdir@/gvfs-gphoto2-volume-monitor
diff --git a/monitor/hal/Makefile.am b/monitor/hal/Makefile.am
deleted file mode 100644
index f9d9d7e5..00000000
--- a/monitor/hal/Makefile.am
+++ /dev/null
@@ -1,62 +0,0 @@
-
-NULL =
-
-libexec_PROGRAMS = gvfs-hal-volume-monitor
-
-BUILT_SOURCES = \
- hal-marshal.h hal-marshal.c
-
-hal-marshal.h: hal-marshal.list
- glib-genmarshal $< --prefix=hal_marshal --header > $@
-
-hal-marshal.c: hal-marshal.list
- echo "#include \"hal-marshal.h\"" > $@ && glib-genmarshal $< --prefix=hal_marshal --body >> $@
-
-
-gvfs_hal_volume_monitor_SOURCES = \
- hal-utils.c hal-utils.h \
- hal-volume-monitor-daemon.c \
- hal-marshal.c hal-marshal.h \
- hal-device.c hal-device.h \
- hal-pool.c hal-pool.h \
- ghaldrive.c ghaldrive.h \
- ghalvolume.c ghalvolume.h \
- ghalmount.c ghalmount.h \
- ghalvolumemonitor.c ghalvolumemonitor.h \
- $(NULL)
-
-gvfs_hal_volume_monitor_CFLAGS = \
- -DG_LOG_DOMAIN=\"GVFS-Hal\" \
- -I$(top_srcdir)/common \
- -I$(top_srcdir)/monitor/proxy \
- $(GLIB_CFLAGS) \
- $(HAL_CFLAGS) \
- -DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\" \
- -DGVFS_LOCALEDIR=\""$(localedir)"\" \
- -DG_DISABLE_DEPRECATED \
- $(NULL)
-
-gvfs_hal_volume_monitor_LDFLAGS = \
- $(NULL)
-
-gvfs_hal_volume_monitor_LDADD = \
- $(GLIB_LIBS) \
- $(HAL_LIBS) \
- $(top_builddir)/common/libgvfscommon-noin.la \
- $(top_builddir)/monitor/proxy/libgvfsproxyvolumemonitordaemon-noin.la \
- $(NULL)
-
-remote_volume_monitorsdir = $(datadir)/gvfs/remote-volume-monitors
-remote_volume_monitors_DATA = hal.monitor
-
-servicedir = $(datadir)/dbus-1/services
-service_in_files = org.gtk.Private.HalVolumeMonitor.service.in
-service_DATA = $(service_in_files:.service.in=.service)
-
-$(service_DATA): $(service_in_files) Makefile
- @sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
-
-clean-local:
- rm -f *~ *.loT $(BUILT_SOURCES) $(service_DATA)
-
-EXTRA_DIST = hal-marshal.list $(service_in_files) hal.monitor
diff --git a/monitor/hal/ghaldrive.c b/monitor/hal/ghaldrive.c
deleted file mode 100644
index c7aea30b..00000000
--- a/monitor/hal/ghaldrive.c
+++ /dev/null
@@ -1,1009 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-
-#include "ghalvolumemonitor.h"
-#include "ghaldrive.h"
-#include "ghalvolume.h"
-
-/* Protects all fields of GHalDrive that can change */
-G_LOCK_DEFINE_STATIC(hal_drive);
-
-struct _GHalDrive {
- GObject parent;
-
- GVolumeMonitor *volume_monitor; /* owned by volume monitor */
- GList *volumes; /* entries in list are owned by volume_monitor */
-
- char *name;
- char *icon;
- char *device_path;
-
- gboolean can_eject;
- gboolean can_poll_for_media;
- gboolean is_media_check_automatic;
- gboolean has_media;
- gboolean uses_removable_media;
-
- HalDevice *device;
- HalPool *pool;
-};
-
-static void g_hal_drive_drive_iface_init (GDriveIface *iface);
-
-G_DEFINE_TYPE_EXTENDED (GHalDrive, g_hal_drive, G_TYPE_OBJECT, 0,
- G_IMPLEMENT_INTERFACE (G_TYPE_DRIVE,
- g_hal_drive_drive_iface_init))
-
-static void
-g_hal_drive_finalize (GObject *object)
-{
- GList *l;
- GHalDrive *drive;
-
- drive = G_HAL_DRIVE (object);
-
- for (l = drive->volumes; l != NULL; l = l->next)
- {
- GHalVolume *volume = l->data;
- g_hal_volume_unset_drive (volume, drive);
- }
-
- g_free (drive->device_path);
- if (drive->device != NULL)
- g_object_unref (drive->device);
- if (drive->pool != NULL)
- g_object_unref (drive->pool);
-
- g_free (drive->name);
- g_free (drive->icon);
-
- if (drive->volume_monitor != NULL)
- g_object_remove_weak_pointer (G_OBJECT (drive->volume_monitor), (gpointer) &(drive->volume_monitor));
-
- if (G_OBJECT_CLASS (g_hal_drive_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_hal_drive_parent_class)->finalize) (object);
-}
-
-static void
-g_hal_drive_class_init (GHalDriveClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_hal_drive_finalize;
-}
-
-static void
-g_hal_drive_init (GHalDrive *hal_drive)
-{
-}
-
-static char *
-_drive_get_description (HalDevice *d)
-{
- char *s = NULL;
- const char *drive_type;
- const char *drive_bus;
- const char *name_from_hal;
-
- drive_type = hal_device_get_property_string (d, "storage.drive_type");
- drive_bus = hal_device_get_property_string (d, "storage.bus");
- name_from_hal = hal_device_get_property_string (d, "info.desktop.name");
-
-
- if (strlen (name_from_hal) > 0)
- {
- s = g_strdup (name_from_hal);
- }
- else if (strcmp (drive_type, "cdrom") == 0)
- {
- const char *first;
- const char *second;
-
- first = _("CD-ROM");
- if (hal_device_get_property_bool (d, "storage.cdrom.cdr"))
- first = _("CD-R");
- if (hal_device_get_property_bool (d, "storage.cdrom.cdrw"))
- first = _("CD-RW");
-
- second = NULL;
- if (hal_device_get_property_bool (d, "storage.cdrom.dvd"))
- second = _("DVD-ROM");
- if (hal_device_get_property_bool (d, "storage.cdrom.dvdplusr"))
- second = _("DVD+R");
- if (hal_device_get_property_bool (d, "storage.cdrom.dvdplusrw"))
- second = _("DVD+RW");
- if (hal_device_get_property_bool (d, "storage.cdrom.dvdr"))
- second = _("DVD-R");
- if (hal_device_get_property_bool (d, "storage.cdrom.dvdrw"))
- second = _("DVD-RW");
- if (hal_device_get_property_bool (d, "storage.cdrom.dvdram"))
- second = _("DVD-RAM");
- if ((hal_device_get_property_bool (d, "storage.cdrom.dvdr")) &&
- (hal_device_get_property_bool (d, "storage.cdrom.dvdplusr")))
- second = _("DVD\xc2\xb1R");
- if (hal_device_get_property_bool (d, "storage.cdrom.dvdrw") &&
- hal_device_get_property_bool (d, "storage.cdrom.dvdplusrw"))
- second = _("DVD\xc2\xb1RW");
- if (hal_device_get_property_bool (d, "storage.cdrom.hddvd"))
- second = _("HDDVD");
- if (hal_device_get_property_bool (d, "storage.cdrom.hddvdr"))
- second = _("HDDVD-r");
- if (hal_device_get_property_bool (d, "storage.cdrom.hddvdrw"))
- second = _("HDDVD-RW");
- if (hal_device_get_property_bool (d, "storage.cdrom.bd"))
- second = _("Blu-ray");
- if (hal_device_get_property_bool (d, "storage.cdrom.bdr"))
- second = _("Blu-ray-R");
- if (hal_device_get_property_bool (d, "storage.cdrom.bdre"))
- second = _("Blu-ray-RE");
-
- if (second != NULL)
- {
- /* translators: This wis something like "CD-ROM/DVD Drive" or
- "CD-RW/Blue-ray Drive" depending on the properties of the drive */
- s = g_strdup_printf (_("%s/%s Drive"), first, second);
- }
- else
- {
- /* translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
- depending on the properties of the drive */
- s = g_strdup_printf (_("%s Drive"), first);
- }
- }
- else if (strcmp (drive_type, "floppy") == 0)
- s = g_strdup (_("Floppy Drive"));
- else if (strcmp (drive_type, "disk") == 0)
- {
- if (drive_bus != NULL)
- {
- if (strcmp (drive_bus, "linux_raid") == 0)
- s = g_strdup (_("Software RAID Drive"));
- if (strcmp (drive_bus, "usb") == 0)
- s = g_strdup (_("USB Drive"));
- if (strcmp (drive_bus, "ide") == 0)
- s = g_strdup (_("ATA Drive"));
- if (strcmp (drive_bus, "scsi") == 0)
- s = g_strdup (_("SCSI Drive"));
- if (strcmp (drive_bus, "ieee1394") == 0)
- s = g_strdup (_("FireWire Drive"));
- }
- }
- else if (strcmp (drive_type, "tape") == 0)
- s = g_strdup (_("Tape Drive"));
- else if (strcmp (drive_type, "compact_flash") == 0)
- s = g_strdup (_("CompactFlash Drive"));
- else if (strcmp (drive_type, "memory_stick") == 0)
- s = g_strdup (_("MemoryStick Drive"));
- else if (strcmp (drive_type, "smart_media") == 0)
- s = g_strdup (_("SmartMedia Drive"));
- else if (strcmp (drive_type, "sd_mmc") == 0)
- s = g_strdup (_("SD/MMC Drive"));
- else if (strcmp (drive_type, "zip") == 0)
- s = g_strdup (_("Zip Drive"));
- else if (strcmp (drive_type, "jaz") == 0)
- s = g_strdup (_("Jaz Drive"));
- else if (strcmp (drive_type, "flashkey") == 0)
- s = g_strdup (_("Thumb Drive"));
-
- if (s == NULL)
- s = g_strdup (_("Mass Storage Drive"));
-
- return s;
-}
-
-char *
-_drive_get_icon (HalDevice *d)
-{
- char *s = NULL;
- const char *drive_type;
- const char *drive_bus;
- const char *icon_from_hal;
- gboolean is_audio_player;
-
- drive_type = hal_device_get_property_string (d, "storage.drive_type");
- drive_bus = hal_device_get_property_string (d, "storage.bus");
- is_audio_player = hal_device_has_capability (d, "portable_audio_player");
- icon_from_hal = hal_device_get_property_string (d, "info.desktop.icon");
-
- if (strlen (icon_from_hal) > 0)
- s = g_strdup (icon_from_hal);
- else if (is_audio_player)
- s = g_strdup ("multimedia-player");
- else if (strcmp (drive_type, "disk") == 0)
- {
- if (strcmp (drive_bus, "ide") == 0)
- s = g_strdup ("drive-removable-media-ata");
- else if (strcmp (drive_bus, "scsi") == 0)
- s = g_strdup ("drive-removable-media-scsi");
- else if (strcmp (drive_bus, "ieee1394") == 0)
- s = g_strdup ("drive-removable-media-ieee1394");
- else if (strcmp (drive_bus, "usb") == 0)
- s = g_strdup ("drive-removable-media-usb");
- else
- s = g_strdup ("drive-removable-media");
- }
- else if (strcmp (drive_type, "cdrom") == 0)
- {
- /* TODO: maybe there's a better heuristic than this */
- if (hal_device_get_property_int (d, "storage.cdrom.write_speed") > 0)
- s = g_strdup ("drive-optical-recorder");
- else
- s = g_strdup ("drive-optical");
- }
- else if (strcmp (drive_type, "floppy") == 0)
- s = g_strdup ("drive-removable-media-floppy");
- else if (strcmp (drive_type, "tape") == 0)
- s = g_strdup ("drive-removable-media-tape");
- else if (strcmp (drive_type, "compact_flash") == 0)
- s = g_strdup ("drive-removable-media-flash-cf");
- else if (strcmp (drive_type, "memory_stick") == 0)
- s = g_strdup ("drive-removable-media-flash-ms");
- else if (strcmp (drive_type, "smart_media") == 0)
- s = g_strdup ("drive-removable-media-flash-sm");
- else if (strcmp (drive_type, "sd_mmc") == 0)
- s = g_strdup ("drive-removable-media-flash-sd");
-
- if (s == NULL)
- s = g_strdup ("drive-removable-media");
-
- return s;
-}
-
-static void
-_do_update_from_hal (GHalDrive *d)
-{
- d->name = _drive_get_description (d->device);
- d->icon = _drive_get_icon (d->device);
-
- d->uses_removable_media = hal_device_get_property_bool (d->device, "storage.removable");
- if (d->uses_removable_media)
- {
- d->has_media = hal_device_get_property_bool (d->device, "storage.removable.media_available");
- d->is_media_check_automatic = hal_device_get_property_bool (d->device, "storage.media_check_enabled");
- d->can_poll_for_media = hal_device_has_interface (d->device, "org.freedesktop.Hal.Device.Storage.Removable");
- d->can_eject = hal_device_get_property_bool (d->device, "storage.requires_eject");
- }
- else
- {
- d->has_media = TRUE;
- d->is_media_check_automatic = FALSE;
- d->can_poll_for_media = FALSE;
- d->can_eject = FALSE;
- }
-}
-
-static gboolean
-changed_in_idle (gpointer data)
-{
- GHalDrive *drive = data;
-
- g_signal_emit_by_name (drive, "changed");
- if (drive->volume_monitor != NULL)
- g_signal_emit_by_name (drive->volume_monitor, "drive_changed", drive);
- g_object_unref (drive);
-
- return FALSE;
-}
-
-static void
-_update_from_hal (GHalDrive *d, gboolean emit_changed)
-{
- char *old_name;
- char *old_icon;
- gboolean old_uses_removable_media;
- gboolean old_has_media;
- gboolean old_is_media_check_automatic;
- gboolean old_can_poll_for_media;
- gboolean old_can_eject;
-
- G_LOCK (hal_drive);
-
- old_name = g_strdup (d->name);
- old_icon = g_strdup (d->icon);
- old_uses_removable_media = d->uses_removable_media;
- old_has_media = d->has_media;
- old_is_media_check_automatic = d->is_media_check_automatic;
- old_can_poll_for_media = d->can_poll_for_media;
- old_can_eject = d->can_eject;
-
- g_free (d->name);
- g_free (d->icon);
- _do_update_from_hal (d);
-
- if (emit_changed &&
- (old_uses_removable_media != d->uses_removable_media ||
- old_has_media != d->has_media ||
- old_is_media_check_automatic != d->is_media_check_automatic ||
- old_can_poll_for_media != d->can_poll_for_media ||
- old_can_eject != d->can_eject ||
- old_name == NULL ||
- old_icon == NULL ||
- strcmp (old_name, d->name) != 0 ||
- strcmp (old_icon, d->icon) != 0))
- g_idle_add (changed_in_idle, g_object_ref (d));
-
- g_free (old_name);
- g_free (old_icon);
-
- G_UNLOCK (hal_drive);
-}
-
-static void
-hal_condition (HalDevice *device, const char *name, const char *detail, gpointer user_data)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (user_data);
-
- if (strcmp (name, "EjectPressed") == 0)
- {
- g_signal_emit_by_name (hal_drive, "eject-button");
- if (hal_drive->volume_monitor != NULL)
- g_signal_emit_by_name (hal_drive->volume_monitor, "drive-eject-button", hal_drive);
- }
-
-}
-
-static void
-hal_changed (HalDevice *device, const char *key, gpointer user_data)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (user_data);
-
- /*g_warning ("volhal modifying %s (property %s changed)", hal_drive->device_path, key);*/
- _update_from_hal (hal_drive, TRUE);
-}
-
-GHalDrive *
-g_hal_drive_new (GVolumeMonitor *volume_monitor,
- HalDevice *device,
- HalPool *pool)
-{
- GHalDrive *drive;
-
- drive = g_object_new (G_TYPE_HAL_DRIVE, NULL);
- drive->volume_monitor = volume_monitor;
- g_object_add_weak_pointer (G_OBJECT (volume_monitor), (gpointer) &(drive->volume_monitor));
- drive->device_path = g_strdup (hal_device_get_property_string (device, "block.device"));
- drive->device = g_object_ref (device);
- drive->pool = g_object_ref (pool);
-
- drive->name = g_strdup_printf ("Drive for %s", drive->device_path);
- drive->icon = g_strdup_printf ("drive-removable-media");
-
- g_signal_connect_object (device, "hal_property_changed", (GCallback) hal_changed, drive, 0);
- g_signal_connect_object (device, "hal_condition", (GCallback) hal_condition, drive, 0);
-
- _update_from_hal (drive, FALSE);
-
- return drive;
-}
-
-void
-g_hal_drive_disconnected (GHalDrive *drive)
-{
- GList *l, *volumes;
-
- G_LOCK (hal_drive);
- volumes = drive->volumes;
- drive->volumes = NULL;
- G_UNLOCK (hal_drive);
-
- for (l = volumes; l != NULL; l = l->next)
- {
- GHalVolume *volume = l->data;
- g_hal_volume_unset_drive (volume, drive);
- }
-
- g_list_free (volumes);
-}
-
-void
-g_hal_drive_set_volume (GHalDrive *drive,
- GHalVolume *volume)
-{
-
- G_LOCK (hal_drive);
-
- if (g_list_find (drive->volumes, volume) == NULL)
- {
- drive->volumes = g_list_prepend (drive->volumes, volume);
- g_idle_add (changed_in_idle, g_object_ref (drive));
- }
-
- G_UNLOCK (hal_drive);
-}
-
-void
-g_hal_drive_unset_volume (GHalDrive *drive,
- GHalVolume *volume)
-{
- GList *l;
-
- G_LOCK (hal_drive);
-
- l = g_list_find (drive->volumes, volume);
- if (l != NULL)
- {
- drive->volumes = g_list_delete_link (drive->volumes, l);
-
- g_idle_add (changed_in_idle, g_object_ref (drive));
- }
-
- G_UNLOCK (hal_drive);
-}
-
-gboolean
-g_hal_drive_has_udi (GHalDrive *drive, const char *udi)
-{
- gboolean res;
-
- G_LOCK (hal_drive);
- res = strcmp (udi, hal_device_get_udi (drive->device)) == 0;
- G_UNLOCK (hal_drive);
-
- return res;
-}
-
-static GIcon *
-g_hal_drive_get_icon (GDrive *drive)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- GIcon *icon;
-
- G_LOCK (hal_drive);
- icon = g_themed_icon_new_with_default_fallbacks (hal_drive->icon);
- G_UNLOCK (hal_drive);
-
- return icon;
-}
-
-static char *
-g_hal_drive_get_name (GDrive *drive)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- char *name;
-
- G_LOCK (hal_drive);
- name = g_strdup (hal_drive->name);
- G_UNLOCK (hal_drive);
-
- return name;
-}
-
-static GList *
-g_hal_drive_get_volumes (GDrive *drive)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- GList *l;
-
- G_LOCK (hal_drive);
- l = g_list_copy (hal_drive->volumes);
- g_list_foreach (l, (GFunc) g_object_ref, NULL);
- G_UNLOCK (hal_drive);
-
- return l;
-}
-
-static gboolean
-g_hal_drive_has_volumes (GDrive *drive)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- gboolean res;
-
- G_LOCK (hal_drive);
- res = hal_drive->volumes != NULL;
- G_UNLOCK (hal_drive);
-
- return res;
-}
-
-static gboolean
-g_hal_drive_is_media_removable (GDrive *drive)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- gboolean res;
-
- G_LOCK (hal_drive);
- res = hal_drive->uses_removable_media;
- G_UNLOCK (hal_drive);
-
- return res;
-}
-
-static gboolean
-g_hal_drive_has_media (GDrive *drive)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- gboolean res;
-
- G_LOCK (hal_drive);
- res = hal_drive->has_media;
- G_UNLOCK (hal_drive);
-
- return res;
-}
-
-static gboolean
-g_hal_drive_is_media_check_automatic (GDrive *drive)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- gboolean res;
-
- G_LOCK (hal_drive);
- res = hal_drive->is_media_check_automatic;
- G_UNLOCK (hal_drive);
-
- return res;
-}
-
-static gboolean
-g_hal_drive_can_eject (GDrive *drive)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- gboolean res;
-
- G_LOCK (hal_drive);
- res = hal_drive->can_eject;
- G_UNLOCK (hal_drive);
-
- return res;
-}
-
-static gboolean
-g_hal_drive_can_poll_for_media (GDrive *drive)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- gboolean res;
-
- G_LOCK (hal_drive);
- res = hal_drive->can_poll_for_media;
- G_UNLOCK (hal_drive);
-
- return res;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
- GCancellable *cancellable;
-} SpawnOp;
-
-static void
-spawn_cb (GPid pid, gint status, gpointer user_data)
-{
- SpawnOp *data = user_data;
- GSimpleAsyncResult *simple;
-
-
- if (WEXITSTATUS (status) != 0)
- {
- GError *error;
- error = g_error_new_literal (G_IO_ERROR,
- G_IO_ERROR_FAILED_HANDLED,
- "You are not supposed to show G_IO_ERROR_FAILED_HANDLED in the UI");
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- g_error_free (error);
- }
- else
- {
- simple = g_simple_async_result_new (data->object,
- data->callback,
- data->user_data,
- NULL);
- }
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
- g_object_unref (data->object);
- g_free (data);
-}
-
-static void
-g_hal_drive_eject_do (GDrive *drive,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- SpawnOp *data;
- GPid child_pid;
- GError *error;
- char *argv[] = {"gnome-mount", "-e", "-b", "-d", NULL, NULL};
-
- G_LOCK (hal_drive);
- argv[4] = g_strdup (hal_drive->device_path);
- G_UNLOCK (hal_drive);
-
- data = g_new0 (SpawnOp, 1);
- data->object = g_object_ref (drive);
- data->callback = callback;
- data->user_data = user_data;
- data->cancellable = cancellable;
-
- error = NULL;
- if (!g_spawn_async (NULL, /* working dir */
- argv,
- NULL, /* envp */
- G_SPAWN_DO_NOT_REAP_CHILD|G_SPAWN_SEARCH_PATH,
- NULL, /* child_setup */
- NULL, /* user_data for child_setup */
- &child_pid,
- &error))
- {
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
- g_object_unref (drive);
- g_error_free (error);
- g_free (data);
- }
- else
- g_child_watch_add (child_pid, spawn_cb, data);
-
- g_free (argv[4]);
-}
-
-
-typedef struct {
- GDrive *drive;
- GAsyncReadyCallback callback;
- gpointer user_data;
- GCancellable *cancellable;
- GMountUnmountFlags flags;
-
- GList *pending_mounts;
-} UnmountMountsOp;
-
-static void
-free_unmount_mounts_op (UnmountMountsOp *data)
-{
- GList *l;
-
- for (l = data->pending_mounts; l != NULL; l = l->next)
- {
- GMount *mount = l->data;
- g_object_unref (mount);
- }
- g_list_free (data->pending_mounts);
-}
-
-static void _eject_unmount_mounts (UnmountMountsOp *data);
-
-static void
-_eject_unmount_mounts_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- UnmountMountsOp *data = user_data;
- GMount *mount = G_MOUNT (source_object);
- GSimpleAsyncResult *simple;
- GError *error = NULL;
-
- if (!g_mount_unmount_finish (mount, res, &error))
- {
- /* make the error dialog more targeted to the drive.. unless the user has already seen a dialog */
- if (error->code != G_IO_ERROR_FAILED_HANDLED)
- {
- g_error_free (error);
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_BUSY,
- _("Failed to eject media; one or more volumes on the media are busy."));
- }
-
- /* unmount failed; need to fail the whole eject operation */
- simple = g_simple_async_result_new_from_error (G_OBJECT (data->drive),
- data->callback,
- data->user_data,
- error);
- g_error_free (error);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- free_unmount_mounts_op (data);
- }
- else
- {
-
- /*g_warning ("successfully unmounted %p", mount);*/
-
- /* move on to the next mount.. */
- _eject_unmount_mounts (data);
- }
-
- g_object_unref (mount);
-}
-
-static void
-_eject_unmount_mounts (UnmountMountsOp *data)
-{
- GMount *mount;
-
- if (data->pending_mounts == NULL)
- {
-
- /*g_warning ("all pending mounts done; ejecting drive");*/
-
- g_hal_drive_eject_do (data->drive,
- data->cancellable,
- data->callback,
- data->user_data);
-
- g_object_unref (data->drive);
- g_free (data);
- }
- else
- {
- mount = data->pending_mounts->data;
- data->pending_mounts = g_list_remove (data->pending_mounts, mount);
-
- /*g_warning ("unmounting %p", mount);*/
-
- g_mount_unmount (mount,
- data->flags,
- data->cancellable,
- _eject_unmount_mounts_cb,
- data);
- }
-}
-
-static void
-g_hal_drive_eject (GDrive *drive,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- UnmountMountsOp *data;
- GList *l;
-
- /* first we need to go through all the volumes and unmount their assoicated mounts (if any) */
-
- data = g_new0 (UnmountMountsOp, 1);
- data->drive = g_object_ref (drive);
- data->cancellable = cancellable;
- data->callback = callback;
- data->user_data = user_data;
- data->flags = flags;
-
- G_LOCK (hal_drive);
- for (l = hal_drive->volumes; l != NULL; l = l->next)
- {
- GHalVolume *volume = l->data;
- GMount *mount; /* the mount may be foreign; cannot assume GHalMount */
-
- mount = g_volume_get_mount (G_VOLUME (volume));
- if (mount != NULL && g_mount_can_unmount (mount))
- data->pending_mounts = g_list_prepend (data->pending_mounts, g_object_ref (mount));
- }
- G_UNLOCK (hal_drive);
-
- _eject_unmount_mounts (data);
-}
-
-static gboolean
-g_hal_drive_eject_finish (GDrive *drive,
- GAsyncResult *result,
- GError **error)
-{
- return TRUE;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
- GCancellable *cancellable;
-} PollOp;
-
-static void
-poll_for_media_cb (DBusPendingCall *pending_call, void *user_data)
-{
- PollOp *data = (PollOp *) user_data;
- GSimpleAsyncResult *simple;
- DBusMessage *reply;
-
- reply = dbus_pending_call_steal_reply (pending_call);
-
- if (dbus_message_get_type (reply) == DBUS_MESSAGE_TYPE_ERROR)
- {
- GError *error;
- DBusError dbus_error;
-
- dbus_error_init (&dbus_error);
- dbus_set_error_from_message (&dbus_error, reply);
- error = g_error_new (G_IO_ERROR,
- G_IO_ERROR_FAILED,
- "Cannot invoke CheckForMedia on HAL: %s: %s", dbus_error.name, dbus_error.message);
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
- g_error_free (error);
- dbus_error_free (&dbus_error);
- goto out;
- }
-
- /* TODO: parse reply and extract result?
- * (the result is whether the media availability state changed)
- */
-
- simple = g_simple_async_result_new (data->object,
- data->callback,
- data->user_data,
- NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- out:
- g_object_unref (data->object);
- dbus_message_unref (reply);
- dbus_pending_call_unref (pending_call);
-}
-
-
-static void
-g_hal_drive_poll_for_media (GDrive *drive,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- DBusConnection *con;
- DBusMessage *msg;
- DBusPendingCall *pending_call;
- PollOp *data;
-
- data = g_new0 (PollOp, 1);
- data->object = g_object_ref (drive);
- data->callback = callback;
- data->user_data = user_data;
- data->cancellable = cancellable;
-
- /*g_warning ("Rescanning udi %s", hal_device_get_udi (hal_drive->device));*/
-
- G_LOCK (hal_drive);
- con = hal_pool_get_dbus_connection (hal_drive->pool);
- msg = dbus_message_new_method_call ("org.freedesktop.Hal",
- hal_device_get_udi (hal_drive->device),
- "org.freedesktop.Hal.Device.Storage.Removable",
- "CheckForMedia");
- G_UNLOCK (hal_drive);
-
- if (!dbus_connection_send_with_reply (con, msg, &pending_call, -1))
- {
- GError *error;
- GSimpleAsyncResult *simple;
- error = g_error_new_literal (G_IO_ERROR,
- G_IO_ERROR_FAILED,
- "Cannot invoke CheckForMedia on HAL");
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
- g_error_free (error);
- g_object_unref (data->object);
- g_free (data);
- }
- else
- dbus_pending_call_set_notify (pending_call,
- poll_for_media_cb,
- data,
- (DBusFreeFunction) g_free);
-
- dbus_message_unref (msg);
-}
-
-static gboolean
-g_hal_drive_poll_for_media_finish (GDrive *drive,
- GAsyncResult *result,
- GError **error)
-{
- /*g_warning ("poll finish");*/
- return TRUE;
-}
-
-static char *
-g_hal_drive_get_identifier (GDrive *drive,
- const char *kind)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- char *res;
-
- res = NULL;
-
- G_LOCK (hal_drive);
-
- if (strcmp (kind, G_VOLUME_IDENTIFIER_KIND_HAL_UDI) == 0)
- res = g_strdup (hal_device_get_udi (hal_drive->device));
-
- if (strcmp (kind, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE) == 0)
- res = g_strdup (hal_drive->device_path);
-
- G_UNLOCK (hal_drive);
-
- return res;
-}
-
-static char **
-g_hal_drive_enumerate_identifiers (GDrive *drive)
-{
- GHalDrive *hal_drive = G_HAL_DRIVE (drive);
- GPtrArray *res;
-
- res = g_ptr_array_new ();
-
- G_LOCK (hal_drive);
-
- g_ptr_array_add (res,
- g_strdup (G_VOLUME_IDENTIFIER_KIND_HAL_UDI));
-
- if (hal_drive->device_path && *hal_drive->device_path != 0)
- g_ptr_array_add (res,
- g_strdup (G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE));
-
-
- G_UNLOCK (hal_drive);
-
- /* Null-terminate */
- g_ptr_array_add (res, NULL);
-
- return (char **)g_ptr_array_free (res, FALSE);
-}
-
-static void
-g_hal_drive_drive_iface_init (GDriveIface *iface)
-{
- iface->get_name = g_hal_drive_get_name;
- iface->get_icon = g_hal_drive_get_icon;
- iface->has_volumes = g_hal_drive_has_volumes;
- iface->get_volumes = g_hal_drive_get_volumes;
- iface->is_media_removable = g_hal_drive_is_media_removable;
- iface->has_media = g_hal_drive_has_media;
- iface->is_media_check_automatic = g_hal_drive_is_media_check_automatic;
- iface->can_eject = g_hal_drive_can_eject;
- iface->can_poll_for_media = g_hal_drive_can_poll_for_media;
- iface->eject = g_hal_drive_eject;
- iface->eject_finish = g_hal_drive_eject_finish;
- iface->poll_for_media = g_hal_drive_poll_for_media;
- iface->poll_for_media_finish = g_hal_drive_poll_for_media_finish;
- iface->get_identifier = g_hal_drive_get_identifier;
- iface->enumerate_identifiers = g_hal_drive_enumerate_identifiers;
-}
diff --git a/monitor/hal/ghaldrive.h b/monitor/hal/ghaldrive.h
deleted file mode 100644
index 7832db59..00000000
--- a/monitor/hal/ghaldrive.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_HAL_DRIVE_H__
-#define __G_HAL_DRIVE_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include "hal-pool.h"
-#include "ghalvolumemonitor.h"
-
-G_BEGIN_DECLS
-
-#define G_TYPE_HAL_DRIVE (g_hal_drive_get_type ())
-#define G_HAL_DRIVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_HAL_DRIVE, GHalDrive))
-#define G_HAL_DRIVE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_HAL_DRIVE, GHalDriveClass))
-#define G_IS_HAL_DRIVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_HAL_DRIVE))
-#define G_IS_HAL_DRIVE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_HAL_DRIVE))
-
-typedef struct _GHalDriveClass GHalDriveClass;
-
-struct _GHalDriveClass {
- GObjectClass parent_class;
-};
-
-GType g_hal_drive_get_type (void) G_GNUC_CONST;
-
-GHalDrive *g_hal_drive_new (GVolumeMonitor *volume_monitor,
- HalDevice *device,
- HalPool *pool);
-gboolean g_hal_drive_has_udi (GHalDrive *drive,
- const char *udi);
-void g_hal_drive_set_volume (GHalDrive *drive,
- GHalVolume *volume);
-void g_hal_drive_unset_volume (GHalDrive *drive,
- GHalVolume *volume);
-void g_hal_drive_disconnected (GHalDrive *drive);
-char * _drive_get_icon (HalDevice *d);
-
-G_END_DECLS
-
-#endif /* __G_HAL_DRIVE_H__ */
diff --git a/monitor/hal/ghalmount.c b/monitor/hal/ghalmount.c
deleted file mode 100644
index 138c9a10..00000000
--- a/monitor/hal/ghalmount.c
+++ /dev/null
@@ -1,1592 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-
-#include "ghalvolumemonitor.h"
-#include "ghalmount.h"
-#include "ghalvolume.h"
-
-#include "hal-utils.h"
-
-/* Protects all fields of GHalDrive that can change */
-G_LOCK_DEFINE_STATIC(hal_mount);
-
-struct _GHalMount {
- GObject parent;
-
- GVolumeMonitor *volume_monitor; /* owned by volume monitor */
- GHalVolume *volume; /* owned by volume monitor */
-
- char *name;
- GIcon *icon;
- char *device_path;
- char *mount_path;
-
- char *uuid;
-
- char *override_name;
- GIcon *override_icon;
- GFile *override_root;
- gboolean cannot_unmount;
- gboolean searched_for_icon;
-
- HalDevice *device;
- HalDevice *drive_device;
-};
-
-static GFile *
-_g_find_file_insensitive_finish (GFile *parent,
- GAsyncResult *result,
- GError **error);
-
-static void
-_g_find_file_insensitive_async (GFile *parent,
- const gchar *name,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-
-static GFile *get_root (GHalMount *hal_mount);
-
-static void g_hal_mount_mount_iface_init (GMountIface *iface);
-
-G_DEFINE_TYPE_EXTENDED (GHalMount, g_hal_mount, G_TYPE_OBJECT, 0,
- G_IMPLEMENT_INTERFACE (G_TYPE_MOUNT,
- g_hal_mount_mount_iface_init))
-
-static void
-g_hal_mount_finalize (GObject *object)
-{
- GHalMount *mount;
-
- mount = G_HAL_MOUNT (object);
-
- if (mount->volume != NULL)
- g_hal_volume_unset_mount (mount->volume, mount);
-
- g_free (mount->device_path);
- g_free (mount->mount_path);
- g_free (mount->uuid);
-
- if (mount->device != NULL)
- g_object_unref (mount->device);
- if (mount->drive_device != NULL)
- g_object_unref (mount->drive_device);
-
- g_free (mount->name);
- if (mount->icon != NULL)
- g_object_unref (mount->icon);
-
- g_free (mount->override_name);
- if (mount->override_icon != NULL)
- g_object_unref (mount->override_icon);
-
- if (mount->override_root != NULL)
- g_object_unref (mount->override_root);
-
- if (mount->volume_monitor != NULL)
- g_object_remove_weak_pointer (G_OBJECT (mount->volume_monitor), (gpointer) &(mount->volume_monitor));
-
- if (G_OBJECT_CLASS (g_hal_mount_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_hal_mount_parent_class)->finalize) (object);
-}
-
-static void
-g_hal_mount_class_init (GHalMountClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_hal_mount_finalize;
-}
-
-static void
-g_hal_mount_init (GHalMount *hal_mount)
-{
-}
-
-static gboolean
-changed_in_idle (gpointer data)
-{
- GHalMount *mount = data;
-
- g_signal_emit_by_name (mount, "changed");
- if (mount->volume_monitor != NULL)
- g_signal_emit_by_name (mount->volume_monitor, "mount_changed", mount);
- g_object_unref (mount);
-
- return FALSE;
-}
-
-typedef struct _MountIconSearchData
-{
- GHalMount *mount;
- GFile *root;
-} MountIconSearchData;
-
-static void
-clear_icon_search_data (MountIconSearchData *data)
-{
- if (data->mount)
- g_object_unref (data->mount);
- if (data->root)
- g_object_unref (data->root);
- g_free (data);
-}
-
-static void
-on_icon_file_located (GObject *source_object, GAsyncResult *res,
- gpointer user_data)
-{
- GFile *icon_file;
- GIcon *icon;
- MountIconSearchData *data = (MountIconSearchData *) (user_data);
-
- icon_file = _g_find_file_insensitive_finish (G_FILE (source_object),
- res, NULL);
-
- /* TODO: check if the file actually exists? */
-
- icon = g_file_icon_new (icon_file);
- g_object_unref (icon_file);
-
- g_hal_mount_override_icon (data->mount, icon);
- g_object_unref (icon);
-
- clear_icon_search_data (data);
-}
-
-static void
-on_autorun_loaded (GObject *source_object, GAsyncResult *res,
- gpointer user_data)
-{
- gchar *content, *relative_icon_path = NULL;
- gsize content_length;
- MountIconSearchData *data = (MountIconSearchData *) (user_data);
-
- if (g_file_load_contents_finish (G_FILE (source_object), res, &content,
- &content_length, NULL, NULL))
- {
- /* Scan through for an "icon=" line. Can't use GKeyFile,
- * because .inf files aren't always valid key files
- **/
- GRegex *icon_regex;
- GMatchInfo *match_info;
-
- /* [^,] is because sometimes the icon= line
- * has a comma at the end
- **/
- icon_regex = g_regex_new ("icon=([^,\\r\\n]+)",
- G_REGEX_CASELESS, 0, NULL);
- g_regex_match (icon_regex, content, 0,
- &match_info);
-
- /* Even if there are multiple matches, pick only the
- * first.
- **/
- if (g_match_info_matches (match_info))
- {
- gchar *chr;
- gchar *word = g_match_info_fetch (match_info, 1);
-
- /* Replace '\' with '/' */
- while ((chr = strchr (word, '\\')) != NULL)
- *chr = '/';
-
- /* If the file name's not valid UTF-8,
- * don't even try to load it
- **/
- if (g_utf8_validate (word, -1, NULL))
- relative_icon_path = word;
- else
- g_free (word);
- }
-
- g_match_info_free (match_info);
-
- g_regex_unref (icon_regex);
- g_free (content);
- }
-
- /* some autorun.in points to the .exe file for the icon; make sure we avoid using that */
- if (relative_icon_path && !g_str_has_suffix (relative_icon_path, ".exe"))
- {
- _g_find_file_insensitive_async (data->root,
- relative_icon_path,
- NULL, on_icon_file_located,
- data);
-
- g_free (relative_icon_path);
- }
- else
- clear_icon_search_data (data);
-}
-
-static void
-on_autorun_located (GObject *source_object, GAsyncResult *res,
- gpointer user_data)
-{
- GFile *autorun_path;
- MountIconSearchData *data = (MountIconSearchData *) (user_data);
-
- autorun_path = _g_find_file_insensitive_finish (G_FILE (source_object),
- res, NULL);
- if (autorun_path)
- g_file_load_contents_async (autorun_path, NULL, on_autorun_loaded, data);
- else
- clear_icon_search_data (data);
-
- g_object_unref (autorun_path);
-}
-
-static void
-_g_find_mount_icon (GHalMount *m)
-{
- MountIconSearchData *search_data;
-
- m->searched_for_icon = TRUE;
-
- search_data = g_new0 (MountIconSearchData, 1);
- search_data->mount = g_object_ref (m);
- search_data->root = get_root (m);
-
- _g_find_file_insensitive_async (search_data->root,
- "autorun.inf",
- NULL, on_autorun_located,
- search_data);
-}
-
-#define KILOBYTE_FACTOR 1000.0
-#define MEGABYTE_FACTOR (1000.0 * 1000.0)
-#define GIGABYTE_FACTOR (1000.0 * 1000.0 * 1000.0)
-
-static char *
-format_size_for_display (guint64 size)
-{
- char *str;
- gdouble displayed_size;
-
- if (size < MEGABYTE_FACTOR)
- {
- displayed_size = (double) size / KILOBYTE_FACTOR;
- str = g_strdup_printf (_("%.1f kB"), displayed_size);
- }
- else if (size < GIGABYTE_FACTOR)
- {
- displayed_size = (double) size / MEGABYTE_FACTOR;
- str = g_strdup_printf (_("%.1f MB"), displayed_size);
- }
- else
- {
- displayed_size = (double) size / GIGABYTE_FACTOR;
- str = g_strdup_printf (_("%.1f GB"), displayed_size);
- }
-
- return str;
-}
-
-static void
-do_update_from_hal (GHalMount *m)
-{
- HalDevice *volume;
- HalDevice *drive;
- char *name;
- const char *icon_name;
- const char *icon_name_fallback;
- const char *drive_type;
- const char *drive_bus;
- gboolean drive_uses_removable_media;
- const char *volume_fs_label;
- guint64 volume_size;
- gboolean volume_is_disc;
- gboolean volume_disc_has_audio;
- gboolean volume_disc_has_data;
- const char *volume_disc_type;
- gboolean volume_disc_is_blank;
- gboolean is_audio_player;
- const char *icon_from_hal;
- const char *volume_icon_from_hal;
- const char *name_from_hal;
- const char *volume_name_from_hal;
- gboolean is_crypto;
- gboolean is_crypto_cleartext;
-
- volume = m->device;
- drive = m->drive_device;
-
- drive_type = hal_device_get_property_string (drive, "storage.drive_type");
- drive_bus = hal_device_get_property_string (drive, "storage.bus");
- drive_uses_removable_media = hal_device_get_property_bool (drive, "storage.removable");
- volume_fs_label = hal_device_get_property_string (volume, "volume.label");
- volume_size = hal_device_get_property_uint64 (volume, "volume.size");
- volume_is_disc = hal_device_get_property_bool (volume, "volume.is_disc");
- volume_disc_has_audio = hal_device_get_property_bool (volume, "volume.disc.has_audio");
- volume_disc_has_data = hal_device_get_property_bool (volume, "volume.disc.has_data");
- volume_disc_is_blank = hal_device_get_property_bool (volume, "volume.disc.is_blank");
- volume_disc_type = hal_device_get_property_string (volume, "volume.disc.type");
- is_audio_player = hal_device_has_capability (drive, "portable_audio_player");
- icon_from_hal = hal_device_get_property_string (drive, "info.desktop.icon");
- volume_icon_from_hal = hal_device_get_property_string (volume, "info.desktop.icon");
- name_from_hal = hal_device_get_property_string (drive, "info.desktop.name");
- volume_name_from_hal = hal_device_get_property_string (volume, "info.desktop.name");
-
- is_crypto = FALSE;
- is_crypto_cleartext = FALSE;
- if (strcmp (hal_device_get_property_string (volume, "volume.fsusage"), "crypto") == 0)
- is_crypto = TRUE;
-
- if (strlen (hal_device_get_property_string (volume, "volume.crypto_luks.clear.backing_volume")) > 0)
- is_crypto_cleartext = TRUE;
-
- /*g_warning ("drive_type='%s'", drive_type); */
- /*g_warning ("drive_bus='%s'", drive_bus); */
- /*g_warning ("drive_uses_removable_media=%d", drive_uses_removable_media); */
-
- icon_name_fallback = NULL;
-
- if (strlen (volume_icon_from_hal) > 0)
- icon_name = volume_icon_from_hal;
- else if (strlen (icon_from_hal) > 0)
- icon_name = icon_from_hal;
- else if (is_audio_player)
- icon_name = "multimedia-player";
- else if (strcmp (drive_type, "disk") == 0)
- {
- if (strcmp (drive_bus, "ide") == 0)
- icon_name = "drive-harddisk-ata";
- else if (strcmp (drive_bus, "scsi") == 0)
- icon_name = "drive-harddisk-scsi";
- else if (strcmp (drive_bus, "ieee1394") == 0)
- icon_name = "drive-harddisk-ieee1394";
- else if (strcmp (drive_bus, "usb") == 0)
- icon_name = "drive-harddisk-usb";
- else
- icon_name = "drive-harddisk";
- }
- else if (strcmp (drive_type, "cdrom") == 0)
- icon_name = get_disc_icon (volume_disc_type);
- else if (strcmp (drive_type, "floppy") == 0)
- icon_name = "media-floppy";
- else if (strcmp (drive_type, "tape") == 0)
- icon_name = "media-tape";
- else if (strcmp (drive_type, "compact_flash") == 0)
- icon_name = "media-flash-cf";
- else if (strcmp (drive_type, "memory_stick") == 0)
- icon_name = "media-flash-ms";
- else if (strcmp (drive_type, "smart_media") == 0)
- icon_name = "media-flash-sm";
- else if (strcmp (drive_type, "sd_mmc") == 0)
- icon_name = "media-flash-sd";
- else
- icon_name = "drive-harddisk";
-
- /* Create default fallbacks for the icon_name by default
- * with get_themed_icon_with_fallbacks () */
- icon_name_fallback = icon_name;
-
- /* Note: we are not chaning the default fallbacks
- * so we get all the fallbacks if the media-encrytped
- * icon is not there */
- if (is_crypto || is_crypto_cleartext)
- icon_name = "media-encrypted";
-
- if (strlen (volume_name_from_hal) > 0)
- name = g_strdup (volume_name_from_hal);
- else if (strlen (name_from_hal) > 0)
- name = g_strdup (name_from_hal);
- else if (volume_fs_label != NULL && strlen (volume_fs_label) > 0)
- name = g_strdup (volume_fs_label);
- else if (volume_is_disc)
- {
- if (volume_disc_has_audio)
- {
- if (volume_disc_has_data)
- name = g_strdup (_("Mixed Audio/Data Disc"));
- else
- name = g_strdup (_("Audio Disc"));
- }
- else
- name = g_strdup (get_disc_name (volume_disc_type, volume_disc_is_blank));
- }
- else
- {
- char *size;
-
- size = format_size_for_display (volume_size);
- /* Translators: %s is the size of the mount (e.g. 512 MB) */
- name = g_strdup_printf (_("%s Media"), size);
- g_free (size);
- }
-
- if (m->override_name != NULL)
- {
- m->name = g_strdup (m->override_name);
- g_free (name);
- }
- else
- m->name = name;
-
- if (m->override_icon != NULL)
- m->icon = g_object_ref (m->override_icon);
- else
- m->icon = get_themed_icon_with_fallbacks (icon_name,
- icon_name_fallback);
-
- /* If this is a CD-ROM, begin searching for an icon specified in
- * autorun.inf.
- **/
- if (strcmp (drive_type, "cdrom") == 0 && !m->searched_for_icon)
- _g_find_mount_icon (m);
-}
-
-
-static void
-update_from_hal (GHalMount *m, gboolean emit_changed)
-{
- char *old_name;
- GIcon *old_icon;
-
- G_LOCK (hal_mount);
-
- old_name = g_strdup (m->name);
- old_icon = m->icon != NULL ? g_object_ref (m->icon) : NULL;
-
- g_free (m->name);
- if (m->icon != NULL)
- g_object_unref (m->icon);
- do_update_from_hal (m);
-
- if (emit_changed)
- {
- if (old_name == NULL ||
- old_icon == NULL ||
- strcmp (old_name, m->name) != 0 ||
- (! g_icon_equal (old_icon, m->icon)))
- g_idle_add (changed_in_idle, g_object_ref (m));
- }
- g_free (old_name);
- if (old_icon != NULL)
- g_object_unref (old_icon);
-
- G_UNLOCK (hal_mount);
-}
-
-static void
-hal_changed (HalDevice *device, const char *key, gpointer user_data)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (user_data);
-
- /*g_warning ("mounthal modifying %s (property %s changed)", hal_mount->device_path, key); */
- update_from_hal (hal_mount, TRUE);
-}
-
-static void
-compute_uuid (GHalMount *mount)
-{
- const char *fs_uuid;
- const char *fs_label;
-
- /* use the FS uuid before falling back to the FS label */
-
- fs_uuid = hal_device_get_property_string (mount->device, "volume.uuid");
- fs_label = hal_device_get_property_string (mount->device, "volume.label");
-
- if (strlen (fs_uuid) == 0)
- {
- if (strlen (fs_label) == 0)
- mount->uuid = NULL;
- else
- mount->uuid = g_strdup (fs_label);
- }
- else
- mount->uuid = g_strdup (fs_uuid);
-}
-
-
-GHalMount *
-g_hal_mount_new_for_hal_device (GVolumeMonitor *volume_monitor,
- HalDevice *device,
- GFile *override_root,
- const char *override_name,
- GIcon *override_icon,
- gboolean cannot_unmount,
- HalPool *pool,
- GHalVolume *volume)
-{
- HalDevice *drive_device;
- const char *storage_udi;
- GHalMount *mount;
-
- storage_udi = hal_device_get_property_string (device, "block.storage_device");
- if (storage_udi == NULL)
- goto fail;
-
- /* g_warning ("storage_udi = %s", storage_udi); */
-
- drive_device = hal_pool_get_device_by_udi (pool, storage_udi);
- if (drive_device == NULL)
- goto fail;
-
- /* g_warning ("drive_device = %p", drive_device); */
-
- mount = g_object_new (G_TYPE_HAL_MOUNT, NULL);
- mount->volume_monitor = volume_monitor;
- g_object_add_weak_pointer (G_OBJECT (mount->volume_monitor), (gpointer) &(mount->volume_monitor));
- mount->device_path = g_strdup (hal_device_get_property_string (device, "block.device"));
- mount->mount_path = g_strdup ("/");
- mount->device = g_object_ref (device);
- mount->drive_device = g_object_ref (drive_device);
- mount->override_root = override_root != NULL ? g_object_ref (override_root) : NULL;
- mount->override_icon = override_icon != NULL ? g_object_ref (override_icon) : NULL;
- mount->override_name = g_strdup (override_name);
- mount->cannot_unmount = cannot_unmount;
-
- g_signal_connect_object (device, "hal_property_changed", (GCallback) hal_changed, mount, 0);
- g_signal_connect_object (drive_device, "hal_property_changed", (GCallback) hal_changed, mount, 0);
-
- compute_uuid (mount);
- update_from_hal (mount, FALSE);
-
- /* need to do this last */
- mount->volume = volume;
- if (volume != NULL)
- g_hal_volume_set_mount (volume, mount);
-
- return mount;
-
- fail:
- return NULL;
-}
-
-void
-g_hal_mount_override_name (GHalMount *mount, const char *name)
-{
- G_LOCK (hal_mount);
-
- g_free (mount->override_name);
-
- if (name != NULL)
- mount->override_name = g_strdup (name);
- else
- mount->override_name = NULL;
-
- G_UNLOCK (hal_mount);
-
- update_from_hal (mount, TRUE);
-}
-
-void
-g_hal_mount_override_icon (GHalMount *mount, GIcon *icon)
-{
- G_LOCK (hal_mount);
- if (mount->override_icon != NULL)
- g_object_unref (mount->override_icon);
-
- if (icon != NULL)
- mount->override_icon = g_object_ref (icon);
- else
- mount->override_icon = NULL;
-
- G_UNLOCK (hal_mount);
-
- update_from_hal (mount, TRUE);
-}
-
-GHalMount *
-g_hal_mount_new (GVolumeMonitor *volume_monitor,
- GUnixMountEntry *mount_entry,
- HalPool *pool,
- GHalVolume *volume)
-{
- HalDevice *device;
- HalDevice *drive_device;
- const char *storage_udi;
- GHalMount *mount;
-
- /* If no volume for mount - Ignore internal things */
- if (volume == NULL && !g_unix_mount_guess_should_display (mount_entry))
- return NULL;
-
- mount = g_object_new (G_TYPE_HAL_MOUNT, NULL);
- mount->volume_monitor = volume_monitor;
- g_object_add_weak_pointer (G_OBJECT (volume_monitor), (gpointer) &(mount->volume_monitor));
- mount->device_path = g_strdup (g_unix_mount_get_device_path (mount_entry));
- mount->mount_path = g_strdup (g_unix_mount_get_mount_path (mount_entry));
- mount->device = NULL;
- mount->drive_device = NULL;
- mount->uuid = NULL;
-
- if (pool != NULL)
- {
- device = hal_pool_get_device_by_capability_and_string (pool,
- "volume",
- "block.device",
- mount->device_path);
- /* g_warning ("device = %p for %s", device, mount->device_path); */
- if (device != NULL)
- {
- /* g_warning ("udi = %s", hal_device_get_udi (device)); */
-
- storage_udi = hal_device_get_property_string (device, "block.storage_device");
- if (storage_udi == NULL)
- goto not_hal;
-
- /* g_warning ("storage_udi = %s", storage_udi); */
-
- drive_device = hal_pool_get_device_by_udi (pool, storage_udi);
- if (drive_device == NULL)
- goto not_hal;
-
- /* g_warning ("drive_device = %p", drive_device); */
-
- mount->device = g_object_ref (device);
- mount->drive_device = g_object_ref (drive_device);
-
- g_signal_connect_object (device, "hal_property_changed", (GCallback) hal_changed, mount, 0);
- g_signal_connect_object (drive_device, "hal_property_changed", (GCallback) hal_changed, mount, 0);
-
- compute_uuid (mount);
- update_from_hal (mount, FALSE);
-
- goto was_hal;
- }
- }
-
- not_hal:
-
- if (volume != NULL)
- {
- g_object_unref (mount);
- return NULL;
- }
-
- mount->name = g_unix_mount_guess_name (mount_entry);
- mount->icon = g_unix_mount_guess_icon (mount_entry);
-
- was_hal:
-
- /* need to do this last */
- mount->volume = volume;
- if (volume != NULL)
- g_hal_volume_set_mount (volume, mount);
-
- return mount;
-}
-
-void
-g_hal_mount_unmounted (GHalMount *mount)
-{
- G_LOCK (hal_mount);
- if (mount->volume != NULL)
- {
- g_hal_volume_unset_mount (mount->volume, mount);
- mount->volume = NULL;
- g_idle_add (changed_in_idle, g_object_ref (mount));
- }
- G_UNLOCK (hal_mount);
-}
-
-void
-g_hal_mount_unset_volume (GHalMount *mount,
- GHalVolume *volume)
-{
- G_LOCK (hal_mount);
- if (mount->volume == volume)
- {
- mount->volume = NULL;
- g_idle_add (changed_in_idle, g_object_ref (mount));
- }
- G_UNLOCK (hal_mount);
-}
-
-static GFile *
-get_root (GHalMount *hal_mount)
-{
- if (hal_mount->override_root != NULL)
- return g_object_ref (hal_mount->override_root);
- else
- return g_file_new_for_path (hal_mount->mount_path);
-}
-
-static GFile *
-g_hal_mount_get_root (GMount *mount)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- GFile *root;
-
- G_LOCK (hal_mount);
- root = get_root (hal_mount);
- G_UNLOCK (hal_mount);
-
- return root;
-}
-
-static GIcon *
-g_hal_mount_get_icon (GMount *mount)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- GIcon *icon;
-
- G_LOCK (hal_mount);
- icon = g_object_ref (hal_mount->icon);
- G_UNLOCK (hal_mount);
-
- return icon;
-}
-
-static char *
-g_hal_mount_get_uuid (GMount *mount)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- char *uuid;
-
- G_LOCK (hal_mount);
- uuid = g_strdup (hal_mount->uuid);
- G_UNLOCK (hal_mount);
-
- return uuid;
-}
-
-static char *
-g_hal_mount_get_name (GMount *mount)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- char *name;
-
- G_LOCK (hal_mount);
- name = g_strdup (hal_mount->name);
- G_UNLOCK (hal_mount);
-
- return name;
-}
-
-gboolean
-g_hal_mount_has_uuid (GHalMount *mount,
- const char *uuid)
-{
- gboolean res;
-
- G_LOCK (hal_mount);
- res = FALSE;
- if (mount->uuid != NULL)
- res = strcmp (mount->uuid, uuid) == 0;
- G_UNLOCK (hal_mount);
-
- return res;
-}
-
-gboolean
-g_hal_mount_has_mount_path (GHalMount *mount,
- const char *mount_path)
-{
- gboolean res;
-
- G_LOCK (hal_mount);
- res = strcmp (mount->mount_path, mount_path) == 0;
- G_UNLOCK (hal_mount);
- return res;
-}
-
-gboolean
-g_hal_mount_has_udi (GHalMount *mount,
- const char *udi)
-{
- gboolean res;
-
- G_LOCK (hal_mount);
- res = FALSE;
- if (mount->device != NULL)
- res = strcmp (hal_device_get_udi (mount->device), udi) == 0;
- G_UNLOCK (hal_mount);
-
- return res;
-}
-
-static GDrive *
-g_hal_mount_get_drive (GMount *mount)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- GDrive *drive;
-
- G_LOCK (hal_mount);
- drive = NULL;
- if (hal_mount->volume != NULL)
- drive = g_volume_get_drive (G_VOLUME (hal_mount->volume));
- G_UNLOCK (hal_mount);
-
- return drive;
-}
-
-static GVolume *
-g_hal_mount_get_volume (GMount *mount)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- GVolume *volume;
-
- G_LOCK (hal_mount);
- volume = NULL;
- if (hal_mount->volume)
- volume = G_VOLUME (g_object_ref (hal_mount->volume));
- G_UNLOCK (hal_mount);
-
- return volume;
-}
-
-static gboolean
-g_hal_mount_can_unmount (GMount *mount)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- gboolean res;
-
- G_LOCK (hal_mount);
- res = TRUE;
- if (hal_mount->cannot_unmount)
- res = FALSE;
- G_UNLOCK (hal_mount);
-
- return res;
-}
-
-static gboolean
-g_hal_mount_can_eject (GMount *mount)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- GDrive *drive;
- gboolean can_eject;
-
- G_LOCK (hal_mount);
- can_eject = FALSE;
- if (hal_mount->volume != NULL)
- {
- drive = g_volume_get_drive (G_VOLUME (hal_mount->volume));
- if (drive != NULL)
- can_eject = g_drive_can_eject (drive);
- }
- G_UNLOCK (hal_mount);
-
- return can_eject;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
- GCancellable *cancellable;
- int error_fd;
- GIOChannel *error_channel;
- guint error_channel_source_id;
- GString *error_string;
- gboolean using_legacy;
-} UnmountOp;
-
-static void
-unmount_cb (GPid pid, gint status, gpointer user_data)
-{
- UnmountOp *data = user_data;
- GSimpleAsyncResult *simple;
-
- if (WEXITSTATUS (status) != 0)
- {
- if (data->using_legacy)
- {
- GError *error;
- error = g_error_new_literal (G_IO_ERROR,
- G_IO_ERROR_FAILED,
- data->error_string->str);
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- g_error_free (error);
- }
- else
- {
- GError *error;
- error = g_error_new_literal (G_IO_ERROR,
- G_IO_ERROR_FAILED_HANDLED,
- "You are not supposed to show G_IO_ERROR_FAILED_HANDLED in the UI");
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- g_error_free (error);
- }
- }
- else
- {
- simple = g_simple_async_result_new (data->object,
- data->callback,
- data->user_data,
- NULL);
- }
-
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- g_source_remove (data->error_channel_source_id);
- g_io_channel_unref (data->error_channel);
- g_string_free (data->error_string, TRUE);
- close (data->error_fd);
- g_spawn_close_pid (pid);
-
- g_object_unref (data->object);
- g_free (data);
-}
-
-static gboolean
-unmount_read_error (GIOChannel *channel,
- GIOCondition condition,
- gpointer user_data)
-{
- char *str;
- gsize str_len;
- UnmountOp *data = user_data;
-
- g_io_channel_read_to_end (channel, &str, &str_len, NULL);
- g_string_append (data->error_string, str);
- g_free (str);
- return TRUE;
-}
-
-static void
-unmount_do (GMount *mount,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data,
- char **argv,
- gboolean using_legacy)
-{
- UnmountOp *data;
- GPid child_pid;
- GError *error;
-
- data = g_new0 (UnmountOp, 1);
- data->object = g_object_ref (mount);
- data->callback = callback;
- data->user_data = user_data;
- data->cancellable = cancellable;
- data->using_legacy = using_legacy;
-
- error = NULL;
- if (!g_spawn_async_with_pipes (NULL, /* working dir */
- argv,
- NULL, /* envp */
- G_SPAWN_DO_NOT_REAP_CHILD|G_SPAWN_SEARCH_PATH,
- NULL, /* child_setup */
- NULL, /* user_data for child_setup */
- &child_pid,
- NULL, /* standard_input */
- NULL, /* standard_output */
- &(data->error_fd),
- &error))
- {
- GSimpleAsyncResult *simple;
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
- g_error_free (error);
- g_free (data);
- return;
- }
- data->error_string = g_string_new ("");
- data->error_channel = g_io_channel_unix_new (data->error_fd);
- data->error_channel_source_id = g_io_add_watch (data->error_channel, G_IO_IN, unmount_read_error, data);
- g_child_watch_add (child_pid, unmount_cb, data);
-}
-
-
-static void
-g_hal_mount_unmount (GMount *mount,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- char *argv[] = {"gnome-mount", "-u", "-b", "-d", NULL, NULL};
- gboolean using_legacy = FALSE;
- char *d, *m;
-
- G_LOCK (hal_mount);
- d = g_strdup (hal_mount->device_path);
- m = g_strdup (hal_mount->mount_path);
- G_UNLOCK (hal_mount);
-
-
- if (hal_mount->device != NULL)
- argv[4] = d;
- else
- {
- using_legacy = TRUE;
- argv[0] = "umount";
- argv[1] = m;
- argv[2] = NULL;
- }
-
- unmount_do (mount, cancellable, callback, user_data, argv, using_legacy);
- g_free (d);
- g_free (m);
-}
-
-static gboolean
-g_hal_mount_unmount_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- return TRUE;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} EjectWrapperOp;
-
-static void
-eject_wrapper_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- EjectWrapperOp *data = user_data;
- data->callback (data->object, res, data->user_data);
- g_object_unref (data->object);
- g_free (data);
-}
-
-static void
-g_hal_mount_eject (GMount *mount,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- GDrive *drive;
-
- G_LOCK (hal_mount);
- drive = NULL;
- if (hal_mount->volume != NULL)
- drive = g_volume_get_drive (G_VOLUME (hal_mount->volume));
- G_UNLOCK (hal_mount);
-
- if (drive != NULL)
- {
- EjectWrapperOp *data;
- data = g_new0 (EjectWrapperOp, 1);
- data->object = g_object_ref (mount);
- data->callback = callback;
- data->user_data = user_data;
- g_drive_eject (drive, flags, cancellable, eject_wrapper_callback, data);
- g_object_unref (drive);
- }
-}
-
-static gboolean
-g_hal_mount_eject_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- GDrive *drive;
- gboolean res;
-
- res = TRUE;
-
- G_LOCK (hal_mount);
- drive = NULL;
- if (hal_mount->volume != NULL)
- drive = g_volume_get_drive (G_VOLUME (hal_mount->volume));
- G_UNLOCK (hal_mount);
-
- if (drive != NULL)
- {
- res = g_drive_eject_finish (drive, result, error);
- g_object_unref (drive);
- }
- return res;
-}
-
-/* TODO: handle force_rescan */
-static char **
-g_hal_mount_guess_content_type_sync (GMount *mount,
- gboolean force_rescan,
- GCancellable *cancellable,
- GError **error)
-{
- GHalMount *hal_mount = G_HAL_MOUNT (mount);
- const char *disc_type;
- char **x_content_types;
- GFile *root;
- GPtrArray *p;
- char **result;
- int n;
- char **caps;
- char *uri;
-
- p = g_ptr_array_new ();
-
- G_LOCK (hal_mount);
-
- root = get_root (hal_mount);
- uri = g_file_get_uri (root);
- if (g_str_has_prefix (uri, "burn://"))
- {
- /* doesn't make sense to probe burn:/// - look at the disc type instead */
- if (hal_mount->device != NULL)
- {
- disc_type = hal_device_get_property_string (hal_mount->device, "volume.disc.type");
- if (disc_type != NULL)
- {
- if (g_str_has_prefix (disc_type, "dvd"))
- g_ptr_array_add (p, g_strdup ("x-content/blank-dvd"));
- else if (g_str_has_prefix (disc_type, "hddvd"))
- g_ptr_array_add (p, g_strdup ("x-content/blank-hddvd"));
- else if (g_str_has_prefix (disc_type, "bd"))
- g_ptr_array_add (p, g_strdup ("x-content/blank-bd"));
- else
- g_ptr_array_add (p, g_strdup ("x-content/blank-cd")); /* assume CD */
- }
- }
- }
- else
- {
- /* sniff content type */
- x_content_types = g_content_type_guess_for_tree (root);
- if (x_content_types != NULL)
- {
- for (n = 0; x_content_types[n] != NULL; n++)
- g_ptr_array_add (p, g_strdup (x_content_types[n]));
- g_strfreev (x_content_types);
- }
- }
- g_object_unref (root);
- g_free (uri);
-
- /* also add content types from hal capabilities */
- if (hal_mount->drive_device != NULL)
- {
- caps = dupv_and_uniqify (hal_device_get_property_strlist (hal_mount->drive_device, "info.capabilities"));
- if (caps != NULL)
- {
- for (n = 0; caps[n] != NULL; n++)
- {
- if (strcmp (caps[n], "portable_audio_player") == 0)
- g_ptr_array_add (p, g_strdup ("x-content/audio-player"));
- }
- g_strfreev (caps);
- }
- }
-
- if (p->len == 0)
- {
- result = NULL;
- g_ptr_array_free (p, TRUE);
- }
- else
- {
- g_ptr_array_add (p, NULL);
- result = (char **) g_ptr_array_free (p, FALSE);
- }
-
- G_UNLOCK (hal_mount);
-
- return result;
-}
-
-/* since we're an out-of-process volume monitor we'll just do this sync */
-static void
-g_hal_mount_guess_content_type (GMount *mount,
- gboolean force_rescan,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *simple;
-
- /* TODO: handle force_rescan */
- simple = g_simple_async_result_new (G_OBJECT (mount),
- callback,
- user_data,
- NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-}
-
-static char **
-g_hal_mount_guess_content_type_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- /* TODO: handle force_rescan */
- return g_hal_mount_guess_content_type_sync (mount, FALSE, NULL, error);
-}
-
-static void
-g_hal_mount_mount_iface_init (GMountIface *iface)
-{
- iface->get_root = g_hal_mount_get_root;
- iface->get_name = g_hal_mount_get_name;
- iface->get_icon = g_hal_mount_get_icon;
- iface->get_uuid = g_hal_mount_get_uuid;
- iface->get_drive = g_hal_mount_get_drive;
- iface->get_volume = g_hal_mount_get_volume;
- iface->can_unmount = g_hal_mount_can_unmount;
- iface->can_eject = g_hal_mount_can_eject;
- iface->unmount = g_hal_mount_unmount;
- iface->unmount_finish = g_hal_mount_unmount_finish;
- iface->eject = g_hal_mount_eject;
- iface->eject_finish = g_hal_mount_eject_finish;
- iface->guess_content_type = g_hal_mount_guess_content_type;
- iface->guess_content_type_finish = g_hal_mount_guess_content_type_finish;
- iface->guess_content_type_sync = g_hal_mount_guess_content_type_sync;
-}
-
-#define INSENSITIVE_SEARCH_ITEMS_PER_CALLBACK 100
-
-static void
-enumerated_children_callback (GObject *source_object, GAsyncResult *res,
- gpointer user_data);
-
-static void
-more_files_callback (GObject *source_object, GAsyncResult *res,
- gpointer user_data);
-
-static void
-find_file_insensitive_exists_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data);
-
-typedef struct _InsensitiveFileSearchData
-{
- GFile *root;
- gchar *original_path;
- gchar **split_path;
- gint index;
- GFileEnumerator *enumerator;
- GFile *current_file;
-
- GCancellable *cancellable;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} InsensitiveFileSearchData;
-
-static void
-_g_find_file_insensitive_async (GFile *parent,
- const gchar *name,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- InsensitiveFileSearchData *data;
- GFile *direct_file = g_file_get_child (parent, name);
-
- data = g_new0 (InsensitiveFileSearchData, 1);
- data->cancellable = cancellable;
- data->callback = callback;
- data->user_data = user_data;
- data->root = g_object_ref (parent);
- data->original_path = g_strdup (name);
-
- g_file_query_info_async (direct_file, G_FILE_ATTRIBUTE_STANDARD_TYPE,
- G_FILE_QUERY_INFO_NONE, G_PRIORITY_DEFAULT,
- cancellable,
- find_file_insensitive_exists_callback, data);
-
-
-}
-
-static void
-clear_find_file_insensitive_state (InsensitiveFileSearchData *data)
-{
- if (data->root)
- g_object_unref (data->root);
- g_free (data->original_path);
- if (data->split_path)
- g_strfreev (data->split_path);
- if (data->enumerator)
- g_object_unref (data->enumerator);
- if (data->current_file)
- g_object_unref (data->current_file);
- g_free (data);
-}
-
-static void
-find_file_insensitive_exists_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GFileInfo *info;
- InsensitiveFileSearchData *data = (InsensitiveFileSearchData *) (user_data);
-
- /* The file exists and can be found with the given path, no need to search. */
- if ((info = g_file_query_info_finish (G_FILE (source_object), res, NULL)))
- {
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (data->root),
- data->callback,
- data->user_data,
- _g_find_file_insensitive_async);
-
- g_simple_async_result_set_op_res_gpointer (simple, g_object_ref (source_object), g_object_unref);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- clear_find_file_insensitive_state (data);
- }
-
- else
- {
- data->split_path = g_strsplit (data->original_path, G_DIR_SEPARATOR_S, -1);
- data->index = 0;
- data->enumerator = NULL;
- data->current_file = g_object_ref (data->root);
-
- /* Skip any empty components due to multiple slashes */
- while (data->split_path[data->index] != NULL &&
- *data->split_path[data->index] == 0)
- data->index++;
-
- g_file_enumerate_children_async (data->current_file,
- G_FILE_ATTRIBUTE_STANDARD_NAME,
- 0, G_PRIORITY_DEFAULT,
- data->cancellable,
- enumerated_children_callback, data);
- }
-
- g_object_unref (source_object);
-}
-
-static void
-enumerated_children_callback (GObject *source_object, GAsyncResult *res,
- gpointer user_data)
-{
- GFileEnumerator *enumerator;
- InsensitiveFileSearchData *data = (InsensitiveFileSearchData *) (user_data);
-
- enumerator = g_file_enumerate_children_finish (G_FILE (source_object),
- res, NULL);
-
- if (enumerator == NULL)
- {
- GSimpleAsyncResult *simple;
- GFile *file;
-
- simple = g_simple_async_result_new (G_OBJECT (data->root),
- data->callback,
- data->user_data,
- _g_find_file_insensitive_async);
-
- file = g_file_get_child (data->root, data->original_path);
-
- g_simple_async_result_set_op_res_gpointer (simple, g_object_ref (file), g_object_unref);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- clear_find_file_insensitive_state (data);
- return;
- }
-
- data->enumerator = enumerator;
- g_file_enumerator_next_files_async (enumerator,
- INSENSITIVE_SEARCH_ITEMS_PER_CALLBACK,
- G_PRIORITY_DEFAULT,
- data->cancellable,
- more_files_callback,
- data);
-}
-
-static void
-more_files_callback (GObject *source_object, GAsyncResult *res,
- gpointer user_data)
-{
- InsensitiveFileSearchData *data = (InsensitiveFileSearchData *) (user_data);
- GList *files, *l;
- gchar *filename = NULL, *component, *case_folded_name,
- *name_collation_key;
- gboolean end_of_files, is_utf8;
-
- files = g_file_enumerator_next_files_finish (data->enumerator,
- res, NULL);
-
- end_of_files = files == NULL;
-
- component = data->split_path[data->index];
- g_return_if_fail (component != NULL);
-
- is_utf8 = (g_utf8_validate (component, -1, NULL));
- if (is_utf8)
- {
- case_folded_name = g_utf8_casefold (component, -1);
- name_collation_key = g_utf8_collate_key (case_folded_name, -1);
- g_free (case_folded_name);
- }
-
- else
- {
- name_collation_key = g_ascii_strdown (component, -1);
- }
-
- for (l = files; l != NULL; l = l->next)
- {
- GFileInfo *info;
- const gchar *this_name;
- gchar *key;
-
- info = l->data;
- this_name = g_file_info_get_name (info);
-
- if (is_utf8 && g_utf8_validate (this_name, -1, NULL))
- {
- gchar *case_folded;
- case_folded = g_utf8_casefold (this_name, -1);
- key = g_utf8_collate_key (case_folded, -1);
- g_free (case_folded);
- }
- else
- {
- key = g_ascii_strdown (this_name, -1);
- }
-
- if (strcmp (key, name_collation_key) == 0)
- filename = g_strdup (this_name);
- g_free (key);
-
- if (filename)
- break;
- }
-
- g_list_foreach (files, (GFunc)g_object_unref, NULL);
- g_list_free (files);
- g_free (name_collation_key);
-
- if (filename)
- {
- GFile *next_file;
-
- g_file_enumerator_close_async (data->enumerator,
- G_PRIORITY_DEFAULT,
- data->cancellable,
- NULL, NULL);
- g_object_unref (data->enumerator);
- data->enumerator = NULL;
-
- /* Set the current file and continue searching */
- next_file = g_file_get_child (data->current_file, filename);
- g_free (filename);
- g_object_unref (data->current_file);
- data->current_file = next_file;
-
- data->index++;
- /* Skip any empty components due to multiple slashes */
- while (data->split_path[data->index] != NULL &&
- *data->split_path[data->index] == 0)
- data->index++;
-
- if (data->split_path[data->index] == NULL)
- {
- /* Search is complete, file was found */
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (data->root),
- data->callback,
- data->user_data,
- _g_find_file_insensitive_async);
-
- g_simple_async_result_set_op_res_gpointer (simple, g_object_ref (data->current_file), g_object_unref);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- clear_find_file_insensitive_state (data);
- return;
- }
-
- /* Continue searching down the tree */
- g_file_enumerate_children_async (data->current_file,
- G_FILE_ATTRIBUTE_STANDARD_NAME,
- 0, G_PRIORITY_DEFAULT,
- data->cancellable,
- enumerated_children_callback,
- data);
- return;
- }
-
- if (end_of_files)
- {
- /* Could not find the given file, abort the search */
- GSimpleAsyncResult *simple;
- GFile *file;
-
- g_object_unref (data->enumerator);
- data->enumerator = NULL;
-
- simple = g_simple_async_result_new (G_OBJECT (data->root),
- data->callback,
- data->user_data,
- _g_find_file_insensitive_async);
-
- file = g_file_get_child (data->root, data->original_path);
- g_simple_async_result_set_op_res_gpointer (simple, file, g_object_unref);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- clear_find_file_insensitive_state (data);
- return;
- }
-
- /* Continue enumerating */
- g_file_enumerator_next_files_async (data->enumerator,
- INSENSITIVE_SEARCH_ITEMS_PER_CALLBACK,
- G_PRIORITY_DEFAULT,
- data->cancellable,
- more_files_callback,
- data);
-}
-
-static GFile *
-_g_find_file_insensitive_finish (GFile *parent,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple;
- GFile *file;
-
- g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL);
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- file = G_FILE (g_simple_async_result_get_op_res_gpointer (simple));
- return g_object_ref (file);
-}
-
diff --git a/monitor/hal/ghalmount.h b/monitor/hal/ghalmount.h
deleted file mode 100644
index 31981aed..00000000
--- a/monitor/hal/ghalmount.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_HAL_MOUNT_H__
-#define __G_HAL_MOUNT_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include "hal-pool.h"
-#include "ghalvolumemonitor.h"
-
-G_BEGIN_DECLS
-
-#define G_TYPE_HAL_MOUNT (g_hal_mount_get_type ())
-#define G_HAL_MOUNT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_HAL_MOUNT, GHalMount))
-#define G_HAL_MOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_HAL_MOUNT, GHalMountClass))
-#define G_IS_HAL_MOUNT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_HAL_MOUNT))
-#define G_IS_HAL_MOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_HAL_MOUNT))
-
-typedef struct _GHalMountClass GHalMountClass;
-
-struct _GHalMountClass {
- GObjectClass parent_class;
-};
-
-GType g_hal_mount_get_type (void) G_GNUC_CONST;
-
-GHalMount * g_hal_mount_new_for_hal_device (GVolumeMonitor *volume_monitor,
- HalDevice *device,
- GFile *override_root,
- const char *override_name,
- GIcon *override_icon,
- gboolean cannot_unmount,
- HalPool *pool,
- GHalVolume *volume);
-GHalMount * g_hal_mount_new (GVolumeMonitor *volume_monitor,
- GUnixMountEntry *mount_entry,
- HalPool *pool,
- GHalVolume *volume);
-gboolean g_hal_mount_has_mount_path (GHalMount *mount,
- const char *mount_path);
-gboolean g_hal_mount_has_udi (GHalMount *mount,
- const char *udi);
-gboolean g_hal_mount_has_uuid (GHalMount *mount,
- const char *uuid);
-void g_hal_mount_unset_volume (GHalMount *mount,
- GHalVolume *volume);
-void g_hal_mount_unmounted (GHalMount *mount);
-void g_hal_mount_override_name (GHalMount *mount,
- const char *name);
-void g_hal_mount_override_icon (GHalMount *mount,
- GIcon *icon);
-
-G_END_DECLS
-
-#endif /* __G_HAL_MOUNT_H__ */
diff --git a/monitor/hal/ghalvolume.c b/monitor/hal/ghalvolume.c
deleted file mode 100644
index 12579887..00000000
--- a/monitor/hal/ghalvolume.c
+++ /dev/null
@@ -1,1068 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-
-#include "ghaldrive.h"
-#include "ghalvolume.h"
-#include "ghalmount.h"
-
-#include "hal-utils.h"
-
-/* Protects all fields of GHalDrive that can change */
-G_LOCK_DEFINE_STATIC(hal_volume);
-
-struct _GHalVolume {
- GObject parent;
-
- GVolumeMonitor *volume_monitor; /* owned by volume monitor */
- GHalMount *mount; /* owned by volume monitor */
- GHalDrive *drive; /* owned by volume monitor */
-
- char *device_path;
- char *mount_path;
- char *uuid;
- HalDevice *device;
- HalDevice *drive_device;
-
- /* set on creation if we won't create a GHalMount object ourselves
- * and instead except to adopt one, with the given mount root,
- * via adopt_orphan_mount()
- */
- GFile *foreign_mount_root;
- GMount *foreign_mount;
- gboolean is_mountable;
- gboolean ignore_automount;
-
- char *name;
- char *icon;
- char *icon_fallback;
-};
-
-static void g_hal_volume_volume_iface_init (GVolumeIface *iface);
-
-G_DEFINE_TYPE_EXTENDED (GHalVolume, g_hal_volume, G_TYPE_OBJECT, 0,
- G_IMPLEMENT_INTERFACE (G_TYPE_VOLUME,
- g_hal_volume_volume_iface_init))
-
-static void
-g_hal_volume_finalize (GObject *object)
-{
- GHalVolume *volume;
-
- volume = G_HAL_VOLUME (object);
-
- if (volume->mount != NULL)
- g_hal_mount_unset_volume (volume->mount, volume);
-
- if (volume->drive != NULL)
- g_hal_drive_unset_volume (volume->drive, volume);
-
- g_free (volume->mount_path);
- g_free (volume->device_path);
- g_free (volume->uuid);
- if (volume->device != NULL)
- g_object_unref (volume->device);
- if (volume->drive_device != NULL)
- g_object_unref (volume->drive_device);
-
- if (volume->foreign_mount_root != NULL)
- g_object_unref (volume->foreign_mount_root);
-
- if (volume->foreign_mount != NULL)
- g_object_unref (volume->foreign_mount);
-
- if (volume->volume_monitor != NULL)
- g_object_remove_weak_pointer (G_OBJECT (volume->volume_monitor), (gpointer) &(volume->volume_monitor));
-
- g_free (volume->name);
- g_free (volume->icon);
- g_free (volume->icon_fallback);
-
- if (G_OBJECT_CLASS (g_hal_volume_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_hal_volume_parent_class)->finalize) (object);
-}
-
-static void
-g_hal_volume_class_init (GHalVolumeClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_hal_volume_finalize;
-}
-
-static void
-g_hal_volume_init (GHalVolume *hal_volume)
-{
-}
-
-static gboolean
-changed_in_idle (gpointer data)
-{
- GHalVolume *volume = data;
-
- g_signal_emit_by_name (volume, "changed");
- if (volume->volume_monitor != NULL)
- g_signal_emit_by_name (volume->volume_monitor, "volume_changed", volume);
- g_object_unref (volume);
-
- return FALSE;
-}
-
-#define KILOBYTE_FACTOR 1000.0
-#define MEGABYTE_FACTOR (1000.0 * 1000.0)
-#define GIGABYTE_FACTOR (1000.0 * 1000.0 * 1000.0)
-
-/**
- * format_size_for_display:
- * @size: a number of octects
- *
- * Format a human readable string that can conveys how much storage a
- * user-visible drive or piece of media can hold.
- *
- * As a matter of policy, we want this string to resemble what's on
- * the packaging of the drive/media. Since all manufacturers use
- * powers of 10, g_format_size_for_display() is not suitable here.
- *
- * TODO: we probably want to round to nearest power of two if @size is
- * "close" (e.g. within 5%) - this is to avoid e.g. 63.4G when the
- * packaging says "64G drive". We could also use per-drive or
- * per-media quirks to make a better guess.
- *
- * Returns: A human readable string, caller must free it using
- * g_free().
- **/
-static char *
-format_size_for_display (guint64 size)
-{
- char *str;
- gdouble displayed_size;
-
- if (size < MEGABYTE_FACTOR)
- {
- displayed_size = (double) size / KILOBYTE_FACTOR;
- str = g_strdup_printf (_("%.1f kB"), displayed_size);
- }
- else if (size < GIGABYTE_FACTOR)
- {
- displayed_size = (double) size / MEGABYTE_FACTOR;
- str = g_strdup_printf (_("%.1f MB"), displayed_size);
- }
- else
- {
- displayed_size = (double) size / GIGABYTE_FACTOR;
- str = g_strdup_printf (_("%.1f GB"), displayed_size);
- }
-
- return str;
-}
-
-static void
-do_update_from_hal (GHalVolume *mv)
-{
- const char *drive_type;
- const char *drive_bus;
- gboolean drive_uses_removable_media;
- const char *volume_fs_label;
- guint64 volume_size;
- gboolean volume_is_disc;
- gboolean volume_disc_has_audio;
- gboolean volume_disc_has_data;
- const char *volume_disc_type;
- gboolean volume_disc_is_blank;
- const char *volume_fsusage;
- const char *volume_fstype;
- HalDevice *volume;
- HalDevice *drive;
- char *name;
- char *size;
- gboolean is_crypto;
- gboolean is_crypto_cleartext;
-
- volume = mv->device;
- drive = mv->drive_device;
-
- drive_type = hal_device_get_property_string (drive, "storage.drive_type");
- drive_bus = hal_device_get_property_string (drive, "storage.bus");
- drive_uses_removable_media = hal_device_get_property_bool (drive, "storage.removable");
- volume_fs_label = hal_device_get_property_string (volume, "volume.label");
- volume_size = hal_device_get_property_uint64 (volume, "volume.size");
- volume_is_disc = hal_device_get_property_bool (volume, "volume.is_disc");
- volume_disc_has_audio = hal_device_get_property_bool (volume, "volume.disc.has_audio");
- volume_disc_has_data = hal_device_get_property_bool (volume, "volume.disc.has_data");
- volume_disc_is_blank = hal_device_get_property_bool (volume, "volume.disc.is_blank");
- volume_disc_type = hal_device_get_property_string (volume, "volume.disc.type");
- volume_fsusage = hal_device_get_property_string (volume, "volume.fsusage");
- volume_fstype = hal_device_get_property_string (volume, "volume.fstype");
-
- is_crypto = FALSE;
- is_crypto_cleartext = FALSE;
- if (strcmp (hal_device_get_property_string (volume, "volume.fsusage"), "crypto") == 0)
- is_crypto = TRUE;
- if (strlen (hal_device_get_property_string (volume, "volume.crypto_luks.clear.backing_volume")) > 0)
- is_crypto_cleartext = TRUE;
-
- if (volume_is_disc && volume_disc_has_audio && mv->foreign_mount_root != NULL)
- name = g_strdup (_("Audio Disc"));
- else
- {
- if (strcmp (volume_fsusage, "crypto") == 0 && strcmp (volume_fstype, "crypto_LUKS") == 0)
- {
- size = format_size_for_display (volume_size);
- /* Translators: %s is the size of the volume (e.g. 512 MB) */
- name = g_strdup_printf (_("%s Encrypted Data"), size);
- g_free (size);
- }
- else
- {
- if (volume_fs_label != NULL && strlen (volume_fs_label) > 0)
- name = g_strdup (volume_fs_label);
- else if (volume_is_disc)
- {
- if (volume_disc_has_audio)
- {
- if (volume_disc_has_data)
- name = g_strdup (_("Mixed Audio/Data Disc"));
- else
- name = g_strdup (_("Audio Disc"));
- }
- else
- name = g_strdup (get_disc_name (volume_disc_type, volume_disc_is_blank));
- }
- else
- {
- size = format_size_for_display (volume_size);
- /* Translators: %s is the size of the volume (e.g. 512 MB) */
- name = g_strdup_printf (_("%s Media"), size);
- g_free (size);
- }
- }
- }
-
- mv->name = name;
- mv->icon = _drive_get_icon (drive); /* use the drive icon since we're unmounted */
-
- if (is_crypto || is_crypto_cleartext)
- {
- mv->icon_fallback = mv->icon;
- mv->icon = g_strdup ("drive-encrypted");
- }
-
- if (hal_device_get_property_bool (volume, "volume.is_mounted"))
- mv->mount_path = g_strdup (hal_device_get_property_string (volume, "volume.mount_point"));
- else
- mv->mount_path = NULL;
-
- g_object_set_data_full (G_OBJECT (mv),
- "hal-storage-device-capabilities",
- dupv_and_uniqify (hal_device_get_property_strlist (mv->drive_device, "info.capabilities")),
- (GDestroyNotify) g_strfreev);
-
- if (volume_disc_type != NULL && strlen (volume_disc_type) == 0)
- volume_disc_type = NULL;
- g_object_set_data_full (G_OBJECT (mv),
- "hal-volume.disc.type",
- g_strdup (volume_disc_type),
- (GDestroyNotify) g_free);
-}
-
-static void
-update_from_hal (GHalVolume *mv, gboolean emit_changed)
-{
- char *old_name;
- char *old_icon;
- char *old_mount_path;
-
- G_LOCK (hal_volume);
-
- old_name = g_strdup (mv->name);
- old_icon = g_strdup (mv->icon);
- old_mount_path = g_strdup (mv->mount_path);
-
- g_free (mv->name);
- g_free (mv->icon);
- g_free (mv->mount_path);
- do_update_from_hal (mv);
-
- if (emit_changed)
- {
- gboolean mount_path_changed;
-
- if ((old_mount_path == NULL && mv->mount_path != NULL) ||
- (old_mount_path != NULL && mv->mount_path == NULL) ||
- (old_mount_path != NULL && mv->mount_path != NULL && strcmp (old_mount_path, mv->mount_path) != 0))
- mount_path_changed = TRUE;
- else
- mount_path_changed = FALSE;
-
- if (mount_path_changed ||
- (old_name == NULL ||
- old_icon == NULL ||
- strcmp (old_name, mv->name) != 0 ||
- strcmp (old_icon, mv->icon) != 0))
- g_idle_add (changed_in_idle, g_object_ref (mv));
- }
- g_free (old_name);
- g_free (old_icon);
- g_free (old_mount_path);
-
- G_UNLOCK (hal_volume);
-}
-
-static void
-hal_changed (HalDevice *device, const char *key, gpointer user_data)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (user_data);
-
- /*g_warning ("hal modifying %s (property %s changed)", hal_volume->device_path, key);*/
- update_from_hal (hal_volume, TRUE);
-}
-
-static void
-compute_uuid (GHalVolume *volume)
-{
- const char *fs_uuid;
- const char *fs_label;
-
- /* use the FS uuid before falling back to the FS label */
-
- fs_uuid = hal_device_get_property_string (volume->device, "volume.uuid");
- fs_label = hal_device_get_property_string (volume->device, "volume.label");
-
- if (strlen (fs_uuid) == 0)
- {
- if (strlen (fs_label) == 0)
- volume->uuid = NULL;
- else
- volume->uuid = g_strdup (fs_label);
- }
- else
- volume->uuid = g_strdup (fs_uuid);
-}
-
-GHalVolume *
-g_hal_volume_new (GVolumeMonitor *volume_monitor,
- HalDevice *device,
- HalPool *pool,
- GFile *foreign_mount_root,
- gboolean is_mountable,
- GHalDrive *drive)
-{
- GHalVolume *volume;
- HalDevice *drive_device;
- const char *storage_udi;
- const char *device_path;
- gboolean ignore_automount;
-
- ignore_automount = FALSE;
-
- if (hal_device_has_capability (device, "block"))
- {
- storage_udi = hal_device_get_property_string (device, "block.storage_device");
- if (storage_udi == NULL)
- return NULL;
-
- drive_device = hal_pool_get_device_by_udi (pool, storage_udi);
- if (drive_device == NULL)
- return NULL;
-
- device_path = hal_device_get_property_string (device, "block.device");
- }
- else
- {
- return NULL;
- }
-
- if (drive_device &&
- hal_device_has_property (drive_device, "storage.automount_enabled_hint") &&
- !hal_device_get_property_bool (drive_device, "storage.automount_enabled_hint"))
- ignore_automount = TRUE;
-
- volume = g_object_new (G_TYPE_HAL_VOLUME, NULL);
- volume->volume_monitor = volume_monitor;
- g_object_add_weak_pointer (G_OBJECT (volume_monitor), (gpointer) &(volume->volume_monitor));
- volume->mount_path = NULL;
- volume->device_path = g_strdup (device_path);
- volume->device = g_object_ref (device);
- volume->drive_device = g_object_ref (drive_device);
- volume->foreign_mount_root = foreign_mount_root != NULL ? g_object_ref (foreign_mount_root) : NULL;
- volume->is_mountable = is_mountable;
- volume->ignore_automount = ignore_automount || ! hal_device_is_recently_plugged_in (device);
-
- g_signal_connect_object (device, "hal_property_changed", (GCallback) hal_changed, volume, 0);
- g_signal_connect_object (drive_device, "hal_property_changed", (GCallback) hal_changed, volume, 0);
-
- compute_uuid (volume);
- update_from_hal (volume, FALSE);
-
- /* need to do this last */
- volume->drive = drive;
- if (drive != NULL)
- g_hal_drive_set_volume (drive, volume);
-
- return volume;
-}
-
-/**
- * g_hal_volume_removed:
- * @volume:
- *
- **/
-void
-g_hal_volume_removed (GHalVolume *volume)
-{
-
- G_LOCK (hal_volume);
-
- if (volume->mount != NULL)
- {
- g_hal_mount_unset_volume (volume->mount, volume);
- volume->mount = NULL;
- }
-
- if (volume->drive != NULL)
- {
- g_hal_drive_unset_volume (volume->drive, volume);
- volume->drive = NULL;
- }
-
- G_UNLOCK (hal_volume);
-}
-
-void
-g_hal_volume_set_mount (GHalVolume *volume,
- GHalMount *mount)
-{
- G_LOCK (hal_volume);
- if (volume->mount != mount)
- {
-
- if (volume->mount != NULL)
- g_hal_mount_unset_volume (volume->mount, volume);
-
- volume->mount = mount;
-
- g_idle_add (changed_in_idle, g_object_ref (volume));
- }
- G_UNLOCK (hal_volume);
-}
-
-void
-g_hal_volume_unset_mount (GHalVolume *volume,
- GHalMount *mount)
-{
- G_LOCK (hal_volume);
- if (volume->mount == mount)
- {
- volume->mount = NULL;
- g_idle_add (changed_in_idle, g_object_ref (volume));
- }
- G_UNLOCK (hal_volume);
-}
-
-void
-g_hal_volume_set_drive (GHalVolume *volume,
- GHalDrive *drive)
-{
- G_LOCK (hal_volume);
- if (volume->drive != drive)
- {
- if (volume->drive != NULL)
- g_hal_drive_unset_volume (volume->drive, volume);
-
- volume->drive = drive;
-
- g_idle_add (changed_in_idle, g_object_ref (volume));
- }
- G_UNLOCK (hal_volume);
-}
-
-void
-g_hal_volume_unset_drive (GHalVolume *volume,
- GHalDrive *drive)
-{
- G_LOCK (hal_volume);
- if (volume->drive == drive)
- {
- volume->drive = NULL;
- g_idle_add (changed_in_idle, g_object_ref (volume));
- }
- G_UNLOCK (hal_volume);
-}
-
-static GIcon *
-g_hal_volume_get_icon (GVolume *volume)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- GIcon *icon;
- const char *name;
- const char *fallback;
-
- G_LOCK (hal_volume);
- name = hal_volume->icon;
-
- if (hal_volume->icon_fallback)
- fallback = hal_volume->icon_fallback;
- else /* if no custom fallbacks are set, use the icon to create them */
- fallback = name;
-
- icon = get_themed_icon_with_fallbacks (name, fallback);
- G_UNLOCK (hal_volume);
- return icon;
-}
-
-static char *
-g_hal_volume_get_name (GVolume *volume)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- char *name;
-
- G_LOCK (hal_volume);
- name = g_strdup (hal_volume->name);
- G_UNLOCK (hal_volume);
-
- return name;
-}
-
-static char *
-g_hal_volume_get_uuid (GVolume *volume)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- char *uuid;
-
- G_LOCK (hal_volume);
- uuid = g_strdup (hal_volume->uuid);
- G_UNLOCK (hal_volume);
-
- return uuid;
-}
-
-static gboolean
-g_hal_volume_can_mount (GVolume *volume)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- gboolean res;
-
- G_LOCK (hal_volume);
- res = hal_volume->is_mountable;
- G_UNLOCK (hal_volume);
-
- return res;
-}
-
-static gboolean
-g_hal_volume_can_eject (GVolume *volume)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- gboolean res;
-
- G_LOCK (hal_volume);
- res = FALSE;
- if (hal_volume->drive != NULL)
- res = g_drive_can_eject (G_DRIVE (hal_volume->drive));
- G_UNLOCK (hal_volume);
-
- return res;
-}
-
-static gboolean
-g_hal_volume_should_automount (GVolume *volume)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- gboolean res;
-
- G_LOCK (hal_volume);
- res = ! (hal_volume->ignore_automount);
- G_UNLOCK (hal_volume);
-
- return res;
-}
-
-static GDrive *
-g_hal_volume_get_drive (GVolume *volume)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- GDrive *drive;
-
- G_LOCK (hal_volume);
- drive = NULL;
- if (hal_volume->drive != NULL)
- drive = g_object_ref (hal_volume->drive);
- G_UNLOCK (hal_volume);
-
- return drive;
-}
-
-static GMount *
-g_hal_volume_get_mount (GVolume *volume)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- GMount *mount;
-
- G_LOCK (hal_volume);
- mount = NULL;
- if (hal_volume->foreign_mount != NULL)
- mount = g_object_ref (hal_volume->foreign_mount);
- else if (hal_volume->mount != NULL)
- mount = g_object_ref (hal_volume->mount);
- G_UNLOCK (hal_volume);
-
- return mount;
-}
-
-gboolean
-g_hal_volume_has_mount_path (GHalVolume *volume,
- const char *mount_path)
-{
- gboolean res;
-
- G_LOCK (hal_volume);
- res = FALSE;
- if (volume->mount_path != NULL)
- res = strcmp (volume->mount_path, mount_path) == 0;
- G_UNLOCK (hal_volume);
-
- return res;
-}
-
-gboolean
-g_hal_volume_has_device_path (GHalVolume *volume,
- const char *device_path)
-{
- gboolean res;
-
- res = FALSE;
- G_LOCK (hal_volume);
- if (volume->device_path != NULL)
- res = strcmp (volume->device_path, device_path) == 0;
- G_UNLOCK (hal_volume);
- return res;
-}
-
-gboolean
-g_hal_volume_has_udi (GHalVolume *volume,
- const char *udi)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- gboolean res;
-
- G_LOCK (hal_volume);
- res = FALSE;
- if (hal_volume->device != NULL)
- res = strcmp (hal_device_get_udi (hal_volume->device), udi) == 0;
- G_UNLOCK (hal_volume);
- return res;
-}
-
-gboolean
-g_hal_volume_has_uuid (GHalVolume *volume,
- const char *uuid)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- gboolean res;
-
- G_LOCK (hal_volume);
- res = FALSE;
- if (hal_volume->uuid != NULL)
- res = strcmp (hal_volume->uuid, uuid) == 0;
- G_UNLOCK (hal_volume);
-
- return res;
-}
-
-static void
-foreign_mount_unmounted (GMount *mount, gpointer user_data)
-{
- GHalVolume *volume = G_HAL_VOLUME (user_data);
- gboolean check;
-
- G_LOCK (hal_volume);
- check = volume->foreign_mount == mount;
- G_UNLOCK (hal_volume);
- if (check)
- g_hal_volume_adopt_foreign_mount (volume, NULL);
-}
-
-void
-g_hal_volume_adopt_foreign_mount (GHalVolume *volume, GMount *foreign_mount)
-{
- G_LOCK (hal_volume);
- if (volume->foreign_mount != NULL)
- g_object_unref (volume->foreign_mount);
-
- if (foreign_mount != NULL)
- {
- volume->foreign_mount = g_object_ref (foreign_mount);
- g_signal_connect_object (foreign_mount, "unmounted", (GCallback) foreign_mount_unmounted, volume, 0);
- }
- else
- volume->foreign_mount = NULL;
-
- g_idle_add (changed_in_idle, g_object_ref (volume));
- G_UNLOCK (hal_volume);
-}
-
-gboolean
-g_hal_volume_has_foreign_mount_root (GHalVolume *volume,
- GFile *mount_root)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- gboolean res;
-
- G_LOCK (hal_volume);
- res = FALSE;
- if (hal_volume->foreign_mount_root != NULL)
- res = g_file_equal (hal_volume->foreign_mount_root, mount_root);
- G_UNLOCK (hal_volume);
-
- return res;
-}
-
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
- GCancellable *cancellable;
-} SpawnOp;
-
-static void
-spawn_cb (GPid pid, gint status, gpointer user_data)
-{
- SpawnOp *data = user_data;
- GSimpleAsyncResult *simple;
-
- /* ensure that the #GHalMount corrosponding to the #GHalVolume we've
- * mounted is made available before returning to the user
- */
- g_hal_volume_monitor_force_update (G_HAL_VOLUME_MONITOR (G_HAL_VOLUME (data->object)->volume_monitor));
-
- if (WEXITSTATUS (status) != 0)
- {
- GError *error;
- error = g_error_new_literal (G_IO_ERROR,
- G_IO_ERROR_FAILED_HANDLED,
- "You are not supposed to show G_IO_ERROR_FAILED_HANDLED in the UI");
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- g_error_free (error);
- }
- else
- {
- simple = g_simple_async_result_new (data->object,
- data->callback,
- data->user_data,
- NULL);
- }
-
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
- g_object_unref (data->object);
- g_free (data);
-}
-
-static void
-spawn_do (GVolume *volume,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data,
- char **argv)
-{
- SpawnOp *data;
- GPid child_pid;
- GError *error;
-
- data = g_new0 (SpawnOp, 1);
- data->object = g_object_ref (volume);
- data->callback = callback;
- data->user_data = user_data;
- data->cancellable = cancellable;
-
- error = NULL;
- if (!g_spawn_async (NULL, /* working dir */
- argv,
- NULL, /* envp */
- G_SPAWN_DO_NOT_REAP_CHILD|G_SPAWN_SEARCH_PATH,
- NULL, /* child_setup */
- NULL, /* user_data for child_setup */
- &child_pid,
- &error))
- {
- g_simple_async_report_gerror_in_idle (data->object,
- data->callback,
- data->user_data,
- error);
- g_object_unref (data->object);
- g_error_free (error);
- g_free (data);
- return;
- }
-
- g_child_watch_add (child_pid, spawn_cb, data);
-}
-
-typedef struct
-{
- GHalVolume *enclosing_volume;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} ForeignMountOp;
-
-static void
-mount_foreign_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- ForeignMountOp *data = user_data;
- data->callback (G_OBJECT (data->enclosing_volume), res, data->user_data);
- g_object_unref (data->enclosing_volume);
- g_free (data);
-}
-
-static void
-g_hal_volume_mount (GVolume *volume,
- GMountMountFlags flags,
- GMountOperation *mount_operation,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
-
- /*g_warning ("hal_volume_mount (can_mount=%d foreign=%p device_path=%s)",
- g_hal_volume_can_mount (volume),
- hal_volume->foreign_mount_root,
- hal_volume->device_path);*/
-
- G_LOCK (hal_volume);
- if (hal_volume->foreign_mount_root != NULL)
- {
- ForeignMountOp *data;
-
- data = g_new0 (ForeignMountOp, 1);
- data->enclosing_volume = g_object_ref (hal_volume);
- data->callback = callback;
- data->user_data = user_data;
-
- g_file_mount_enclosing_volume (hal_volume->foreign_mount_root,
- 0,
- mount_operation,
- cancellable,
- mount_foreign_callback,
- data);
- }
- else
- {
- char *argv[] = {"gnome-mount", "-b", "-d", NULL, NULL, NULL};
- argv[3] = hal_volume->device_path;
- /* ask for no dialogs if mount_operation is NULL */
- if (mount_operation == NULL)
- argv[4] = "-n";
- spawn_do (volume, cancellable, callback, user_data, argv);
- }
- G_UNLOCK (hal_volume);
-}
-
-static gboolean
-g_hal_volume_mount_finish (GVolume *volume,
- GAsyncResult *result,
- GError **error)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- gboolean res;
-
- G_LOCK (hal_volume);
- res = TRUE;
-
- if (hal_volume->foreign_mount_root != NULL)
- res = g_file_mount_enclosing_volume_finish (hal_volume->foreign_mount_root, result, error);
-
- G_UNLOCK (hal_volume);
-
- return res;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} EjectWrapperOp;
-
-static void
-eject_wrapper_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- EjectWrapperOp *data = user_data;
- data->callback (data->object, res, data->user_data);
- g_object_unref (data->object);
- g_free (data);
-}
-
-static void
-g_hal_volume_eject (GVolume *volume,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- GHalDrive *drive;
-
- /*g_warning ("hal_volume_eject");*/
-
- drive = NULL;
- G_LOCK (hal_volume);
- if (hal_volume->drive != NULL)
- drive = g_object_ref (hal_volume->drive);
- G_UNLOCK (hal_volume);
-
- if (drive != NULL)
- {
- EjectWrapperOp *data;
- data = g_new0 (EjectWrapperOp, 1);
- data->object = g_object_ref (volume);
- data->callback = callback;
- data->user_data = user_data;
- g_drive_eject (G_DRIVE (drive), flags, cancellable, eject_wrapper_callback, data);
- g_object_unref (drive);
- }
-}
-
-static gboolean
-g_hal_volume_eject_finish (GVolume *volume,
- GAsyncResult *result,
- GError **error)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- gboolean res;
-
- G_LOCK (hal_volume);
- res = TRUE;
- if (hal_volume->drive != NULL)
- res = g_drive_eject_finish (G_DRIVE (hal_volume->drive), result, error);
- G_UNLOCK (hal_volume);
- return res;
-}
-
-static char *
-g_hal_volume_get_identifier (GVolume *volume,
- const char *kind)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- char *id;
-
- G_LOCK (hal_volume);
- id = NULL;
- if (strcmp (kind, G_VOLUME_IDENTIFIER_KIND_HAL_UDI) == 0)
- id = g_strdup (hal_device_get_udi (hal_volume->device));
- else if (strcmp (kind, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE) == 0)
- id = g_strdup (hal_volume->device_path);
- else if (strcmp (kind, G_VOLUME_IDENTIFIER_KIND_LABEL) == 0)
- id = g_strdup (hal_device_get_property_string (hal_volume->device, "volume.label"));
- else if (strcmp (kind, G_VOLUME_IDENTIFIER_KIND_UUID) == 0)
- id = g_strdup (hal_device_get_property_string (hal_volume->device, "volume.uuid"));
- G_UNLOCK (hal_volume);
-
- return id;
-}
-
-static char **
-g_hal_volume_enumerate_identifiers (GVolume *volume)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- GPtrArray *res;
- const char *label, *uuid;
-
- G_LOCK (hal_volume);
-
- res = g_ptr_array_new ();
-
- g_ptr_array_add (res,
- g_strdup (G_VOLUME_IDENTIFIER_KIND_HAL_UDI));
-
- if (hal_volume->device_path && *hal_volume->device_path != 0)
- g_ptr_array_add (res,
- g_strdup (G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE));
-
- label = hal_device_get_property_string (hal_volume->device, "volume.label");
- uuid = hal_device_get_property_string (hal_volume->device, "volume.uuid");
-
- if (label && *label != 0)
- g_ptr_array_add (res,
- g_strdup (G_VOLUME_IDENTIFIER_KIND_LABEL));
-
- if (uuid && *uuid != 0)
- g_ptr_array_add (res,
- g_strdup (G_VOLUME_IDENTIFIER_KIND_UUID));
-
- /* Null-terminate */
- g_ptr_array_add (res, NULL);
-
- G_UNLOCK (hal_volume);
-
- return (char **)g_ptr_array_free (res, FALSE);
-}
-
-static GFile *
-g_hal_volume_get_activation_root (GVolume *volume)
-{
- GHalVolume *hal_volume = G_HAL_VOLUME (volume);
- GFile *root = NULL;
-
- G_LOCK (hal_volume);
- if (hal_volume->foreign_mount_root != NULL)
- root = g_object_ref (hal_volume->foreign_mount_root);
- G_UNLOCK (hal_volume);
-
- return root;
-}
-
-static void
-g_hal_volume_volume_iface_init (GVolumeIface *iface)
-{
- iface->get_name = g_hal_volume_get_name;
- iface->get_icon = g_hal_volume_get_icon;
- iface->get_uuid = g_hal_volume_get_uuid;
- iface->get_drive = g_hal_volume_get_drive;
- iface->get_mount = g_hal_volume_get_mount;
- iface->can_mount = g_hal_volume_can_mount;
- iface->can_eject = g_hal_volume_can_eject;
- iface->should_automount = g_hal_volume_should_automount;
- iface->mount_fn = g_hal_volume_mount;
- iface->mount_finish = g_hal_volume_mount_finish;
- iface->eject = g_hal_volume_eject;
- iface->eject_finish = g_hal_volume_eject_finish;
- iface->get_identifier = g_hal_volume_get_identifier;
- iface->enumerate_identifiers = g_hal_volume_enumerate_identifiers;
- iface->get_activation_root = g_hal_volume_get_activation_root;
-}
diff --git a/monitor/hal/ghalvolume.h b/monitor/hal/ghalvolume.h
deleted file mode 100644
index edbdfb31..00000000
--- a/monitor/hal/ghalvolume.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_HAL_VOLUME_H__
-#define __G_HAL_VOLUME_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include "hal-pool.h"
-#include "ghalvolumemonitor.h"
-
-G_BEGIN_DECLS
-
-#define G_TYPE_HAL_VOLUME (g_hal_volume_get_type ())
-#define G_HAL_VOLUME(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_HAL_VOLUME, GHalVolume))
-#define G_HAL_VOLUME_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_HAL_VOLUME, GHalVolumeClass))
-#define G_IS_HAL_VOLUME(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_HAL_VOLUME))
-#define G_IS_HAL_VOLUME_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_HAL_VOLUME))
-
-typedef struct _GHalVolumeClass GHalVolumeClass;
-
-struct _GHalVolumeClass {
- GObjectClass parent_class;
-};
-
-GType g_hal_volume_get_type (void) G_GNUC_CONST;
-
-GHalVolume *g_hal_volume_new (GVolumeMonitor *volume_monitor,
- HalDevice *device,
- HalPool *pool,
- GFile *foreign_mount_root,
- gboolean is_mountable,
- GHalDrive *drive);
-
-gboolean g_hal_volume_has_mount_path (GHalVolume *volume,
- const char *mount_path);
-gboolean g_hal_volume_has_device_path (GHalVolume *volume,
- const char *device_path);
-gboolean g_hal_volume_has_udi (GHalVolume *volume,
- const char *udi);
-gboolean g_hal_volume_has_uuid (GHalVolume *volume,
- const char *uuid);
-
-gboolean g_hal_volume_has_foreign_mount_root (GHalVolume *volume,
- GFile *mount_root);
-
-void g_hal_volume_adopt_foreign_mount (GHalVolume *volume,
- GMount *foreign_mount);
-
-void g_hal_volume_set_mount (GHalVolume *volume,
- GHalMount *mount);
-void g_hal_volume_unset_mount (GHalVolume *volume,
- GHalMount *mount);
-
-void g_hal_volume_set_drive (GHalVolume *volume,
- GHalDrive *drive);
-void g_hal_volume_unset_drive (GHalVolume *volume,
- GHalDrive *drive);
-
-void g_hal_volume_removed (GHalVolume *volume);
-
-G_END_DECLS
-
-#endif /* __G_HAL_VOLUME_H__ */
diff --git a/monitor/hal/ghalvolumemonitor.c b/monitor/hal/ghalvolumemonitor.c
deleted file mode 100644
index 0a2a0877..00000000
--- a/monitor/hal/ghalvolumemonitor.c
+++ /dev/null
@@ -1,1399 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <limits.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-
-#include "ghalvolumemonitor.h"
-#include "ghalmount.h"
-#include "ghalvolume.h"
-#include "ghaldrive.h"
-#include "hal-pool.h"
-
-/* We use this static variable for enforcing a singleton pattern since
- * the get_mount_for_mount_path() method on GNativeVolumeMonitor calls
- * us without an instance.. and ideally we want to piggyback on an
- * already existing instance.
- *
- * We avoid locking since GUnionVolumeMonitor, the only user of us,
- * does locking.
- */
-
-G_LOCK_DEFINE_STATIC(hal_vm);
-
-static GHalVolumeMonitor *the_volume_monitor = NULL;
-static HalPool *pool = NULL;
-
-struct _GHalVolumeMonitor {
- GNativeVolumeMonitor parent;
-
- GUnixMountMonitor *mount_monitor;
-
- HalPool *pool;
-
- GList *last_optical_disc_devices;
- GList *last_drive_devices;
- GList *last_volume_devices;
- GList *last_mountpoints;
- GList *last_mounts;
-
- GList *drives;
- GList *volumes;
- GList *mounts;
-
- /* we keep volumes/mounts for blank and audio discs separate to handle e.g. mixed discs properly */
- GList *disc_volumes;
- GList *disc_mounts;
-
-};
-
-static void mountpoints_changed (GUnixMountMonitor *mount_monitor,
- gpointer user_data);
-static void mounts_changed (GUnixMountMonitor *mount_monitor,
- gpointer user_data);
-static void hal_changed (HalPool *pool,
- HalDevice *device,
- gpointer user_data);
-static void update_all (GHalVolumeMonitor *monitor,
- gboolean emit_changes);
-static void update_drives (GHalVolumeMonitor *monitor,
- GList **added_drives,
- GList **removed_drives);
-static void update_volumes (GHalVolumeMonitor *monitor,
- GList **added_volumes,
- GList **removed_volumes);
-static void update_mounts (GHalVolumeMonitor *monitor,
- GList **added_mounts,
- GList **removed_mounts);
-static void update_discs (GHalVolumeMonitor *monitor,
- GList **added_volumes,
- GList **removed_volumes,
- GList **added_mounts,
- GList **removed_mounts);
-
-
-G_DEFINE_TYPE (GHalVolumeMonitor, g_hal_volume_monitor, G_TYPE_NATIVE_VOLUME_MONITOR)
-
-static void
-list_free (GList *objects)
-{
- g_list_foreach (objects, (GFunc)g_object_unref, NULL);
- g_list_free (objects);
-}
-
-static HalPool *
-get_hal_pool (void)
-{
- char *cap_only[] = {"block", NULL};
-
- if (pool == NULL)
- pool = hal_pool_new (cap_only);
-
- return pool;
-}
-
-static void
-g_hal_volume_monitor_dispose (GObject *object)
-{
- GHalVolumeMonitor *monitor;
-
- monitor = G_HAL_VOLUME_MONITOR (object);
-
- G_LOCK (hal_vm);
- the_volume_monitor = NULL;
- G_UNLOCK (hal_vm);
-
- if (G_OBJECT_CLASS (g_hal_volume_monitor_parent_class)->dispose)
- (*G_OBJECT_CLASS (g_hal_volume_monitor_parent_class)->dispose) (object);
-}
-
-static void
-g_hal_volume_monitor_finalize (GObject *object)
-{
- GHalVolumeMonitor *monitor;
-
- monitor = G_HAL_VOLUME_MONITOR (object);
-
- g_signal_handlers_disconnect_by_func (monitor->mount_monitor, mountpoints_changed, monitor);
- g_signal_handlers_disconnect_by_func (monitor->mount_monitor, mounts_changed, monitor);
- g_signal_handlers_disconnect_by_func (monitor->pool, hal_changed, monitor);
-
- g_object_unref (monitor->mount_monitor);
- g_object_unref (monitor->pool);
-
- list_free (monitor->last_optical_disc_devices);
- list_free (monitor->last_drive_devices);
- list_free (monitor->last_volume_devices);
- list_free (monitor->last_mountpoints);
- g_list_foreach (monitor->last_mounts,
- (GFunc)g_unix_mount_free, NULL);
- g_list_free (monitor->last_mounts);
-
- list_free (monitor->drives);
- list_free (monitor->volumes);
- list_free (monitor->mounts);
-
- list_free (monitor->disc_volumes);
- list_free (monitor->disc_mounts);
-
- if (G_OBJECT_CLASS (g_hal_volume_monitor_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_hal_volume_monitor_parent_class)->finalize) (object);
-}
-
-static GList *
-get_mounts (GVolumeMonitor *volume_monitor)
-{
- GHalVolumeMonitor *monitor;
- GList *l, *ll;
-
- monitor = G_HAL_VOLUME_MONITOR (volume_monitor);
-
- G_LOCK (hal_vm);
-
- l = g_list_copy (monitor->mounts);
- ll = g_list_copy (monitor->disc_mounts);
- l = g_list_concat (l, ll);
-
- g_list_foreach (l, (GFunc)g_object_ref, NULL);
-
- G_UNLOCK (hal_vm);
-
- return l;
-}
-
-static GList *
-get_volumes (GVolumeMonitor *volume_monitor)
-{
- GHalVolumeMonitor *monitor;
- GList *l, *ll;
-
- monitor = G_HAL_VOLUME_MONITOR (volume_monitor);
-
- G_LOCK (hal_vm);
-
- l = g_list_copy (monitor->volumes);
- ll = g_list_copy (monitor->disc_volumes);
- l = g_list_concat (l, ll);
-
- g_list_foreach (l, (GFunc)g_object_ref, NULL);
-
- G_UNLOCK (hal_vm);
-
- return l;
-}
-
-static GList *
-get_connected_drives (GVolumeMonitor *volume_monitor)
-{
- GHalVolumeMonitor *monitor;
- GList *l;
-
- monitor = G_HAL_VOLUME_MONITOR (volume_monitor);
-
- G_LOCK (hal_vm);
-
- l = g_list_copy (monitor->drives);
- g_list_foreach (l, (GFunc)g_object_ref, NULL);
-
- G_UNLOCK (hal_vm);
-
- return l;
-}
-
-static GVolume *
-get_volume_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
-{
- GHalVolumeMonitor *monitor;
- GHalVolume *volume;
- GList *l;
-
- monitor = G_HAL_VOLUME_MONITOR (volume_monitor);
-
- G_LOCK (hal_vm);
-
- volume = NULL;
-
- for (l = monitor->volumes; l != NULL; l = l->next)
- {
- volume = l->data;
- if (g_hal_volume_has_uuid (volume, uuid))
- goto found;
- }
-
- for (l = monitor->disc_volumes; l != NULL; l = l->next)
- {
- volume = l->data;
- if (g_hal_volume_has_uuid (volume, uuid))
- goto found;
- }
-
- G_UNLOCK (hal_vm);
-
- return NULL;
-
- found:
-
- g_object_ref (volume);
-
- G_UNLOCK (hal_vm);
-
- return (GVolume *)volume;
-}
-
-static GMount *
-get_mount_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
-{
- GHalVolumeMonitor *monitor;
- GHalMount *mount;
- GList *l;
-
- monitor = G_HAL_VOLUME_MONITOR (volume_monitor);
-
- G_LOCK (hal_vm);
-
- mount = NULL;
-
- for (l = monitor->mounts; l != NULL; l = l->next)
- {
- mount = l->data;
- if (g_hal_mount_has_uuid (mount, uuid))
- goto found;
- }
-
- for (l = monitor->disc_mounts; l != NULL; l = l->next)
- {
- mount = l->data;
- if (g_hal_mount_has_uuid (mount, uuid))
- goto found;
- }
-
- G_UNLOCK (hal_vm);
-
- return NULL;
-
- found:
-
- g_object_ref (mount);
-
- G_UNLOCK (hal_vm);
-
- return (GMount *)mount;
-}
-
-static GMount *
-get_mount_for_mount_path (const char *mount_path,
- GCancellable *cancellable)
-{
- GMount *mount;
- GHalMount *hal_mount;
- GHalVolumeMonitor *volume_monitor;
-
- G_LOCK (hal_vm);
- volume_monitor = NULL;
- if (the_volume_monitor != NULL)
- volume_monitor = g_object_ref (the_volume_monitor);
- G_UNLOCK (hal_vm);
-
- if (volume_monitor == NULL)
- {
- /* Dammit, no monitor is set up.. so we have to create one, find
- * what the user asks for and throw it away again.
- *
- * What a waste - especially considering that there's IO
- * involved in doing this: connect to the system message bus;
- * IPC to hald...
- */
- volume_monitor = G_HAL_VOLUME_MONITOR (g_hal_volume_monitor_new ());
- }
-
- mount = NULL;
-
- /* creation of the volume monitor might actually fail */
- if (volume_monitor != NULL)
- {
- GList *l;
-
- G_LOCK (hal_vm);
-
- for (l = volume_monitor->mounts; l != NULL; l = l->next)
- {
- hal_mount = l->data;
-
- if (g_hal_mount_has_mount_path (hal_mount, mount_path))
- {
- mount = g_object_ref (hal_mount);
- break;
- }
- }
-
- G_UNLOCK (hal_vm);
-
- g_object_unref (volume_monitor);
- }
-
- return (GMount *)mount;
-}
-
-static void
-mountpoints_changed (GUnixMountMonitor *mount_monitor,
- gpointer user_data)
-{
- GHalVolumeMonitor *monitor = G_HAL_VOLUME_MONITOR (user_data);
-
- update_all (monitor, TRUE);
-}
-
-static void
-mounts_changed (GUnixMountMonitor *mount_monitor,
- gpointer user_data)
-{
- GHalVolumeMonitor *monitor = G_HAL_VOLUME_MONITOR (user_data);
-
- update_all (monitor, TRUE);
-}
-
-void
-g_hal_volume_monitor_force_update (GHalVolumeMonitor *monitor)
-{
- update_all (monitor, TRUE);
-}
-
-static void
-hal_changed (HalPool *pool,
- HalDevice *device,
- gpointer user_data)
-{
- GHalVolumeMonitor *monitor = G_HAL_VOLUME_MONITOR (user_data);
-
- /*g_warning ("hal changed");*/
-
- update_all (monitor, TRUE);
-}
-
-static GObject *
-g_hal_volume_monitor_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GObject *object;
- GHalVolumeMonitor *monitor;
- GHalVolumeMonitorClass *klass;
- GObjectClass *parent_class;
-
- G_LOCK (hal_vm);
- if (the_volume_monitor != NULL)
- {
- object = g_object_ref (the_volume_monitor);
- G_UNLOCK (hal_vm);
- return object;
- }
- G_UNLOCK (hal_vm);
-
- /*g_warning ("creating hal vm");*/
-
- object = NULL;
-
- /* Invoke parent constructor. */
- klass = G_HAL_VOLUME_MONITOR_CLASS (g_type_class_peek (G_TYPE_HAL_VOLUME_MONITOR));
- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
- object = parent_class->constructor (type,
- n_construct_properties,
- construct_properties);
-
- monitor = G_HAL_VOLUME_MONITOR (object);
- monitor->pool = g_object_ref (get_hal_pool ());
-
- monitor->mount_monitor = g_unix_mount_monitor_new ();
-
- g_signal_connect (monitor->mount_monitor,
- "mounts_changed", G_CALLBACK (mounts_changed),
- monitor);
-
- g_signal_connect (monitor->mount_monitor,
- "mountpoints_changed", G_CALLBACK (mountpoints_changed),
- monitor);
-
- g_signal_connect (monitor->pool,
- "device_added", G_CALLBACK (hal_changed),
- monitor);
-
- g_signal_connect (monitor->pool,
- "device_removed", G_CALLBACK (hal_changed),
- monitor);
-
- update_all (monitor, FALSE);
-
- G_LOCK (hal_vm);
- the_volume_monitor = monitor;
- G_UNLOCK (hal_vm);
-
- return object;
-}
-
-static void
-g_hal_volume_monitor_init (GHalVolumeMonitor *monitor)
-{
-}
-
-static gboolean
-is_supported (void)
-{
- return get_hal_pool() != NULL;
-}
-
-static GVolume *
-adopt_orphan_mount (GMount *mount, GVolumeMonitor *monitor)
-{
- GList *l;
- GFile *mount_root;
- GVolume *ret;
-
- /* This is called by the union volume monitor which does
- have a ref to this. So its guaranteed to live, unfortunately
- the pointer is not passed as an argument :/
- */
- ret = NULL;
-
- G_LOCK (hal_vm);
- if (the_volume_monitor == NULL)
- {
- G_UNLOCK (hal_vm);
- return NULL;
- }
-
- mount_root = g_mount_get_root (mount);
-
- /* cdda:// as foreign mounts */
- for (l = the_volume_monitor->disc_volumes; l != NULL; l = l->next)
- {
- GHalVolume *volume = l->data;
-
- if (g_hal_volume_has_foreign_mount_root (volume, mount_root))
- {
- g_hal_volume_adopt_foreign_mount (volume, mount);
- ret = g_object_ref (volume);
- goto found;
- }
- }
-
- found:
- g_object_unref (mount_root);
-
- G_UNLOCK (hal_vm);
- return ret;
-}
-
-static void
-g_hal_volume_monitor_class_init (GHalVolumeMonitorClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVolumeMonitorClass *monitor_class = G_VOLUME_MONITOR_CLASS (klass);
- GNativeVolumeMonitorClass *native_class = G_NATIVE_VOLUME_MONITOR_CLASS (klass);
-
- gobject_class->constructor = g_hal_volume_monitor_constructor;
- gobject_class->finalize = g_hal_volume_monitor_finalize;
- gobject_class->dispose = g_hal_volume_monitor_dispose;
-
- monitor_class->get_mounts = get_mounts;
- monitor_class->get_volumes = get_volumes;
- monitor_class->get_connected_drives = get_connected_drives;
- monitor_class->get_volume_for_uuid = get_volume_for_uuid;
- monitor_class->get_mount_for_uuid = get_mount_for_uuid;
- monitor_class->adopt_orphan_mount = adopt_orphan_mount;
- monitor_class->is_supported = is_supported;
-
- native_class->get_mount_for_mount_path = get_mount_for_mount_path;
-}
-
-/**
- * g_hal_volume_monitor_new:
- *
- * Returns: a new #GVolumeMonitor.
- **/
-GVolumeMonitor *
-g_hal_volume_monitor_new (void)
-{
- GHalVolumeMonitor *monitor;
-
- monitor = g_object_new (G_TYPE_HAL_VOLUME_MONITOR, NULL);
-
- return G_VOLUME_MONITOR (monitor);
-}
-
-static void
-diff_sorted_lists (GList *list1,
- GList *list2,
- GCompareFunc compare,
- GList **added,
- GList **removed)
-{
- int order;
-
- *added = *removed = NULL;
-
- while (list1 != NULL &&
- list2 != NULL)
- {
- order = (*compare) (list1->data, list2->data);
- if (order < 0)
- {
- *removed = g_list_prepend (*removed, list1->data);
- list1 = list1->next;
- }
- else if (order > 0)
- {
- *added = g_list_prepend (*added, list2->data);
- list2 = list2->next;
- }
- else
- { /* same item */
- list1 = list1->next;
- list2 = list2->next;
- }
- }
-
- while (list1 != NULL)
- {
- *removed = g_list_prepend (*removed, list1->data);
- list1 = list1->next;
- }
- while (list2 != NULL)
- {
- *added = g_list_prepend (*added, list2->data);
- list2 = list2->next;
- }
-}
-
-static GHalVolume *
-lookup_volume_for_mount_path (GHalVolumeMonitor *monitor,
- const char *mount_path)
-{
- GList *l;
- GHalVolume *found;
-
- found = NULL;
-
- for (l = monitor->volumes; l != NULL; l = l->next)
- {
- GHalVolume *volume = l->data;
-
- if (g_hal_volume_has_mount_path (volume, mount_path))
- {
- found = volume;
- break;
- }
- }
-
- return found;
-}
-
-static GHalVolume *
-lookup_volume_for_device_path (GHalVolumeMonitor *monitor,
- const char *device_path)
-{
- GList *l;
-
- for (l = monitor->volumes; l != NULL; l = l->next)
- {
- GHalVolume *volume = l->data;
-
- if (g_hal_volume_has_device_path (volume, device_path))
- return volume;
- }
-
- return NULL;
-}
-
-
-
-static GHalMount *
-find_mount_by_mount_path (GHalVolumeMonitor *monitor,
- const char *mount_path)
-{
- GList *l;
-
- for (l = monitor->mounts; l != NULL; l = l->next)
- {
- GHalMount *mount = l->data;
-
- if (g_hal_mount_has_mount_path (mount, mount_path))
- return mount;
- }
-
- return NULL;
-}
-
-static GHalVolume *
-find_volume_by_udi (GHalVolumeMonitor *monitor, const char *udi)
-{
- GList *l;
-
- for (l = monitor->volumes; l != NULL; l = l->next)
- {
- GHalVolume *volume = l->data;
-
- if (g_hal_volume_has_udi (volume, udi))
- return volume;
- }
-
- return NULL;
-}
-
-static GHalDrive *
-find_drive_by_udi (GHalVolumeMonitor *monitor, const char *udi)
-{
- GList *l;
-
- for (l = monitor->drives; l != NULL; l = l->next)
- {
- GHalDrive *drive = l->data;
-
- if (g_hal_drive_has_udi (drive, udi))
- return drive;
- }
-
- return NULL;
-}
-
-static GHalMount *
-find_disc_mount_by_udi (GHalVolumeMonitor *monitor, const char *udi)
-{
- GList *l;
-
- for (l = monitor->disc_mounts; l != NULL; l = l->next)
- {
- GHalMount *mount = l->data;
-
- if (g_hal_mount_has_udi (mount, udi))
- return mount;
- }
-
- return NULL;
-}
-
-static GHalVolume *
-find_disc_volume_by_udi (GHalVolumeMonitor *monitor, const char *udi)
-{
- GList *l;
-
- for (l = monitor->disc_volumes; l != NULL; l = l->next)
- {
- GHalVolume *volume = l->data;
-
- if (g_hal_volume_has_udi (volume, udi))
- return volume;
- }
-
- return NULL;
-}
-
-static gint
-hal_device_compare (HalDevice *a, HalDevice *b)
-{
- return strcmp (hal_device_get_udi (a), hal_device_get_udi (b));
-}
-
-/* TODO: move to gio */
-static gboolean
-_g_unix_mount_point_guess_should_display (GUnixMountPoint *mount_point)
-{
- const char *mount_path;
-
- mount_path = g_unix_mount_point_get_mount_path (mount_point);
-
- /* Never display internal mountpoints */
- if (g_unix_is_mount_path_system_internal (mount_path))
- return FALSE;
-
- /* Only display things in /media (which are generally user mountable)
- and home dir (fuse stuff) */
- if (g_str_has_prefix (mount_path, "/media/"))
- return TRUE;
-
- if (g_str_has_prefix (mount_path, g_get_home_dir ()))
- return TRUE;
-
- return FALSE;
-}
-
-
-static GUnixMountPoint *
-get_mount_point_for_device (HalDevice *d, GList *fstab_mount_points)
-{
- GList *l;
- const char *device_file;
- const char *device_mount_point;
-
- device_mount_point = hal_device_get_property_string (d, "volume.mount_point");
-
- device_file = hal_device_get_property_string (d, "block.device");
-
- for (l = fstab_mount_points; l != NULL; l = l->next)
- {
- GUnixMountPoint *mount_point = l->data;
- const char *device_path;
- const char *mount_path;
-
- mount_path = g_unix_mount_point_get_mount_path (mount_point);
- if (device_mount_point != NULL &&
- mount_path != NULL &&
- strcmp (device_mount_point, mount_path) == 0)
- return mount_point;
-
- device_path = g_unix_mount_point_get_device_path (mount_point);
- if (g_str_has_prefix (device_path, "LABEL="))
- {
- if (strcmp (device_path + 6, hal_device_get_property_string (d, "volume.label")) == 0)
- return mount_point;
- }
- else if (g_str_has_prefix (device_path, "UUID="))
- {
- if (g_ascii_strcasecmp (device_path + 5, hal_device_get_property_string (d, "volume.uuid")) == 0)
- return mount_point;
- }
- else
- {
- char resolved_device_path[PATH_MAX];
- /* handle symlinks such as /dev/disk/by-uuid/47C2-1994 */
- if (realpath (device_path, resolved_device_path) != NULL &&
- strcmp (resolved_device_path, device_file) == 0)
- return mount_point;
- }
- }
-
- return NULL;
-}
-
-static gboolean
-should_mount_be_ignored (HalPool *pool, HalDevice *d)
-{
- const char *device_mount_point;
-
- device_mount_point = hal_device_get_property_string (d, "volume.mount_point");
- if (device_mount_point != NULL && strlen (device_mount_point) > 0)
- {
- GUnixMountEntry *mount_entry;
-
- /*g_warning ("device_mount_point = '%s'", device_mount_point);*/
-
- mount_entry = g_unix_mount_at (device_mount_point, NULL);
- if (mount_entry != NULL) {
- if (!g_unix_mount_guess_should_display (mount_entry))
- {
- g_unix_mount_free (mount_entry);
- return TRUE;
- }
- g_unix_mount_free (mount_entry);
- }
- }
-
- return FALSE;
-}
-
-static gboolean
-should_volume_be_ignored (HalPool *pool, HalDevice *d, GList *fstab_mount_points)
-{
- gboolean volume_ignore;
- const char *volume_fsusage;
- GUnixMountPoint *mount_point;
-
- volume_fsusage = hal_device_get_property_string (d, "volume.fsusage");
- volume_ignore = hal_device_get_property_bool (d, "volume.ignore");
-
- if (volume_fsusage == NULL)
- {
- /*g_warning ("no volume.fsusage property. Refusing to ignore");*/
- return FALSE;
- }
-
- if (volume_ignore)
- return TRUE;
-
- if (strcmp (volume_fsusage, "filesystem") != 0)
- {
- /* no file system on the volume... blank and audio discs are handled in update_discs() */
-
- /* check if it's a LUKS crypto volume */
- if (strcmp (volume_fsusage, "crypto") == 0)
- {
- if (strcmp (hal_device_get_property_string (d, "volume.fstype"), "crypto_LUKS") == 0)
- {
- HalDevice *cleartext_device;
-
- /* avoid showing cryptotext volume if it's corresponding cleartext volume is available */
- cleartext_device = hal_pool_get_device_by_capability_and_string (pool,
- "block",
- "volume.crypto_luks.clear.backing_volume",
- hal_device_get_udi (d));
-
- if (cleartext_device == NULL)
- {
- return FALSE;
- }
- }
- }
- return TRUE;
- }
-
- mount_point = get_mount_point_for_device (d, fstab_mount_points);
- if (mount_point != NULL && !_g_unix_mount_point_guess_should_display (mount_point))
- return TRUE;
-
- if (hal_device_get_property_bool (d, "volume.is_mounted"))
- return should_mount_be_ignored (pool, d);
-
- return FALSE;
-}
-
-static gboolean
-should_drive_be_ignored (HalPool *pool, HalDevice *d, GList *fstab_mount_points)
-{
- GList *volumes, *l;
- const char *drive_udi;
- gboolean all_volumes_ignored, got_volumes;
-
- /* never ignore drives with removable media */
- if (hal_device_get_property_bool (d, "storage.removable"))
- return FALSE;
-
- drive_udi = hal_device_get_udi (d);
-
- volumes = hal_pool_find_by_capability (pool, "volume");
-
- all_volumes_ignored = TRUE;
- got_volumes = FALSE;
- for (l = volumes; l != NULL; l = l->next)
- {
- HalDevice *volume_dev = l->data;
- if (strcmp (drive_udi, hal_device_get_property_string (volume_dev, "block.storage_device")) == 0)
- {
- got_volumes = TRUE;
- if (!should_volume_be_ignored (pool, volume_dev, fstab_mount_points) ||
- hal_device_get_property_bool (volume_dev, "volume.disc.has_audio") ||
- hal_device_get_property_bool (volume_dev, "volume.disc.is_blank"))
- {
- all_volumes_ignored = FALSE;
- break;
- }
- }
- }
-
- return got_volumes && all_volumes_ignored;
-}
-
-static void
-list_emit (GHalVolumeMonitor *monitor,
- const char *monitor_signal,
- const char *object_signal,
- GList *objects)
-{
- GList *l;
-
- for (l = objects; l != NULL; l = l->next)
- {
- g_signal_emit_by_name (monitor, monitor_signal, l->data);
- if (object_signal)
- g_signal_emit_by_name (l->data, object_signal);
- }
-}
-
-typedef struct {
- GHalVolumeMonitor *monitor;
- GList *added_drives, *removed_drives;
- GList *added_volumes, *removed_volumes;
- GList *added_mounts, *removed_mounts;
-} ChangedLists;
-
-
-static gboolean
-emit_lists_in_idle (gpointer data)
-{
- ChangedLists *lists = data;
-
- list_emit (lists->monitor,
- "drive_disconnected", NULL,
- lists->removed_drives);
- list_emit (lists->monitor,
- "drive_connected", NULL,
- lists->added_drives);
-
- list_emit (lists->monitor,
- "volume_removed", "removed",
- lists->removed_volumes);
- list_emit (lists->monitor,
- "volume_added", NULL,
- lists->added_volumes);
-
- list_emit (lists->monitor,
- "mount_removed", "unmounted",
- lists->removed_mounts);
- list_emit (lists->monitor,
- "mount_added", NULL,
- lists->added_mounts);
-
- list_free (lists->removed_drives);
- list_free (lists->added_drives);
- list_free (lists->removed_volumes);
- list_free (lists->added_volumes);
- list_free (lists->removed_mounts);
- list_free (lists->added_mounts);
- g_object_unref (lists->monitor);
- g_free (lists);
-
- return FALSE;
-}
-
-/* Must be called from idle if emit_changes, with no locks held */
-static void
-update_all (GHalVolumeMonitor *monitor,
- gboolean emit_changes)
-{
- ChangedLists *lists;
- GList *added_drives, *removed_drives;
- GList *added_volumes, *removed_volumes;
- GList *added_mounts, *removed_mounts;
-
- added_drives = NULL;
- removed_drives = NULL;
- added_volumes = NULL;
- removed_volumes = NULL;
- added_mounts = NULL;
- removed_mounts = NULL;
-
- G_LOCK (hal_vm);
- update_drives (monitor, &added_drives, &removed_drives);
- update_volumes (monitor, &added_volumes, &removed_volumes);
- update_mounts (monitor, &added_mounts, &removed_mounts);
- update_discs (monitor,
- &added_volumes, &removed_volumes,
- &added_mounts, &removed_mounts);
- G_UNLOCK (hal_vm);
-
- if (emit_changes)
- {
- lists = g_new0 (ChangedLists, 1);
- lists->monitor = g_object_ref (monitor);
- lists->added_drives = added_drives;
- lists->removed_drives = removed_drives;
- lists->added_volumes = added_volumes;
- lists->removed_volumes = removed_volumes;
- lists->added_mounts = added_mounts;
- lists->removed_mounts = removed_mounts;
-
- g_idle_add (emit_lists_in_idle, lists);
- }
- else
- {
- list_free (removed_drives);
- list_free (added_drives);
- list_free (removed_volumes);
- list_free (added_volumes);
- list_free (removed_mounts);
- list_free (added_mounts);
- }
-}
-
-static void
-update_drives (GHalVolumeMonitor *monitor,
- GList **added_drives,
- GList **removed_drives)
-{
- GList *new_drive_devices;
- GList *removed, *added;
- GList *l, *ll;
- GHalDrive *drive;
- GList *fstab_mount_points;
-
- fstab_mount_points = g_unix_mount_points_get (NULL);
-
- new_drive_devices = hal_pool_find_by_capability (monitor->pool, "storage");
-
- /* remove devices we want to ignore - we do it here so we get to reevaluate
- * on the next update whether they should still be ignored
- */
- for (l = new_drive_devices; l != NULL; l = ll)
- {
- HalDevice *d = l->data;
- ll = l->next;
- if (should_drive_be_ignored (monitor->pool, d, fstab_mount_points))
- new_drive_devices = g_list_delete_link (new_drive_devices, l);
- }
-
- g_list_foreach (new_drive_devices, (GFunc) g_object_ref, NULL);
-
- new_drive_devices = g_list_sort (new_drive_devices, (GCompareFunc) hal_device_compare);
- diff_sorted_lists (monitor->last_drive_devices,
- new_drive_devices, (GCompareFunc) hal_device_compare,
- &added, &removed);
-
- for (l = removed; l != NULL; l = l->next)
- {
- HalDevice *d = l->data;
-
- drive = find_drive_by_udi (monitor, hal_device_get_udi (d));
- if (drive != NULL)
- {
- /*g_warning ("hal removing drive %s", hal_device_get_property_string (d, "block.device"));*/
- g_hal_drive_disconnected (drive);
- monitor->drives = g_list_remove (monitor->drives, drive);
- *removed_drives = g_list_prepend (*removed_drives, drive);
- }
- }
-
- for (l = added; l != NULL; l = l->next)
- {
- HalDevice *d = l->data;
-
- drive = find_drive_by_udi (monitor, hal_device_get_udi (d));
- if (drive == NULL)
- {
- /*g_warning ("hal adding drive %s", hal_device_get_property_string (d, "block.device"));*/
- drive = g_hal_drive_new (G_VOLUME_MONITOR (monitor), d, monitor->pool);
- if (drive != NULL)
- {
- monitor->drives = g_list_prepend (monitor->drives, drive);
- *added_drives = g_list_prepend (*added_drives, g_object_ref (drive));
- }
- }
- }
-
- g_list_free (added);
- g_list_free (removed);
- list_free (monitor->last_drive_devices);
- monitor->last_drive_devices = new_drive_devices;
-
- g_list_foreach (fstab_mount_points, (GFunc) g_unix_mount_point_free, NULL);
- g_list_free (fstab_mount_points);
-}
-
-static void
-update_volumes (GHalVolumeMonitor *monitor,
- GList **added_volumes,
- GList **removed_volumes)
-{
- GList *new_volume_devices;
- GList *removed, *added;
- GList *l, *ll;
- GHalVolume *volume;
- GHalDrive *drive;
- GList *fstab_mount_points;
-
- fstab_mount_points = g_unix_mount_points_get (NULL);
-
- new_volume_devices = hal_pool_find_by_capability (monitor->pool, "volume");
-
- /* remove devices we want to ignore - we do it here so we get to reevaluate
- * on the next update whether they should still be ignored
- */
- for (l = new_volume_devices; l != NULL; l = ll)
- {
- HalDevice *d = l->data;
- ll = l->next;
- if (should_volume_be_ignored (monitor->pool, d, fstab_mount_points))
- new_volume_devices = g_list_delete_link (new_volume_devices, l);
- }
-
- g_list_foreach (new_volume_devices, (GFunc) g_object_ref, NULL);
-
- new_volume_devices = g_list_sort (new_volume_devices, (GCompareFunc) hal_device_compare);
- diff_sorted_lists (monitor->last_volume_devices,
- new_volume_devices, (GCompareFunc) hal_device_compare,
- &added, &removed);
-
- for (l = removed; l != NULL; l = l->next)
- {
- HalDevice *d = l->data;
-
- volume = find_volume_by_udi (monitor, hal_device_get_udi (d));
- if (volume != NULL)
- {
- /*g_warning ("hal removing vol %s", hal_device_get_property_string (d, "block.device"));*/
- g_hal_volume_removed (volume);
- monitor->volumes = g_list_remove (monitor->volumes, volume);
-
- *removed_volumes = g_list_prepend (*removed_volumes, volume);
- }
- }
-
- for (l = added; l != NULL; l = l->next)
- {
- HalDevice *d = l->data;
-
- volume = find_volume_by_udi (monitor, hal_device_get_udi (d));
- if (volume == NULL)
- {
- drive = find_drive_by_udi (monitor, hal_device_get_property_string (d, "block.storage_device"));
-
- /*g_warning ("hal adding vol %s (drive %p)", hal_device_get_property_string (d, "block.device"), drive);*/
- volume = g_hal_volume_new (G_VOLUME_MONITOR (monitor),
- d,
- monitor->pool,
- NULL,
- TRUE,
- drive);
- if (volume != NULL)
- {
- monitor->volumes = g_list_prepend (monitor->volumes, volume);
- *added_volumes = g_list_prepend (*added_volumes, g_object_ref (volume));
- }
- }
- }
-
- g_list_free (added);
- g_list_free (removed);
- list_free (monitor->last_volume_devices);
- monitor->last_volume_devices = new_volume_devices;
-
- g_list_foreach (fstab_mount_points, (GFunc) g_unix_mount_point_free, NULL);
- g_list_free (fstab_mount_points);
-}
-
-static void
-update_mounts (GHalVolumeMonitor *monitor,
- GList **added_mounts,
- GList **removed_mounts)
-{
- GList *new_mounts;
- GList *removed, *added;
- GList *l, *ll;
- GHalMount *mount;
- GHalVolume *volume;
- const char *device_path;
- const char *mount_path;
-
- new_mounts = g_unix_mounts_get (NULL);
-
- /* remove mounts we want to ignore - we do it here so we get to reevaluate
- * on the next update whether they should still be ignored
- */
- for (l = new_mounts; l != NULL; l = ll)
- {
- GUnixMountEntry *mount_entry = l->data;
- ll = l->next;
-
- /* keep in sync with should_mount_be_ignored() */
- if (!g_unix_mount_guess_should_display (mount_entry))
- {
- g_unix_mount_free (mount_entry);
- new_mounts = g_list_delete_link (new_mounts, l);
- }
- }
-
- new_mounts = g_list_sort (new_mounts, (GCompareFunc) g_unix_mount_compare);
-
- diff_sorted_lists (monitor->last_mounts,
- new_mounts, (GCompareFunc) g_unix_mount_compare,
- &added, &removed);
-
- for (l = removed; l != NULL; l = l->next)
- {
- GUnixMountEntry *mount_entry = l->data;
-
- mount = find_mount_by_mount_path (monitor, g_unix_mount_get_mount_path (mount_entry));
- /*g_warning ("hal removing mount %s (%p)", g_unix_mount_get_device_path (mount_entry), mount);*/
- if (mount)
- {
- g_hal_mount_unmounted (mount);
- monitor->mounts = g_list_remove (monitor->mounts, mount);
-
- *removed_mounts = g_list_prepend (*removed_mounts, mount);
- }
- }
-
- for (l = added; l != NULL; l = l->next)
- {
- GUnixMountEntry *mount_entry = l->data;
-
- device_path = g_unix_mount_get_device_path (mount_entry);
- mount_path = g_unix_mount_get_mount_path (mount_entry);
- volume = lookup_volume_for_device_path (monitor, device_path);
- if (volume == NULL)
- volume = lookup_volume_for_mount_path (monitor, mount_path);
-
- /*g_warning ("hal adding mount %s (vol %p)", g_unix_mount_get_device_path (mount_entry), volume);*/
- mount = g_hal_mount_new (G_VOLUME_MONITOR (monitor), mount_entry, monitor->pool, volume);
- if (mount)
- {
- monitor->mounts = g_list_prepend (monitor->mounts, mount);
- *added_mounts = g_list_prepend (*added_mounts, g_object_ref (mount));
- }
- }
-
- g_list_free (added);
- g_list_free (removed);
- g_list_foreach (monitor->last_mounts,
- (GFunc)g_unix_mount_free, NULL);
- g_list_free (monitor->last_mounts);
- monitor->last_mounts = new_mounts;
-}
-
-static void
-update_discs (GHalVolumeMonitor *monitor,
- GList **added_volumes,
- GList **removed_volumes,
- GList **added_mounts,
- GList **removed_mounts)
-{
- GList *new_optical_disc_devices;
- GList *removed, *added;
- GList *l, *ll;
- GHalDrive *drive;
- GHalVolume *volume;
- GHalMount *mount;
- const char *udi;
- const char *drive_udi;
-
- /* we also need to generate GVolume + GMount objects for
- *
- * - optical discs that have audio
- * - optical discs that are blank
- *
- */
-
- new_optical_disc_devices = hal_pool_find_by_capability (monitor->pool, "volume.disc");
- for (l = new_optical_disc_devices; l != NULL; l = ll)
- {
- HalDevice *d = l->data;
- ll = l->next;
- if (! (hal_device_get_property_bool (d, "volume.disc.is_blank") ||
- hal_device_get_property_bool (d, "volume.disc.has_audio")))
- {
- /* filter out everything but discs that are blank or has audio */
- new_optical_disc_devices = g_list_delete_link (new_optical_disc_devices, l);
- }
- }
-
- g_list_foreach (new_optical_disc_devices, (GFunc) g_object_ref, NULL);
-
- new_optical_disc_devices = g_list_sort (new_optical_disc_devices, (GCompareFunc) hal_device_compare);
- diff_sorted_lists (monitor->last_optical_disc_devices,
- new_optical_disc_devices, (GCompareFunc) hal_device_compare,
- &added, &removed);
-
- for (l = removed; l != NULL; l = l->next)
- {
- HalDevice *d = l->data;
-
- udi = hal_device_get_udi (d);
- /*g_warning ("audio/blank disc removing %s", udi);*/
-
- mount = find_disc_mount_by_udi (monitor, udi);
- if (mount != NULL)
- {
- g_hal_mount_unmounted (mount);
- monitor->disc_mounts = g_list_remove (monitor->disc_mounts, mount);
- *removed_mounts = g_list_prepend (*removed_mounts, mount);
- }
-
- volume = find_disc_volume_by_udi (monitor, udi);
- if (volume != NULL)
- {
- g_hal_volume_removed (volume);
- monitor->disc_volumes = g_list_remove (monitor->disc_volumes, volume);
- *removed_volumes = g_list_prepend (*removed_volumes, volume);
- }
- }
-
- for (l = added; l != NULL; l = l->next)
- {
- HalDevice *d = l->data;
-
- udi = hal_device_get_udi (d);
- /*g_warning ("audio/blank disc adding %s", udi);*/
-
- drive_udi = hal_device_get_property_string (d, "block.storage_device");
- drive = find_drive_by_udi (monitor, drive_udi);
- if (drive != NULL)
- {
- mount = NULL;
- if (hal_device_get_property_bool (d, "volume.disc.is_blank"))
- {
- volume = g_hal_volume_new (G_VOLUME_MONITOR (monitor),
- d, monitor->pool,
- NULL,
- FALSE,
- drive);
- if (volume != NULL)
- {
- GFile *root;
- root = g_file_new_for_uri ("burn:///");
- mount = g_hal_mount_new_for_hal_device (G_VOLUME_MONITOR (monitor),
- d,
- root,
- NULL,
- NULL,
- TRUE,
- monitor->pool,
- volume);
- g_object_unref (root);
- }
- }
- else
- {
- char *uri;
- char *device_basename;
- GFile *foreign_mount_root;
-
- /* the gvfsd-cdda backend uses URI's like these */
- device_basename = g_path_get_basename (hal_device_get_property_string (d, "block.device"));
- uri = g_strdup_printf ("cdda://%s", device_basename);
- foreign_mount_root = g_file_new_for_uri (uri);
- g_free (device_basename);
- g_free (uri);
-
- volume = g_hal_volume_new (G_VOLUME_MONITOR (monitor),
- d,
- monitor->pool,
- foreign_mount_root,
- TRUE,
- drive);
- g_object_unref (foreign_mount_root);
- mount = NULL;
- }
-
- if (volume != NULL)
- {
- monitor->disc_volumes = g_list_prepend (monitor->disc_volumes, volume);
- *added_volumes = g_list_prepend (*added_volumes, g_object_ref (volume));
-
- if (mount != NULL)
- {
- monitor->disc_mounts = g_list_prepend (monitor->disc_mounts, mount);
- *added_mounts = g_list_prepend (*added_mounts, g_object_ref (mount));
- }
- }
- }
- }
-
- g_list_free (added);
- g_list_free (removed);
- list_free (monitor->last_optical_disc_devices);
- monitor->last_optical_disc_devices = new_optical_disc_devices;
-}
diff --git a/monitor/hal/ghalvolumemonitor.h b/monitor/hal/ghalvolumemonitor.h
deleted file mode 100644
index a8397030..00000000
--- a/monitor/hal/ghalvolumemonitor.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_HAL_VOLUME_MONITOR_H__
-#define __G_HAL_VOLUME_MONITOR_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <gio/gunixmounts.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_HAL_VOLUME_MONITOR (g_hal_volume_monitor_get_type ())
-#define G_HAL_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_HAL_VOLUME_MONITOR, GHalVolumeMonitor))
-#define G_HAL_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_HAL_VOLUME_MONITOR, GHalVolumeMonitorClass))
-#define G_IS_HAL_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_HAL_VOLUME_MONITOR))
-#define G_IS_HAL_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_HAL_VOLUME_MONITOR))
-
-typedef struct _GHalVolumeMonitor GHalVolumeMonitor;
-typedef struct _GHalVolumeMonitorClass GHalVolumeMonitorClass;
-
-/* Forward definitions */
-typedef struct _GHalDrive GHalDrive;
-typedef struct _GHalVolume GHalVolume;
-typedef struct _GHalMount GHalMount;
-
-struct _GHalVolumeMonitorClass {
- GNativeVolumeMonitorClass parent_class;
-
-};
-
-GType g_hal_volume_monitor_get_type (void) G_GNUC_CONST;
-
-GVolumeMonitor *g_hal_volume_monitor_new (void);
-void g_hal_volume_monitor_force_update (GHalVolumeMonitor *monitor);
-
-G_END_DECLS
-
-#endif /* __G_HAL_VOLUME_MONITOR_H__ */
diff --git a/monitor/hal/hal-device.c b/monitor/hal/hal-device.c
deleted file mode 100644
index 9f0b5bc3..00000000
--- a/monitor/hal/hal-device.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/* hal-device.c
- *
- * Copyright (C) 2007 David Zeuthen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <glib/gi18n-lib.h>
-#include "hal-device.h"
-#include "hal-marshal.h"
-
-struct _HalDevicePrivate
-{
- LibHalContext *hal_ctx;
- LibHalPropertySet *properties;
- char *udi;
- GTimeVal time_added;
-};
-
-enum {
- HAL_PROPERTY_CHANGED,
- HAL_CONDITION,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (HalDevice, hal_device, G_TYPE_OBJECT)
-
-static void
-hal_device_finalize (HalDevice *device)
-{
- if (device->priv->properties != NULL)
- libhal_free_property_set (device->priv->properties);
- g_free (device->priv->udi);
-
- if (G_OBJECT_CLASS (hal_device_parent_class)->finalize)
- (* G_OBJECT_CLASS (hal_device_parent_class)->finalize) (G_OBJECT (device));
-}
-
-static void
-hal_device_class_init (HalDeviceClass *klass)
-{
- GObjectClass *obj_class = (GObjectClass *) klass;
-
- obj_class->finalize = (GObjectFinalizeFunc) hal_device_finalize;
-
- signals[HAL_PROPERTY_CHANGED] =
- g_signal_new ("hal_property_changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalDeviceClass, hal_property_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[HAL_CONDITION] =
- g_signal_new ("hal_condition",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalDeviceClass, hal_condition),
- NULL, NULL,
- hal_marshal_VOID__STRING_STRING,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_STRING);
-}
-
-static void
-hal_device_init (HalDevice *device)
-{
- device->priv = g_new0 (HalDevicePrivate, 1);
- g_get_current_time (&(device->priv->time_added));
-}
-
-const char *
-hal_device_get_property_string (HalDevice *device, const char *key)
-{
- const char *ret;
-
- ret = libhal_ps_get_string (device->priv->properties, key);
- if (ret != NULL)
- return ret;
-
- /* play it safe and don't make clients crash */
- return "";
-}
-
-int
-hal_device_get_property_int (HalDevice *device, const char *key)
-{
- return libhal_ps_get_int32 (device->priv->properties, key);
-}
-
-double
-hal_device_get_property_double (HalDevice *device, const char *key)
-{
- return libhal_ps_get_double (device->priv->properties, key);
-}
-
-guint64
-hal_device_get_property_uint64 (HalDevice *device, const char *key)
-{
- return libhal_ps_get_uint64 (device->priv->properties, key);
-}
-
-gboolean
-hal_device_get_property_bool (HalDevice *device, const char *key)
-{
- return libhal_ps_get_bool (device->priv->properties, key);
-}
-
-char **
-hal_device_get_property_strlist (HalDevice *device, const char *key)
-{
- static char * empty[1] = {NULL};
- char **ret;
-
- ret = (char **) libhal_ps_get_strlist (device->priv->properties, key);
- if (ret != NULL)
- return (char **) ret;
-
- /* play it safe and don't make clients crash */
- return empty;
-}
-
-gboolean
-hal_device_has_capability (HalDevice *device, const char *capability)
-{
- int n;
- char **caps;
- gboolean ret;
-
- ret = FALSE;
- caps = hal_device_get_property_strlist (device, "info.capabilities");
- if (caps == NULL)
- goto out;
-
- for (n = 0; caps[n] != NULL; n++)
- {
- if (g_ascii_strcasecmp (caps[n], capability) == 0)
- {
- ret = TRUE;
- break;
- }
- }
-
- out:
- return ret;
-}
-
-gboolean
-hal_device_has_interface (HalDevice *device, const char *interface)
-{
- int n;
- char **ifs;
- gboolean ret;
-
- ret = FALSE;
- ifs = hal_device_get_property_strlist (device, "info.interfaces");
- if (ifs == NULL)
- goto out;
-
- for (n = 0; ifs[n] != NULL; n++)
- {
- if (g_ascii_strcasecmp (ifs[n], interface) == 0)
- {
- ret = TRUE;
- break;
- }
- }
-
-out:
- return ret;
-}
-
-gboolean
-hal_device_has_property (HalDevice *device, const char *key)
-{
- gboolean ret;
- LibHalPropertySetIterator it;
-
- ret = FALSE;
- if (device->priv->properties == NULL)
- goto out;
-
- libhal_psi_init (&it, device->priv->properties);
-
- while (libhal_psi_has_more (&it))
- {
- char *pkey = libhal_psi_get_key (&it);
-
- if (pkey != NULL && g_ascii_strcasecmp (pkey, key) == 0)
- {
- ret = TRUE;
- break;
- }
- libhal_psi_next (&it);
- }
-
- out:
- return ret;
-}
-
-
-HalDevice *
-hal_device_new_from_udi (LibHalContext *hal_ctx, const char *udi)
-{
- HalDevice *device;
-
- device = HAL_DEVICE (g_object_new (HAL_TYPE_DEVICE, NULL));
- device->priv->udi = g_strdup (udi);
- device->priv->hal_ctx = hal_ctx;
- device->priv->properties = libhal_device_get_all_properties (hal_ctx, udi, NULL);
- return device;
-}
-
-HalDevice *
-hal_device_new_from_udi_and_properties (LibHalContext *hal_ctx,
- char *udi,
- LibHalPropertySet *properties)
-{
- HalDevice *device;
-
- device = HAL_DEVICE (g_object_new (HAL_TYPE_DEVICE, NULL));
- device->priv->udi = g_strdup (udi);
- device->priv->hal_ctx = hal_ctx;
- device->priv->properties = properties;
- return device;
-}
-
-void
-_hal_device_hal_property_changed (HalDevice *device, const char *key);
-
-void
-_hal_device_hal_condition (HalDevice *device, const char *name, const char *detail);
-
-void
-_hal_device_hal_property_changed (HalDevice *device, const char *key)
-{
- LibHalPropertySet *new_props;
-
- new_props = libhal_device_get_all_properties (device->priv->hal_ctx, device->priv->udi, NULL);
- if (new_props != NULL)
- {
- libhal_free_property_set (device->priv->properties);
- device->priv->properties = new_props;
- g_signal_emit (device, signals[HAL_PROPERTY_CHANGED], 0, key);
- }
-}
-
-void
-_hal_device_hal_condition (HalDevice *device, const char *name, const char *detail)
-{
- g_signal_emit (device, signals[HAL_CONDITION], 0, name, detail);
-}
-
-const char *
-hal_device_get_udi (HalDevice *device)
-{
- return device->priv->udi;
-}
-
-LibHalPropertySet *
-hal_device_get_properties (HalDevice *device)
-{
- return device->priv->properties;
-}
-
-gboolean
-hal_device_is_recently_plugged_in (HalDevice *device)
-{
- GTimeVal now;
- glong delta_msec;
-
- g_get_current_time (&now);
-
- delta_msec = (now.tv_sec - device->priv->time_added.tv_sec) * 1000 +
- (now.tv_usec - device->priv->time_added.tv_usec) / 1000;
-
- return delta_msec < 2000;
-}
diff --git a/monitor/hal/hal-device.h b/monitor/hal/hal-device.h
deleted file mode 100644
index 8e91aa63..00000000
--- a/monitor/hal/hal-device.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* hal-device.h
- *
- * Copyright (C) 2007 David Zeuthen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef HAL_DEVICE_H
-#define HAL_DEVICE_H
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <libhal.h>
-
-#define HAL_TYPE_DEVICE (hal_device_get_type ())
-#define HAL_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HAL_TYPE_DEVICE, HalDevice))
-#define HAL_DEVICE_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), HAL_DEVICE, HalDeviceClass))
-#define HAL_IS_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HAL_TYPE_DEVICE))
-#define HAL_IS_DEVICE_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), HAL_TYPE_DEVICE))
-#define HAL_DEVICE_GET_CLASS (G_TYPE_INSTANCE_GET_CLASS ((obj), HAL_TYPE_DEVICE, HalDeviceClass))
-
-
-typedef struct _HalDevice HalDevice;
-typedef struct _HalDeviceClass HalDeviceClass;
-
-struct _HalDevicePrivate;
-typedef struct _HalDevicePrivate HalDevicePrivate;
-
-struct _HalDevice
-{
- GObject parent;
-
- /* private */
- HalDevicePrivate *priv;
-};
-
-struct _HalDeviceClass
-{
- GObjectClass parent_class;
-
- /* signals */
- void (*hal_property_changed) (HalDevice *device, const char *key);
- void (*hal_condition) (HalDevice *device, const char *name, const char *detail);
-};
-
-
-GType hal_device_get_type (void);
-
-HalDevice * hal_device_new_from_udi (LibHalContext *hal_ctx,
- const char *udi);
-
-HalDevice * hal_device_new_from_udi_and_properties (LibHalContext *hal_ctx,
- char *udi,
- LibHalPropertySet *properties);
-
-const char * hal_device_get_udi (HalDevice *device);
-LibHalPropertySet * hal_device_get_properties (HalDevice *device);
-const char * hal_device_get_property_string (HalDevice *device,
- const char *key);
-int hal_device_get_property_int (HalDevice *device,
- const char *key);
-guint64 hal_device_get_property_uint64 (HalDevice *device,
- const char *key);
-double hal_device_get_property_double (HalDevice *device,
- const char *key);
-gboolean hal_device_get_property_bool (HalDevice *device,
- const char *key);
-char ** hal_device_get_property_strlist (HalDevice *device,
- const char *key);
-
-gboolean hal_device_has_property (HalDevice *device,
- const char *key);
-gboolean hal_device_has_capability (HalDevice *device,
- const char *capability);
-gboolean hal_device_has_interface (HalDevice *device,
- const char *interface);
-
-gboolean hal_device_is_recently_plugged_in (HalDevice *device);
-
-#endif /* HAL_DEVICE_H */
diff --git a/monitor/hal/hal-marshal.list b/monitor/hal/hal-marshal.list
deleted file mode 100644
index 52c82338..00000000
--- a/monitor/hal/hal-marshal.list
+++ /dev/null
@@ -1,3 +0,0 @@
-VOID:OBJECT,STRING
-VOID:OBJECT,STRING,STRING
-VOID:STRING,STRING
diff --git a/monitor/hal/hal-pool.c b/monitor/hal/hal-pool.c
deleted file mode 100644
index 770effd9..00000000
--- a/monitor/hal/hal-pool.c
+++ /dev/null
@@ -1,458 +0,0 @@
-/* hal-pool.c
- *
- * Copyright (C) 2007 David Zeuthen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-
-#include <gdbusutils.h>
-
-#include "hal-pool.h"
-#include "hal-marshal.h"
-
-enum {
- DEVICE_ADDED,
- DEVICE_REMOVED,
- DEVICE_PROPERTY_CHANGED,
- DEVICE_CONDITION,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-struct _HalPoolPrivate
-{
- char **cap_only;
-
- DBusConnection *dbus_connection;
- LibHalContext *hal_ctx;
- GHashTable *devices;
-};
-
-G_DEFINE_TYPE (HalPool, hal_pool, G_TYPE_OBJECT)
-
-static void
-hal_pool_finalize (HalPool *pool)
-{
- g_strfreev (pool->priv->cap_only);
-
- dbus_bus_remove_match (pool->priv->dbus_connection,
- "type='signal',"
- "interface='org.freedesktop.Hal.Device',"
- "sender='org.freedesktop.Hal'", NULL);
- libhal_ctx_shutdown (pool->priv->hal_ctx, NULL);
- dbus_connection_close (pool->priv->dbus_connection);
- dbus_connection_unref (pool->priv->dbus_connection);
-
- if (G_OBJECT_CLASS (hal_pool_parent_class)->finalize)
- (* G_OBJECT_CLASS (hal_pool_parent_class)->finalize) (G_OBJECT (pool));
-}
-
-static void
-hal_pool_class_init (HalPoolClass *klass)
-{
- GObjectClass *obj_class = (GObjectClass *) klass;
-
- obj_class->finalize = (GObjectFinalizeFunc) hal_pool_finalize;
-
- g_type_class_ref (HAL_TYPE_DEVICE);
-
- signals[DEVICE_ADDED] =
- g_signal_new ("device_added",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalPoolClass, device_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- HAL_TYPE_DEVICE);
-
- signals[DEVICE_REMOVED] =
- g_signal_new ("device_removed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalPoolClass, device_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- HAL_TYPE_DEVICE);
-
- signals[DEVICE_PROPERTY_CHANGED] =
- g_signal_new ("device_property_changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalPoolClass, device_property_changed),
- NULL, NULL,
- hal_marshal_VOID__OBJECT_STRING,
- G_TYPE_NONE, 2,
- HAL_TYPE_DEVICE,
- G_TYPE_STRING);
-
- signals[DEVICE_CONDITION] =
- g_signal_new ("device_condition",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (HalPoolClass, device_condition),
- NULL, NULL,
- hal_marshal_VOID__OBJECT_STRING_STRING,
- G_TYPE_NONE, 3,
- HAL_TYPE_DEVICE,
- G_TYPE_STRING,
- G_TYPE_STRING);
-}
-
-static void
-hal_pool_init (HalPool *pool)
-{
- pool->priv = g_new0 (HalPoolPrivate, 1);
- pool->priv->hal_ctx = NULL;
-}
-
-static gboolean
-has_cap_only (HalPool *pool, HalDevice *device)
-{
- const char *subsys;
- unsigned int n;
-
- for (n = 0; pool->priv->cap_only != NULL && pool->priv->cap_only[n] != NULL; n++)
- {
- if (hal_device_has_capability (device, pool->priv->cap_only[n]))
- return TRUE;
-
- subsys = hal_device_get_property_string (device, "info.subsystem");
-
- if (subsys != NULL && strcmp (subsys, pool->priv->cap_only[n]) == 0)
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-hal_pool_add_device_by_udi (HalPool *pool,
- const char *udi,
- gboolean emit_signal)
-{
- HalDevice *device;
-
- device = hal_device_new_from_udi (pool->priv->hal_ctx, udi);
- if (device != NULL)
- {
- if (!has_cap_only (pool, device))
- g_object_unref (device);
- else
- {
- g_hash_table_insert (pool->priv->devices, g_strdup (udi), device);
- if (emit_signal)
- g_signal_emit (pool, signals[DEVICE_ADDED], 0, device);
- }
- }
-}
-
-#ifdef HAVE_HAL_FAST_INIT
-static void
-hal_pool_add_device_by_udi_and_properties (HalPool *pool,
- char *udi,
- LibHalPropertySet *properties,
- gboolean emit_signal)
-{
- HalDevice *device;
-
- device = hal_device_new_from_udi_and_properties (pool->priv->hal_ctx, udi, properties);
- if (device != NULL)
- {
- if (!has_cap_only (pool, device))
- g_object_unref (device);
- else
- {
- g_hash_table_insert (pool->priv->devices, g_strdup (udi), device);
- if (emit_signal)
- g_signal_emit (pool, signals[DEVICE_ADDED], 0, device);
- }
- }
-}
-#endif
-
-static void
-_hal_device_added (LibHalContext *hal_ctx, const char *udi)
-{
- HalPool *pool;
-
- pool = HAL_POOL (libhal_ctx_get_user_data (hal_ctx));
- hal_pool_add_device_by_udi (pool, udi, TRUE);
-}
-
-static void
-_hal_device_removed (LibHalContext *hal_ctx, const char *udi)
-{
- HalPool *pool;
- HalDevice *device;
-
- pool = HAL_POOL (libhal_ctx_get_user_data (hal_ctx));
- if ((device = hal_pool_get_device_by_udi (pool, udi)) != NULL)
- {
- g_object_ref (device);
- g_hash_table_remove (pool->priv->devices, udi);
- g_signal_emit (pool, signals[DEVICE_REMOVED], 0, device);
- g_object_unref (device);
- }
-}
-
-void
-_hal_device_hal_property_changed (HalDevice *device, const char *key);
-
-void
-_hal_device_hal_condition (HalDevice *device, const char *name, const char *detail);
-
-static void
-_hal_property_modified (LibHalContext *ctx,
- const char *udi,
- const char *key,
- dbus_bool_t is_removed,
- dbus_bool_t is_added)
-{
- HalPool *pool;
- HalDevice *device;
-
- pool = HAL_POOL (libhal_ctx_get_user_data (ctx));
-
- device = hal_pool_get_device_by_udi (pool, udi);
- if (device != NULL)
- {
- _hal_device_hal_property_changed (device, key);
- g_signal_emit (pool, signals[DEVICE_PROPERTY_CHANGED], 0, device, key);
- }
-}
-
-static void
-_hal_condition (LibHalContext *ctx,
- const char *udi,
- const char *condition_name,
- const char *condition_detail)
-{
- HalPool *pool;
- HalDevice *device;
-
- pool = HAL_POOL (libhal_ctx_get_user_data (ctx));
-
- device = hal_pool_get_device_by_udi (pool, udi);
- if (device != NULL)
- {
- _hal_device_hal_condition (device, condition_name, condition_detail);
- g_signal_emit (pool, signals[DEVICE_CONDITION], 0, device, condition_name, condition_detail);
- }
-}
-
-LibHalContext *
-hal_pool_get_hal_ctx (HalPool *pool)
-{
- return pool->priv->hal_ctx;
-}
-
-DBusConnection *
-hal_pool_get_dbus_connection (HalPool *pool)
-{
- return pool->priv->dbus_connection;
-}
-
-HalPool *
-hal_pool_new (char **cap_only)
-{
- int i;
- char **devices;
- int num_devices;
- HalPool *pool;
- LibHalContext *hal_ctx;
- DBusError error;
- DBusConnection *dbus_connection;
-#ifdef HAVE_HAL_FAST_INIT
- LibHalPropertySet **properties;
-#endif
-
- pool = NULL;
-
- dbus_error_init (&error);
- /* see discussion on gtk-devel-list (Subject: Re: gvfs hal volume monitoring backend) on
- * why this is private
- */
- dbus_connection = dbus_bus_get_private (DBUS_BUS_SYSTEM, &error);
- if (dbus_error_is_set (&error))
- {
- dbus_error_free (&error);
- goto out;
- }
-
- dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
-
- hal_ctx = libhal_ctx_new ();
- if (hal_ctx == NULL)
- {
- dbus_connection_close (dbus_connection);
- dbus_connection_unref (dbus_connection);
- goto out;
- }
-
- _g_dbus_connection_integrate_with_main (dbus_connection);
- libhal_ctx_set_dbus_connection (hal_ctx, dbus_connection);
-
- if (!libhal_ctx_init (hal_ctx, &error))
- {
- dbus_connection_close (dbus_connection);
- dbus_connection_unref (dbus_connection);
- dbus_error_free (&error);
- goto out;
- }
-
- pool = HAL_POOL (g_object_new (HAL_TYPE_POOL, NULL));
- pool->priv->dbus_connection = dbus_connection;
- pool->priv->hal_ctx = hal_ctx;
- pool->priv->devices = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
- pool->priv->cap_only = g_strdupv (cap_only);
-
- /* Gah, unfortunately we have to watch all devices as HAL's PropertyModified signal
- * doesn't include the capabilities...
- */
- dbus_bus_add_match (dbus_connection,
- "type='signal',"
- "interface='org.freedesktop.Hal.Device',"
- "sender='org.freedesktop.Hal'", NULL);
- libhal_ctx_set_device_added (hal_ctx, _hal_device_added);
- libhal_ctx_set_device_removed (hal_ctx, _hal_device_removed);
- libhal_ctx_set_device_property_modified (hal_ctx, _hal_property_modified);
- libhal_ctx_set_device_condition (hal_ctx, _hal_condition);
- libhal_ctx_set_user_data (hal_ctx, pool);
-
-#ifdef HAVE_HAL_FAST_INIT
- /* First try new O(1) algorithm to get all devices and properties in a single call..
- *
- * This method is only available in post hal 0.5.10.
- */
- if (libhal_get_all_devices_with_properties (pool->priv->hal_ctx,
- &num_devices,
- &devices,
- &properties,
- NULL))
- {
- for (i = 0; i < num_devices; i++)
- hal_pool_add_device_by_udi_and_properties (pool, devices[i], properties[i], FALSE);
- libhal_free_string_array (devices);
- free (properties); /* hal_pool_add_device_by_udi_and_properties steals the given properties */
- goto out;
- }
-#endif
-
- /* fallback to using O(n) algorithm; will work on any hal 0.5.x release */
- devices = libhal_get_all_devices (pool->priv->hal_ctx, &num_devices, NULL);
- if (devices != NULL)
- {
- for (i = 0; i < num_devices; i++)
- {
- char *device_udi;
- device_udi = devices[i];
- hal_pool_add_device_by_udi (pool, device_udi, FALSE);
- }
- libhal_free_string_array (devices);
- goto out;
- }
-
- /* FAIL! */
-
- g_object_unref (pool);
- return NULL;
-
- out:
- return pool;
-}
-
-HalDevice *
-hal_pool_get_device_by_udi (HalPool *pool, const char *udi)
-{
- return g_hash_table_lookup (pool->priv->devices, udi);
-}
-
-HalDevice *
-hal_pool_get_device_by_capability_and_string (HalPool *pool,
- const char *capability,
- const char *key,
- const char *value)
-{
- GList *i;
- GList *devices;
- HalDevice *result;
-
- result = NULL;
- devices = NULL;
-
- if (pool->priv->devices == NULL)
- goto out;
-
- devices = g_hash_table_get_values (pool->priv->devices);
- for (i = devices; i != NULL; i = i->next)
- {
- HalDevice *d = i->data;
- const char *s;
-
- if (!hal_device_has_capability (d, capability))
- continue;
-
- s = hal_device_get_property_string (d, key);
- if (s == NULL)
- continue;
-
- if (strcmp (s, value) == 0)
- {
- result = d;
- goto out;
- }
- }
-
-out:
- if (devices != NULL)
- g_list_free (devices);
- return result;
-}
-
-GList *
-hal_pool_find_by_capability (HalPool *pool, const char *capability)
-{
- GList *i;
- GList *j;
- GList *devices;
-
- devices = NULL;
-
- if (pool->priv->devices == NULL)
- goto out;
-
- devices = g_hash_table_get_values (pool->priv->devices);
- for (i = devices; i != NULL; i = j)
- {
- HalDevice *d = i->data;
-
- j = i->next;
-
- if (!hal_device_has_capability (d, capability))
- devices = g_list_delete_link (devices, i);
- }
-
- out:
- return devices;
-}
diff --git a/monitor/hal/hal-pool.h b/monitor/hal/hal-pool.h
deleted file mode 100644
index 04c8687d..00000000
--- a/monitor/hal/hal-pool.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* hal-pool.h
- *
- * Copyright (C) 2007 David Zeuthen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#if !defined(HAL_POOL_H)
-#define HAL_POOL_H
-
-#include <gio/gio.h>
-#include <gio/gunixmounts.h>
-#include "hal-device.h"
-
-#define HAL_TYPE_POOL (hal_pool_get_type ())
-#define HAL_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HAL_TYPE_POOL, HalPool))
-#define HAL_POOL_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), HAL_POOL, HalPoolClass))
-#define HAL_IS_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HAL_TYPE_POOL))
-#define HAL_IS_POOL_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), HAL_TYPE_POOL))
-#define HAL_POOL_GET_CLASS (G_TYPE_INSTANCE_GET_CLASS ((obj), HAL_TYPE_POOL, HalPoolClass))
-
-
-typedef struct _HalPool HalPool;
-typedef struct _HalPoolClass HalPoolClass;
-
-struct _HalPoolPrivate;
-typedef struct _HalPoolPrivate HalPoolPrivate;
-
-struct _HalPool
-{
- GObject parent;
-
- /* private */
- HalPoolPrivate *priv;
-};
-
-struct _HalPoolClass
-{
- GObjectClass parent_class;
-
- /* signals */
- void (*device_added) (HalPool *pool, HalDevice *device);
- void (*device_removed) (HalPool *pool, HalDevice *device);
- void (*device_property_changed) (HalPool *pool, HalDevice *device, const char *key);
- void (*device_condition) (HalPool *pool, HalDevice *device, const char *name, const char *detail);
-};
-
-GType hal_pool_get_type (void);
-HalPool * hal_pool_new (char **cap_only);
-LibHalContext * hal_pool_get_hal_ctx (HalPool *pool);
-DBusConnection * hal_pool_get_dbus_connection (HalPool *pool);
-HalDevice * hal_pool_get_device_by_udi (HalPool *pool,
- const char *udi);
-HalDevice * hal_pool_get_device_by_capability_and_string (HalPool *pool,
- const char *capability,
- const char *key,
- const char *value);
-GList * hal_pool_find_by_capability (HalPool *pool,
- const char *capability);
-
-#endif /* HAL_POOL_H */
diff --git a/monitor/hal/hal-utils.c b/monitor/hal/hal-utils.c
deleted file mode 100644
index 6bf0cd8c..00000000
--- a/monitor/hal/hal-utils.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- * Christian Kellner <gicmo@gnome.org>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-
-#include "string.h"
-
-#include "hal-utils.h"
-
-static const struct {
- const char *disc_type;
- const char *icon_name;
- char *ui_name;
- char *ui_name_blank;
-} disc_data[] = {
- {"cd_rom", "media-optical-cd-rom", N_("CD-ROM Disc"), N_("Blank CD-ROM Disc")},
- {"cd_r", "media-optical-cd-r", N_("CD-R Disc"), N_("Blank CD-R Disc")},
- {"cd_rw", "media-optical-cd-rw", N_("CD-RW Disc"), N_("Blank CD-RW Disc")},
- {"dvd_rom", "media-optical-dvd-rom", N_("DVD-ROM Disc"), N_("Blank DVD-ROM Disc")},
- {"dvd_ram", "media-optical-dvd-ram", N_("DVD-RAM Disc"), N_("Blank DVD-RAM Disc")},
- {"dvd_r", "media-optical-dvd-r", N_("DVD-ROM Disc"), N_("Blank DVD-ROM Disc")},
- {"dvd_rw", "media-optical-dvd-rw", N_("DVD-RW Disc"), N_("Blank DVD-RW Disc")},
- {"dvd_plus_r", "media-optical-dvd-r-plus", N_("DVD+R Disc"), N_("Blank DVD+R Disc")},
- {"dvd_plus_rw", "media-optical-dvd-rw-plus", N_("DVD+RW Disc"), N_("Blank DVD+RW Disc")},
- {"dvd_plus_r_dl", "media-optical-dvd-dl-r-plus", N_("DVD+R DL Disc"), N_("Blank DVD+R DL Disc")},
- {"bd_rom", "media-optical-bd-rom", N_("Blu-Ray Disc"), N_("Blank Blu-Ray Disc")},
- {"bd_r", "media-optical-bd-r", N_("Blu-Ray R Disc"), N_("Blank Blu-Ray R Disc")},
- {"bd_re", "media-optical-bd-re", N_("Blu-Ray RW Disc"), N_("Blank Blu-Ray RW Disc")},
- {"hddvd_rom", "media-optical-hddvd-rom", N_("HD DVD Disc"), N_("Blank HD DVD Disc")},
- {"hddvd_r", "media-optical-hddvd-r", N_("HD DVD-R Disc"), N_("Blank HD DVD-R Disc")},
- {"hddvd_rw", "media-optical-hddvd-rw", N_("HD DVD-RW Disc"), N_("Blank HD DVD-RW Disc")},
- {"mo", "media-optical-mo", N_("MO Disc"), N_("Blank MO Disc")},
- {NULL, "media-optical", N_("Disc"), N_("Blank Disc")}
-};
-
-const char *
-get_disc_icon (const char *disc_type)
-{
- int n;
-
- for (n = 0; disc_data[n].disc_type != NULL; n++)
- {
- if (strcmp (disc_data[n].disc_type, disc_type) == 0)
- break;
- }
-
- return disc_data[n].icon_name;
-}
-
-const char *
-get_disc_name (const char *disc_type, gboolean is_blank)
-{
- int n;
-
- for (n = 0; disc_data[n].disc_type != NULL; n++)
- {
- if (strcmp (disc_data[n].disc_type, disc_type) == 0)
- break;
- }
-
- if (is_blank)
- return dgettext (GETTEXT_PACKAGE, disc_data[n].ui_name_blank);
- else
- return dgettext (GETTEXT_PACKAGE, disc_data[n].ui_name);
-}
-
-/*
- * Creates a GThemedIcon from icon_name and creates default
- * fallbacks from fallbacks. Is smart in the case that icon_name
- * and fallbacks are identically.
- * Note: See the GThemedIcon documentation for more information
- * on default fallbacks
- */
-GIcon *
-get_themed_icon_with_fallbacks (const char *icon_name,
- const char *fallbacks)
-{
- int i = 0, dashes = 0;
- const char *p;
- char *dashp;
- char *last;
- char **names;
- GIcon *icon;
-
- if (G_UNLIKELY (icon_name == NULL))
- return NULL;
-
- if (fallbacks == NULL)
- return g_themed_icon_new (icon_name);
-
- p = fallbacks;
- while (*p)
- {
- if (*p == '-')
- dashes++;
- p++;
- }
-
- if (strcmp (icon_name, fallbacks))
- {
- names = g_new (char *, dashes + 3);
- names[i++] = g_strdup (icon_name);
- }
- else
- names = g_new (char *, dashes + 2);
-
- names[i++] = last = g_strdup (fallbacks);
-
- while ((dashp = strrchr (last, '-')) != NULL)
- names[i++] = last = g_strndup (last, dashp - last);
-
- names[i++] = NULL;
- icon = g_themed_icon_new_from_names (names, -1);
- g_strfreev (names);
-
- return icon;
-}
-
-char **
-dupv_and_uniqify (char **str_array)
-{
- int n, m, o;
- int len;
- char **result;
-
- result = g_strdupv (str_array);
- len = g_strv_length (result);
-
- for (n = 0; n < len; n++)
- {
- char *s = result[n];
- for (m = n + 1; m < len; m++)
- {
- char *p = result[m];
- if (strcmp (s, p) == 0)
- {
- for (o = m + 1; o < len; o++)
- result[o - 1] = result[o];
- len--;
- result[len] = NULL;
- m--;
- }
- }
- }
-
- return result;
-}
diff --git a/monitor/hal/hal-utils.h b/monitor/hal/hal-utils.h
deleted file mode 100644
index fd737ca2..00000000
--- a/monitor/hal/hal-utils.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- * Chrsitian Kellner <gicmo@gnome.org>
- */
-
-#ifndef __HAL_UTILS_H__
-#define __HAL_UTILS_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-const char * get_disc_icon (const char *disc_type);
-const char * get_disc_name (const char *disc_type, gboolean is_blank);
-
-GIcon * get_themed_icon_with_fallbacks (const char *icon_name,
- const char *fallbacks);
-
-char **dupv_and_uniqify (char **str_array);
-
-G_END_DECLS
-
-#endif /* __HAL_UTILS_H__ */
diff --git a/monitor/hal/hal-volume-monitor-daemon.c b/monitor/hal/hal-volume-monitor-daemon.c
deleted file mode 100644
index 6f83175d..00000000
--- a/monitor/hal/hal-volume-monitor-daemon.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gmodule.h>
-#include <gio/gio.h>
-
-#include <gvfsproxyvolumemonitordaemon.h>
-
-#include "ghalvolumemonitor.h"
-
-int
-main (int argc, char *argv[])
-{
- g_vfs_proxy_volume_monitor_daemon_init ();
- return g_vfs_proxy_volume_monitor_daemon_main (argc,
- argv,
- "org.gtk.Private.HalVolumeMonitor",
- G_TYPE_HAL_VOLUME_MONITOR);
-}
diff --git a/monitor/hal/hal.monitor b/monitor/hal/hal.monitor
deleted file mode 100644
index c287f853..00000000
--- a/monitor/hal/hal.monitor
+++ /dev/null
@@ -1,5 +0,0 @@
-[RemoteVolumeMonitor]
-Name=GProxyVolumeMonitorHal
-DBusName=org.gtk.Private.HalVolumeMonitor
-IsNative=true
-NativePriority=2
diff --git a/monitor/hal/org.gtk.Private.HalVolumeMonitor.service.in b/monitor/hal/org.gtk.Private.HalVolumeMonitor.service.in
deleted file mode 100644
index c785241d..00000000
--- a/monitor/hal/org.gtk.Private.HalVolumeMonitor.service.in
+++ /dev/null
@@ -1,3 +0,0 @@
-[D-BUS Service]
-Name=org.gtk.Private.HalVolumeMonitor
-Exec=@libexecdir@/gvfs-hal-volume-monitor
diff --git a/monitor/proxy/Makefile.am b/monitor/proxy/Makefile.am
deleted file mode 100644
index 6cb7a0e3..00000000
--- a/monitor/proxy/Makefile.am
+++ /dev/null
@@ -1,67 +0,0 @@
-
-NULL =
-
-remote_volume_monitorsdir = $(datadir)/gvfs/remote-volume-monitors
-
-module_flags = -export_dynamic -avoid-version -module -no-undefined -export-symbols-regex '^g_io_module_(load|unload)'
-
-giomodules_LTLIBRARIES = libgioremote-volume-monitor.la
-
-libgioremote_volume_monitor_la_SOURCES = \
- remote-volume-monitor-module.c \
- gproxydrive.c gproxydrive.h \
- gproxyvolume.c gproxyvolume.h \
- gproxymount.c gproxymount.h \
- gproxyvolumemonitor.c gproxyvolumemonitor.h \
- $(NULL)
-
-libgioremote_volume_monitor_la_CFLAGS = \
- -DG_LOG_DOMAIN=\"GVFS-RemoteVolumeMonitor\" \
- -I$(top_srcdir)/common \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- -DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\" \
- -DREMOTE_VOLUME_MONITORS_DIR=\"$(remote_volume_monitorsdir)\" \
- -DGVFS_LOCALEDIR=\""$(localedir)"\" \
- -DG_DISABLE_DEPRECATED \
- $(NULL)
-
-libgioremote_volume_monitor_la_LDFLAGS = \
- $(module_flags) \
- $(NULL)
-
-libgioremote_volume_monitor_la_LIBADD = \
- $(GLIB_LIBS) \
- $(DBUS_LIBS) \
- $(top_builddir)/common/libgvfscommon-noin.la \
- $(NULL)
-
-############################################################################
-
-noinst_LTLIBRARIES = libgvfsproxyvolumemonitordaemon-noin.la
-
-libgvfsproxyvolumemonitordaemon_noin_la_SOURCES = \
- gvfsproxyvolumemonitordaemon.c \
- gvfsproxyvolumemonitordaemon.h
-
-libgvfsproxyvolumemonitordaemon_noin_la_CFLAGS = \
- -I$(top_srcdir)/common \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(GDU_CFLAGS) \
- -DG_LOG_DOMAIN=\"GVFS-RemoteVolumeMonitorDaemon\" \
- -DGVFS_LOCALEDIR=\""$(localedir)"\" \
- -DG_DISABLE_DEPRECATED \
- $(NULL)
-
-libgvfsproxyvolumemonitordaemon_noin_la_LIBADD = \
- $(GLIB_LIBS) \
- $(DBUS_LIBS) \
- $(top_builddir)/common/libgvfscommon-noin.la \
- $(NULL)
-
-clean-local:
- rm -f *~ *.loT
-
-install-data-local:
- mkdir -p $(DESTDIR)$(remote_volume_monitorsdir)
diff --git a/monitor/proxy/gproxydrive.c b/monitor/proxy/gproxydrive.c
deleted file mode 100644
index b1e9533b..00000000
--- a/monitor/proxy/gproxydrive.c
+++ /dev/null
@@ -1,578 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-
-#include <gdbusutils.h>
-
-#include "gproxyvolumemonitor.h"
-#include "gproxydrive.h"
-#include "gproxyvolume.h"
-
-/* Protects all fields of GProxyDrive that can change */
-G_LOCK_DEFINE_STATIC(proxy_drive);
-
-struct _GProxyDrive {
- GObject parent;
-
- GProxyVolumeMonitor *volume_monitor;
-
- char *id;
- char *name;
- GIcon *icon;
- char **volume_ids;
- gboolean can_eject;
- gboolean can_poll_for_media;
- gboolean is_media_check_automatic;
- gboolean has_media;
- gboolean is_media_removable;
-
- GHashTable *identifiers;
-};
-
-static void g_proxy_drive_drive_iface_init (GDriveIface *iface);
-
-#define _G_IMPLEMENT_INTERFACE_DYNAMIC(TYPE_IFACE, iface_init) { \
- const GInterfaceInfo g_implement_interface_info = { \
- (GInterfaceInitFunc) iface_init, NULL, NULL \
- }; \
- g_type_module_add_interface (type_module, g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \
-}
-
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (GProxyDrive, g_proxy_drive, G_TYPE_OBJECT, 0,
- _G_IMPLEMENT_INTERFACE_DYNAMIC (G_TYPE_DRIVE,
- g_proxy_drive_drive_iface_init))
-
-static void
-g_proxy_drive_finalize (GObject *object)
-{
- GProxyDrive *drive;
-
- drive = G_PROXY_DRIVE (object);
-
- if (drive->volume_monitor != NULL)
- g_object_unref (drive->volume_monitor);
- g_free (drive->id);
- g_free (drive->name);
- if (drive->icon != NULL)
- g_object_unref (drive->icon);
- g_strfreev (drive->volume_ids);
- if (drive->identifiers != NULL)
- g_hash_table_unref (drive->identifiers);
-
- if (G_OBJECT_CLASS (g_proxy_drive_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_proxy_drive_parent_class)->finalize) (object);
-}
-
-static void
-g_proxy_drive_class_init (GProxyDriveClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_proxy_drive_finalize;
-}
-
-static void
-g_proxy_drive_class_finalize (GProxyDriveClass *klass)
-{
-}
-
-static void
-g_proxy_drive_init (GProxyDrive *proxy_drive)
-{
-}
-
-GProxyDrive *
-g_proxy_drive_new (GProxyVolumeMonitor *volume_monitor)
-{
- GProxyDrive *drive;
- drive = g_object_new (G_TYPE_PROXY_DRIVE, NULL);
- drive->volume_monitor = g_object_ref (volume_monitor);
- return drive;
-}
-
-/* string id
- * string name
- * string gicon_data
- * boolean can-eject
- * boolean can-poll-for-media
- * boolean has-media
- * boolean is-media-removable
- * array:string volume-ids
- * dict:string->string identifiers
- */
-#define DRIVE_STRUCT_TYPE "(sssbbbasa{ss})"
-
-void
-g_proxy_drive_update (GProxyDrive *drive,
- DBusMessageIter *iter)
-{
- DBusMessageIter iter_struct;
- DBusMessageIter iter_volume_ids_iter;
- const char *id;
- const char *name;
- const char *gicon_data;
- dbus_bool_t can_eject;
- dbus_bool_t can_poll_for_media;
- dbus_bool_t has_media;
- dbus_bool_t is_media_removable;
- GPtrArray *volume_ids;
- GHashTable *identifiers;
-
- dbus_message_iter_recurse (iter, &iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &id);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &name);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &gicon_data);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &can_eject);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &can_poll_for_media);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &has_media);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &is_media_removable);
- dbus_message_iter_next (&iter_struct);
-
- volume_ids = g_ptr_array_new ();
- dbus_message_iter_recurse (&iter_struct, &iter_volume_ids_iter);
- while (dbus_message_iter_get_arg_type (&iter_volume_ids_iter) != DBUS_TYPE_INVALID)
- {
- const char *volume_id;
- dbus_message_iter_get_basic (&iter_volume_ids_iter, &volume_id);
- dbus_message_iter_next (&iter_volume_ids_iter);
- g_ptr_array_add (volume_ids, (gpointer) volume_id);
- }
- g_ptr_array_add (volume_ids, NULL);
- dbus_message_iter_next (&iter_struct);
-
- identifiers = _get_identifiers (&iter_struct);
- dbus_message_iter_next (&iter_struct);
-
- if (drive->id != NULL && strcmp (drive->id, id) != 0)
- {
- g_warning ("id mismatch during update of drive");
- goto out;
- }
-
- if (strlen (name) == 0)
- name = NULL;
-
- /* out with the old */
- g_free (drive->id);
- g_free (drive->name);
- if (drive->icon != NULL)
- g_object_unref (drive->icon);
- g_strfreev (drive->volume_ids);
- if (drive->identifiers != NULL)
- g_hash_table_unref (drive->identifiers);
-
- /* in with the new */
- drive->id = g_strdup (id);
- drive->name = g_strdup (name);
- drive->icon = _g_icon_new_from_serialized_data (gicon_data);
- drive->can_eject = can_eject;
- drive->can_poll_for_media = can_poll_for_media;
- drive->has_media = has_media;
- drive->is_media_removable = is_media_removable;
- drive->identifiers = identifiers != NULL ? g_hash_table_ref (identifiers) : NULL;
- drive->volume_ids = g_strdupv ((char **) volume_ids->pdata);
-
- out:
- g_ptr_array_free (volume_ids, TRUE);
- g_hash_table_unref (identifiers);
-}
-
-static GIcon *
-g_proxy_drive_get_icon (GDrive *drive)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- GIcon *icon;
-
- G_LOCK (proxy_drive);
- icon = proxy_drive->icon != NULL ? g_object_ref (proxy_drive->icon) : NULL;
- G_UNLOCK (proxy_drive);
-
- return icon;
-}
-
-static char *
-g_proxy_drive_get_name (GDrive *drive)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- char *name;
-
- G_LOCK (proxy_drive);
- name = g_strdup (proxy_drive->name);
- G_UNLOCK (proxy_drive);
-
- return name;
-}
-
-static GList *
-g_proxy_drive_get_volumes (GDrive *drive)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- GList *l;
-
- l = NULL;
-
- G_LOCK (proxy_drive);
- if (proxy_drive->volume_monitor != NULL && proxy_drive->volume_ids != NULL)
- {
- int n;
-
- for (n = 0; proxy_drive->volume_ids[n] != NULL; n++)
- {
- GProxyVolume *volume;
- volume = g_proxy_volume_monitor_get_volume_for_id (proxy_drive->volume_monitor, proxy_drive->volume_ids[n]);
- if (volume != NULL)
- l = g_list_append (l, volume);
- }
- }
- G_UNLOCK (proxy_drive);
-
- return l;
-}
-
-static gboolean
-g_proxy_drive_has_volumes (GDrive *drive)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- gboolean res;
-
- G_LOCK (proxy_drive);
- res = (proxy_drive->volume_ids != NULL && g_strv_length (proxy_drive->volume_ids) > 0);
- G_UNLOCK (proxy_drive);
-
- return res;
-}
-
-static gboolean
-g_proxy_drive_is_media_removable (GDrive *drive)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- gboolean res;
-
- G_LOCK (proxy_drive);
- res = proxy_drive->is_media_removable;
- G_UNLOCK (proxy_drive);
-
- return res;
-}
-
-static gboolean
-g_proxy_drive_has_media (GDrive *drive)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- gboolean res;
-
- G_LOCK (proxy_drive);
- res = proxy_drive->has_media;
- G_UNLOCK (proxy_drive);
-
- return res;
-}
-
-static gboolean
-g_proxy_drive_is_media_check_automatic (GDrive *drive)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- gboolean res;
-
- G_LOCK (proxy_drive);
- res = proxy_drive->is_media_check_automatic;
- G_UNLOCK (proxy_drive);
-
- return res;
-}
-
-static gboolean
-g_proxy_drive_can_eject (GDrive *drive)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- gboolean res;
-
- G_LOCK (proxy_drive);
- res = proxy_drive->can_eject;
- G_UNLOCK (proxy_drive);
-
- return res;
-}
-
-static gboolean
-g_proxy_drive_can_poll_for_media (GDrive *drive)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- gboolean res;
-
- G_LOCK (proxy_drive);
- res = proxy_drive->can_poll_for_media;
- G_UNLOCK (proxy_drive);
-
- return res;
-}
-
-static char *
-g_proxy_drive_get_identifier (GDrive *drive,
- const char *kind)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- char *res;
-
- G_LOCK (proxy_drive);
- if (proxy_drive->identifiers != NULL)
- res = g_strdup (g_hash_table_lookup (proxy_drive->identifiers, kind));
- else
- res = NULL;
- G_UNLOCK (proxy_drive);
-
- return res;
-}
-
-static void
-add_identifier_key (const char *key, const char *value, GPtrArray *res)
-{
- g_ptr_array_add (res, g_strdup (key));
-}
-
-static char **
-g_proxy_drive_enumerate_identifiers (GDrive *drive)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- GPtrArray *res;
-
- res = g_ptr_array_new ();
-
- G_LOCK (proxy_drive);
- if (proxy_drive->identifiers != NULL)
- g_hash_table_foreach (proxy_drive->identifiers, (GHFunc) add_identifier_key, res);
- G_UNLOCK (proxy_drive);
-
- /* Null-terminate */
- g_ptr_array_add (res, NULL);
-
- return (char **) g_ptr_array_free (res, FALSE);
-}
-
-const char *
-g_proxy_drive_get_id (GProxyDrive *drive)
-{
- return drive->id;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
- GCancellable *cancellable;
-} DBusOp;
-
-static void
-eject_cb (DBusMessage *reply,
- GError *error,
- DBusOp *data)
-{
- GSimpleAsyncResult *simple;
- if (error != NULL)
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- else
- simple = g_simple_async_result_new (data->object,
- data->callback,
- data->user_data,
- NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- g_object_unref (data->object);
- g_free (data);
-}
-
-static void
-g_proxy_drive_eject (GDrive *drive,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- DBusConnection *connection;
- const char *name;
- DBusMessage *message;
- DBusOp *data;
- dbus_uint32_t _flags = flags;
-
- G_LOCK (proxy_drive);
-
- data = g_new0 (DBusOp, 1);
- data->object = g_object_ref (drive);
- data->callback = callback;
- data->user_data = user_data;
- data->cancellable = cancellable;
-
- connection = g_proxy_volume_monitor_get_dbus_connection (proxy_drive->volume_monitor);
- name = g_proxy_volume_monitor_get_dbus_name (proxy_drive->volume_monitor);
-
- message = dbus_message_new_method_call (name,
- "/",
- "org.gtk.Private.RemoteVolumeMonitor",
- "DriveEject");
- dbus_message_append_args (message,
- DBUS_TYPE_STRING,
- &(proxy_drive->id),
- DBUS_TYPE_UINT32,
- &_flags,
- DBUS_TYPE_INVALID);
- G_UNLOCK (proxy_drive);
-
- _g_dbus_connection_call_async (connection,
- message,
- -1,
- (GAsyncDBusCallback) eject_cb,
- data);
- dbus_connection_unref (connection);
- dbus_message_unref (message);
-}
-
-static gboolean
-g_proxy_drive_eject_finish (GDrive *drive,
- GAsyncResult *result,
- GError **error)
-{
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
- return FALSE;
- return TRUE;
-}
-
-static void
-poll_for_media_cb (DBusMessage *reply,
- GError *error,
- DBusOp *data)
-{
- GSimpleAsyncResult *simple;
- if (error != NULL)
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- else
- simple = g_simple_async_result_new (data->object,
- data->callback,
- data->user_data,
- NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- g_object_unref (data->object);
- g_free (data);
-}
-
-static void
-g_proxy_drive_poll_for_media (GDrive *drive,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive);
- DBusConnection *connection;
- const char *name;
- DBusMessage *message;
- DBusOp *data;
-
- G_LOCK (proxy_drive);
-
- data = g_new0 (DBusOp, 1);
- data->object = g_object_ref (drive);
- data->callback = callback;
- data->user_data = user_data;
- data->cancellable = cancellable;
-
- connection = g_proxy_volume_monitor_get_dbus_connection (proxy_drive->volume_monitor);
- name = g_proxy_volume_monitor_get_dbus_name (proxy_drive->volume_monitor);
-
- message = dbus_message_new_method_call (name,
- "/",
- "org.gtk.Private.RemoteVolumeMonitor",
- "DrivePollForMedia");
- dbus_message_append_args (message,
- DBUS_TYPE_STRING,
- &(proxy_drive->id),
- DBUS_TYPE_INVALID);
- G_UNLOCK (proxy_drive);
-
- _g_dbus_connection_call_async (connection,
- message,
- -1,
- (GAsyncDBusCallback) poll_for_media_cb,
- data);
- dbus_connection_unref (connection);
- dbus_message_unref (message);
-}
-
-static gboolean
-g_proxy_drive_poll_for_media_finish (GDrive *drive,
- GAsyncResult *result,
- GError **error)
-{
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
- return FALSE;
- return TRUE;
-}
-
-
-static void
-g_proxy_drive_drive_iface_init (GDriveIface *iface)
-{
- iface->get_name = g_proxy_drive_get_name;
- iface->get_icon = g_proxy_drive_get_icon;
- iface->has_volumes = g_proxy_drive_has_volumes;
- iface->get_volumes = g_proxy_drive_get_volumes;
- iface->is_media_removable = g_proxy_drive_is_media_removable;
- iface->has_media = g_proxy_drive_has_media;
- iface->is_media_check_automatic = g_proxy_drive_is_media_check_automatic;
- iface->can_eject = g_proxy_drive_can_eject;
- iface->can_poll_for_media = g_proxy_drive_can_poll_for_media;
- iface->eject = g_proxy_drive_eject;
- iface->eject_finish = g_proxy_drive_eject_finish;
- iface->poll_for_media = g_proxy_drive_poll_for_media;
- iface->poll_for_media_finish = g_proxy_drive_poll_for_media_finish;
- iface->get_identifier = g_proxy_drive_get_identifier;
- iface->enumerate_identifiers = g_proxy_drive_enumerate_identifiers;
-}
-
-void
-g_proxy_drive_register (GIOModule *module)
-{
- g_proxy_drive_register_type (G_TYPE_MODULE (module));
-}
diff --git a/monitor/proxy/gproxydrive.h b/monitor/proxy/gproxydrive.h
deleted file mode 100644
index 7494286c..00000000
--- a/monitor/proxy/gproxydrive.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_PROXY_DRIVE_H__
-#define __G_PROXY_DRIVE_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include "gproxyvolumemonitor.h"
-
-G_BEGIN_DECLS
-
-#define G_TYPE_PROXY_DRIVE (g_proxy_drive_get_type ())
-#define G_PROXY_DRIVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY_DRIVE, GProxyDrive))
-#define G_PROXY_DRIVE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_PROXY_DRIVE, GProxyDriveClass))
-#define G_IS_PROXY_DRIVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY_DRIVE))
-#define G_IS_PROXY_DRIVE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_PROXY_DRIVE))
-
-typedef struct _GProxyDriveClass GProxyDriveClass;
-
-struct _GProxyDriveClass {
- GObjectClass parent_class;
-};
-
-GType g_proxy_drive_get_type (void) G_GNUC_CONST;
-void g_proxy_drive_register (GIOModule *module);
-GProxyDrive *g_proxy_drive_new (GProxyVolumeMonitor *volume_monitor);
-void g_proxy_drive_update (GProxyDrive *drive,
- DBusMessageIter *iter);
-const char *g_proxy_drive_get_id (GProxyDrive *drive);
-
-G_END_DECLS
-
-#endif /* __G_PROXY_DRIVE_H__ */
diff --git a/monitor/proxy/gproxymount.c b/monitor/proxy/gproxymount.c
deleted file mode 100644
index 123f5c43..00000000
--- a/monitor/proxy/gproxymount.c
+++ /dev/null
@@ -1,560 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-
-#include <gdbusutils.h>
-
-#include "gproxyvolumemonitor.h"
-#include "gproxymount.h"
-#include "gproxyvolume.h"
-
-/* Protects all fields of GProxyMount that can change */
-G_LOCK_DEFINE_STATIC(proxy_mount);
-
-struct _GProxyMount {
- GObject parent;
-
- GProxyVolumeMonitor *volume_monitor;
-
- char *id;
- char *name;
- char *uuid;
- char *volume_id;
- gboolean can_unmount;
- char **x_content_types;
- GFile *root;
- GIcon *icon;
-};
-
-static void g_proxy_mount_mount_iface_init (GMountIface *iface);
-
-#define _G_IMPLEMENT_INTERFACE_DYNAMIC(TYPE_IFACE, iface_init) { \
- const GInterfaceInfo g_implement_interface_info = { \
- (GInterfaceInitFunc) iface_init, NULL, NULL \
- }; \
- g_type_module_add_interface (type_module, g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \
-}
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (GProxyMount, g_proxy_mount, G_TYPE_OBJECT, 0,
- _G_IMPLEMENT_INTERFACE_DYNAMIC (G_TYPE_MOUNT,
- g_proxy_mount_mount_iface_init))
-
-static void
-g_proxy_mount_finalize (GObject *object)
-{
- GProxyMount *mount;
-
- mount = G_PROXY_MOUNT (object);
-
- g_free (mount->id);
- g_free (mount->name);
- g_free (mount->uuid);
- g_free (mount->volume_id);
- g_strfreev (mount->x_content_types);
- if (mount->icon != NULL)
- g_object_unref (mount->icon);
- if (mount->root != NULL)
- g_object_unref (mount->root);
-
- if (mount->volume_monitor != NULL)
- g_object_unref (mount->volume_monitor);
-
- if (G_OBJECT_CLASS (g_proxy_mount_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_proxy_mount_parent_class)->finalize) (object);
-}
-
-static void
-g_proxy_mount_class_init (GProxyMountClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_proxy_mount_finalize;
-}
-
-static void
-g_proxy_mount_class_finalize (GProxyMountClass *klass)
-{
-}
-
-static void
-g_proxy_mount_init (GProxyMount *proxy_mount)
-{
-}
-
-GProxyMount *
-g_proxy_mount_new (GProxyVolumeMonitor *volume_monitor)
-{
- GProxyMount *mount;
- mount = g_object_new (G_TYPE_PROXY_MOUNT, NULL);
- mount->volume_monitor = g_object_ref (volume_monitor);
- return mount;
-}
-
-gboolean
-g_proxy_mount_has_mount_path (GProxyMount *mount, const char *mount_path)
-{
- char *path;
- gboolean result;
- result = FALSE;
- path = g_file_get_path (mount->root);
- if (path != NULL)
- {
- if (strcmp (path, mount_path) == 0)
- result = TRUE;
- g_free (path);
- }
- return result;
-}
-
-/* string id
- * string name
- * string gicon_data
- * string uuid
- * string root_uri
- * boolean can-unmount
- * string volume-id
- * array:string x-content-types
- */
-
-void
-g_proxy_mount_update (GProxyMount *mount,
- DBusMessageIter *iter)
-{
- DBusMessageIter iter_struct;
- DBusMessageIter iter_x_content_types;
- const char *id;
- const char *name;
- const char *gicon_data;
- const char *uuid;
- const char *root_uri;
- dbus_bool_t can_unmount;
- const char *volume_id;
- GPtrArray *x_content_types;
-
- dbus_message_iter_recurse (iter, &iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &id);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &name);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &gicon_data);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &uuid);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &root_uri);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &can_unmount);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &volume_id);
- dbus_message_iter_next (&iter_struct);
-
- x_content_types = g_ptr_array_new ();
- dbus_message_iter_recurse (&iter_struct, &iter_x_content_types);
- while (dbus_message_iter_get_arg_type (&iter_x_content_types) != DBUS_TYPE_INVALID)
- {
- const char *x_content_type;
- dbus_message_iter_get_basic (&iter_x_content_types, &x_content_type);
- dbus_message_iter_next (&iter_x_content_types);
- g_ptr_array_add (x_content_types, (gpointer) x_content_type);
- }
- g_ptr_array_add (x_content_types, NULL);
- dbus_message_iter_next (&iter_struct);
-
- if (mount->id != NULL && strcmp (mount->id, id) != 0)
- {
- g_warning ("id mismatch during update of mount");
- goto out;
- }
-
- if (strlen (name) == 0)
- name = NULL;
- if (strlen (uuid) == 0)
- uuid = NULL;
-
- /* out with the old */
- g_free (mount->id);
- g_free (mount->name);
- g_free (mount->uuid);
- g_free (mount->volume_id);
- if (mount->icon != NULL)
- g_object_unref (mount->icon);
- g_strfreev (mount->x_content_types);
- if (mount->root != NULL)
- g_object_unref (mount->root);
-
- /* in with the new */
- mount->id = g_strdup (id);
- mount->name = g_strdup (name);
- mount->icon = _g_icon_new_from_serialized_data (gicon_data);
- mount->uuid = g_strdup (uuid);
- mount->root = g_file_new_for_uri (root_uri);
- mount->can_unmount = can_unmount;
- mount->volume_id = g_strdup (volume_id);
- mount->x_content_types = g_strdupv ((char **) x_content_types->pdata);
-
- out:
- g_ptr_array_free (x_content_types, TRUE);
-}
-
-const char *
-g_proxy_mount_get_id (GProxyMount *mount)
-{
- return mount->id;
-}
-
-static GFile *
-g_proxy_mount_get_root (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- GFile *root;
-
- G_LOCK (proxy_mount);
- root = proxy_mount->root != NULL ? g_object_ref (proxy_mount->root) : NULL;
- G_UNLOCK (proxy_mount);
- return root;
-}
-
-static GIcon *
-g_proxy_mount_get_icon (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- GIcon *icon;
-
- G_LOCK (proxy_mount);
- icon = proxy_mount->icon != NULL ? g_object_ref (proxy_mount->icon) : NULL;
- G_UNLOCK (proxy_mount);
- return icon;
-}
-
-static char *
-g_proxy_mount_get_uuid (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- char *uuid;
-
- G_LOCK (proxy_mount);
- uuid = g_strdup (proxy_mount->uuid);
- G_UNLOCK (proxy_mount);
- return uuid;
-}
-
-static char *
-g_proxy_mount_get_name (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- char *name;
-
- G_LOCK (proxy_mount);
- name = g_strdup (proxy_mount->name);
- G_UNLOCK (proxy_mount);
-
- return name;
-}
-
-static GDrive *
-g_proxy_mount_get_drive (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- GProxyVolume *volume;
- GDrive *drive;
-
- G_LOCK (proxy_mount);
- volume = NULL;
- if (proxy_mount->volume_id != NULL && strlen (proxy_mount->volume_id) > 0)
- volume = g_proxy_volume_monitor_get_volume_for_id (proxy_mount->volume_monitor,
- proxy_mount->volume_id);
- G_UNLOCK (proxy_mount);
-
- drive = NULL;
- if (volume != NULL)
- {
- drive = g_volume_get_drive (G_VOLUME (volume));
- g_object_unref (volume);
- }
-
- return drive;
-}
-
-static GVolume *
-g_proxy_mount_get_volume (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- GProxyVolume *volume;
-
- G_LOCK (proxy_mount);
- volume = NULL;
- if (proxy_mount->volume_id != NULL && strlen (proxy_mount->volume_id) > 0)
- volume = g_proxy_volume_monitor_get_volume_for_id (proxy_mount->volume_monitor,
- proxy_mount->volume_id);
- G_UNLOCK (proxy_mount);
-
- return volume != NULL ? G_VOLUME (volume) : NULL;
-}
-
-static gboolean
-g_proxy_mount_can_unmount (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- gboolean res;
-
- G_LOCK (proxy_mount);
- res = proxy_mount->can_unmount;
- G_UNLOCK (proxy_mount);
-
- return res;
-}
-
-static gboolean
-g_proxy_mount_can_eject (GMount *mount)
-{
- GDrive *drive;
- gboolean can_eject;
-
- can_eject = FALSE;
- drive = g_proxy_mount_get_drive (mount);
- if (drive != NULL)
- {
- can_eject = g_drive_can_eject (drive);
- g_object_unref (drive);
- }
-
- return can_eject;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} EjectWrapperOp;
-
-static void
-eject_wrapper_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- EjectWrapperOp *data = user_data;
- data->callback (data->object, res, data->user_data);
- g_object_unref (data->object);
- g_free (data);
-}
-
-static void
-g_proxy_mount_eject (GMount *mount,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GDrive *drive;
-
- drive = g_proxy_mount_get_drive (mount);
-
- if (drive != NULL)
- {
- EjectWrapperOp *data;
- data = g_new0 (EjectWrapperOp, 1);
- data->object = g_object_ref (mount);
- data->callback = callback;
- data->user_data = user_data;
- g_drive_eject (drive, flags, cancellable, eject_wrapper_callback, data);
- g_object_unref (drive);
- }
-}
-
-static gboolean
-g_proxy_mount_eject_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- GDrive *drive;
- gboolean res;
-
- res = TRUE;
-
- drive = g_proxy_mount_get_drive (mount);
-
- if (drive != NULL)
- {
- res = g_drive_eject_finish (drive, result, error);
- g_object_unref (drive);
- }
- return res;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
- GCancellable *cancellable;
-} DBusOp;
-
-static void
-unmount_cb (DBusMessage *reply,
- GError *error,
- DBusOp *data)
-{
- GSimpleAsyncResult *simple;
- if (error != NULL)
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- else
- simple = g_simple_async_result_new (data->object,
- data->callback,
- data->user_data,
- NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- g_object_unref (data->object);
- g_free (data);
-}
-
-static void
-g_proxy_mount_unmount (GMount *mount,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- DBusConnection *connection;
- const char *name;
- DBusMessage *message;
- DBusOp *data;
- dbus_uint32_t _flags = flags;
-
- G_LOCK (proxy_mount);
-
- data = g_new0 (DBusOp, 1);
- data->object = g_object_ref (mount);
- data->callback = callback;
- data->user_data = user_data;
- data->cancellable = cancellable;
-
- connection = g_proxy_volume_monitor_get_dbus_connection (proxy_mount->volume_monitor);
- name = g_proxy_volume_monitor_get_dbus_name (proxy_mount->volume_monitor);
-
- message = dbus_message_new_method_call (name,
- "/",
- "org.gtk.Private.RemoteVolumeMonitor",
- "MountUnmount");
- dbus_message_append_args (message,
- DBUS_TYPE_STRING,
- &(proxy_mount->id),
- DBUS_TYPE_UINT32,
- &_flags,
- DBUS_TYPE_INVALID);
- G_UNLOCK (proxy_mount);
-
- _g_dbus_connection_call_async (connection,
- message,
- -1,
- (GAsyncDBusCallback) unmount_cb,
- data);
-
- dbus_message_unref (message);
- dbus_connection_unref (connection);
-}
-
-static gboolean
-g_proxy_mount_unmount_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
- return FALSE;
- return TRUE;
-}
-
-static void
-g_proxy_mount_guess_content_type (GMount *mount,
- gboolean force_rescan,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *simple;
-
- /* TODO: handle force_rescan */
- simple = g_simple_async_result_new (G_OBJECT (mount),
- callback,
- user_data,
- NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-}
-
-static char **
-g_proxy_mount_guess_content_type_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- return g_strdupv (proxy_mount->x_content_types);
-}
-
-static char **
-g_proxy_mount_guess_content_type_sync (GMount *mount,
- gboolean force_rescan,
- GCancellable *cancellable,
- GError **error)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- /* TODO: handle force_rescan */
- return g_strdupv (proxy_mount->x_content_types);
-}
-
-static void
-g_proxy_mount_mount_iface_init (GMountIface *iface)
-{
- iface->get_root = g_proxy_mount_get_root;
- iface->get_name = g_proxy_mount_get_name;
- iface->get_icon = g_proxy_mount_get_icon;
- iface->get_uuid = g_proxy_mount_get_uuid;
- iface->get_drive = g_proxy_mount_get_drive;
- iface->get_volume = g_proxy_mount_get_volume;
- iface->can_unmount = g_proxy_mount_can_unmount;
- iface->can_eject = g_proxy_mount_can_eject;
- iface->unmount = g_proxy_mount_unmount;
- iface->unmount_finish = g_proxy_mount_unmount_finish;
- iface->eject = g_proxy_mount_eject;
- iface->eject_finish = g_proxy_mount_eject_finish;
- iface->guess_content_type = g_proxy_mount_guess_content_type;
- iface->guess_content_type_finish = g_proxy_mount_guess_content_type_finish;
- iface->guess_content_type_sync = g_proxy_mount_guess_content_type_sync;
-}
-
-void
-g_proxy_mount_register (GIOModule *module)
-{
- g_proxy_mount_register_type (G_TYPE_MODULE (module));
-}
diff --git a/monitor/proxy/gproxymount.h b/monitor/proxy/gproxymount.h
deleted file mode 100644
index c6356518..00000000
--- a/monitor/proxy/gproxymount.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_PROXY_MOUNT_H__
-#define __G_PROXY_MOUNT_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include "gproxyvolumemonitor.h"
-
-G_BEGIN_DECLS
-
-#define G_TYPE_PROXY_MOUNT (g_proxy_mount_get_type ())
-#define G_PROXY_MOUNT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY_MOUNT, GProxyMount))
-#define G_PROXY_MOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_PROXY_MOUNT, GProxyMountClass))
-#define G_IS_PROXY_MOUNT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY_MOUNT))
-#define G_IS_PROXY_MOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_PROXY_MOUNT))
-
-typedef struct _GProxyMountClass GProxyMountClass;
-
-struct _GProxyMountClass {
- GObjectClass parent_class;
-};
-
-GType g_proxy_mount_get_type (void) G_GNUC_CONST;
-void g_proxy_mount_register (GIOModule *module);
-GProxyMount *g_proxy_mount_new (GProxyVolumeMonitor *volume_monitor);
-void g_proxy_mount_update (GProxyMount *mount,
- DBusMessageIter *iter);
-const char *g_proxy_mount_get_id (GProxyMount *mount);
-gboolean g_proxy_mount_has_mount_path (GProxyMount *mount, const char *mount_path);
-
-G_END_DECLS
-
-#endif /* __G_PROXY_MOUNT_H__ */
diff --git a/monitor/proxy/gproxyvolume.c b/monitor/proxy/gproxyvolume.c
deleted file mode 100644
index 23730b2f..00000000
--- a/monitor/proxy/gproxyvolume.c
+++ /dev/null
@@ -1,689 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-
-#include <gdbusutils.h>
-
-#include "gproxydrive.h"
-#include "gproxyvolume.h"
-#include "gproxymount.h"
-
-/* Protects all fields of GProxyVolume that can change */
-G_LOCK_DEFINE_STATIC(proxy_volume);
-
-struct _GProxyVolume {
- GObject parent;
-
- GProxyVolumeMonitor *volume_monitor;
-
- char *id;
- char *name;
- char *uuid;
- char *activation_uri;
- GIcon *icon;
- char *drive_id;
- char *mount_id;
- GHashTable *identifiers;
-
- GMount *foreign_mount;
-
- gboolean can_mount;
- gboolean should_automount;
-};
-
-static void g_proxy_volume_volume_iface_init (GVolumeIface *iface);
-
-#define _G_IMPLEMENT_INTERFACE_DYNAMIC(TYPE_IFACE, iface_init) { \
- const GInterfaceInfo g_implement_interface_info = { \
- (GInterfaceInitFunc) iface_init, NULL, NULL \
- }; \
- g_type_module_add_interface (type_module, g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \
-}
-
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (GProxyVolume, g_proxy_volume, G_TYPE_OBJECT, 0,
- _G_IMPLEMENT_INTERFACE_DYNAMIC (G_TYPE_VOLUME,
- g_proxy_volume_volume_iface_init))
-
-static void
-g_proxy_volume_finalize (GObject *object)
-{
- GProxyVolume *volume;
-
- volume = G_PROXY_VOLUME (object);
-
- g_free (volume->id);
- g_free (volume->name);
- g_free (volume->uuid);
- g_free (volume->activation_uri);
- if (volume->icon != NULL)
- g_object_unref (volume->icon);
- g_free (volume->drive_id);
- g_free (volume->mount_id);
- if (volume->identifiers != NULL)
- g_hash_table_unref (volume->identifiers);
-
- if (volume->foreign_mount != NULL)
- g_object_unref (volume->foreign_mount);
-
- if (volume->volume_monitor != NULL)
- g_object_unref (volume->volume_monitor);
-
- if (G_OBJECT_CLASS (g_proxy_volume_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_proxy_volume_parent_class)->finalize) (object);
-}
-
-static void
-g_proxy_volume_class_init (GProxyVolumeClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_proxy_volume_finalize;
-}
-
-static void
-g_proxy_volume_class_finalize (GProxyVolumeClass *klass)
-{
-}
-
-static void
-g_proxy_volume_init (GProxyVolume *proxy_volume)
-{
-}
-
-GProxyVolume *
-g_proxy_volume_new (GProxyVolumeMonitor *volume_monitor)
-{
- GProxyVolume *volume;
- volume = g_object_new (G_TYPE_PROXY_VOLUME, NULL);
- volume->volume_monitor = g_object_ref (volume_monitor);
- return volume;
-}
-
-static gboolean
-changed_in_idle (gpointer data)
-{
- GProxyVolume *volume = data;
-
- g_signal_emit_by_name (volume, "changed");
- if (volume->volume_monitor != NULL)
- g_signal_emit_by_name (volume->volume_monitor, "volume-changed", volume);
- g_object_unref (volume);
-
- return FALSE;
-}
-
-static void
-foreign_mount_unmounted (GMount *mount, gpointer user_data)
-{
- GProxyVolume *volume = G_PROXY_VOLUME (user_data);
- gboolean check;
-
- G_LOCK (proxy_volume);
- check = (volume->foreign_mount == mount);
- G_UNLOCK (proxy_volume);
- if (check)
- g_proxy_volume_adopt_foreign_mount (volume, NULL);
-}
-
-void
-g_proxy_volume_adopt_foreign_mount (GProxyVolume *volume,
- GMount *foreign_mount)
-{
- G_LOCK (proxy_volume);
- if (volume->foreign_mount != NULL)
- g_object_unref (volume->foreign_mount);
-
- if (foreign_mount != NULL)
- {
- volume->foreign_mount = g_object_ref (foreign_mount);
- g_signal_connect_object (foreign_mount, "unmounted", (GCallback) foreign_mount_unmounted, volume, 0);
- }
- else
- volume->foreign_mount = NULL;
-
- g_idle_add (changed_in_idle, g_object_ref (volume));
- G_UNLOCK (proxy_volume);
-}
-
-/* string id
- * string name
- * string gicon_data
- * string uuid
- * string activation_uri
- * boolean can-mount
- * boolean should-automount
- * string drive-id
- * string mount-id
- * dict:string->string identifiers
- */
-
-void g_proxy_volume_update (GProxyVolume *volume,
- DBusMessageIter *iter)
-{
- DBusMessageIter iter_struct;
- const char *id;
- const char *name;
- const char *gicon_data;
- const char *uuid;
- const char *activation_uri;
- const char *drive_id;
- const char *mount_id;
- dbus_bool_t can_mount;
- dbus_bool_t should_automount;
- GHashTable *identifiers;
-
- dbus_message_iter_recurse (iter, &iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &id);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &name);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &gicon_data);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &uuid);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &activation_uri);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &can_mount);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &should_automount);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &drive_id);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &mount_id);
- dbus_message_iter_next (&iter_struct);
-
- identifiers = _get_identifiers (&iter_struct);
- dbus_message_iter_next (&iter_struct);
-
- if (volume->id != NULL && strcmp (volume->id, id) != 0)
- {
- g_warning ("id mismatch during update of volume");
- goto out;
- }
-
- if (strlen (name) == 0)
- name = NULL;
- if (strlen (uuid) == 0)
- uuid = NULL;
- if (strlen (activation_uri) == 0)
- activation_uri = NULL;
-
- /* out with the old */
- g_free (volume->id);
- g_free (volume->name);
- g_free (volume->uuid);
- g_free (volume->activation_uri);
- if (volume->icon != NULL)
- g_object_unref (volume->icon);
- g_free (volume->drive_id);
- g_free (volume->mount_id);
- if (volume->identifiers != NULL)
- g_hash_table_unref (volume->identifiers);
-
- /* in with the new */
- volume->id = g_strdup (id);
- volume->name = g_strdup (name);
- volume->uuid = g_strdup (uuid);
- volume->activation_uri = g_strdup (activation_uri);
- volume->icon = _g_icon_new_from_serialized_data (gicon_data);
- volume->drive_id = g_strdup (drive_id);
- volume->mount_id = g_strdup (mount_id);
- volume->can_mount = can_mount;
- volume->should_automount = should_automount;
- volume->identifiers = identifiers != NULL ? g_hash_table_ref (identifiers) : NULL;
-
- out:
- g_hash_table_unref (identifiers);
-}
-
-const char *
-g_proxy_volume_get_id (GProxyVolume *volume)
-{
- return volume->id;
-}
-
-static GIcon *
-g_proxy_volume_get_icon (GVolume *volume)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- GIcon *icon;
-
- G_LOCK (proxy_volume);
- icon = proxy_volume->icon != NULL ? g_object_ref (proxy_volume->icon) : NULL;
- G_UNLOCK (proxy_volume);
- return icon;
-}
-
-static char *
-g_proxy_volume_get_name (GVolume *volume)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- char *name;
-
- G_LOCK (proxy_volume);
- name = g_strdup (proxy_volume->name);
- G_UNLOCK (proxy_volume);
- return name;
-}
-
-static char *
-g_proxy_volume_get_uuid (GVolume *volume)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- char *uuid;
-
- G_LOCK (proxy_volume);
- uuid = g_strdup (proxy_volume->uuid);
- G_UNLOCK (proxy_volume);
- return uuid;
-}
-
-static gboolean
-g_proxy_volume_can_mount (GVolume *volume)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- gboolean res;
-
- G_LOCK (proxy_volume);
- res = proxy_volume->can_mount;
- G_UNLOCK (proxy_volume);
- return res;
-}
-
-static gboolean
-g_proxy_volume_can_eject (GVolume *volume)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- GProxyDrive *drive;
- gboolean res;
-
- G_LOCK (proxy_volume);
- res = FALSE;
- if (proxy_volume->drive_id != NULL && strlen (proxy_volume->drive_id) > 0)
- {
- drive = g_proxy_volume_monitor_get_drive_for_id (proxy_volume->volume_monitor,
- proxy_volume->drive_id);
- if (drive != NULL)
- {
- res = g_drive_can_eject (G_DRIVE (drive));
- g_object_unref (drive);
- }
- }
- G_UNLOCK (proxy_volume);
-
- return res;
-}
-
-static gboolean
-g_proxy_volume_should_automount (GVolume *volume)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- gboolean res;
-
- G_LOCK (proxy_volume);
- res = proxy_volume->should_automount;
- G_UNLOCK (proxy_volume);
-
- return res;
-}
-
-static GDrive *
-g_proxy_volume_get_drive (GVolume *volume)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- GProxyDrive *drive;
-
- G_LOCK (proxy_volume);
- drive = NULL;
- if (proxy_volume->drive_id != NULL && strlen (proxy_volume->drive_id) > 0)
- drive = g_proxy_volume_monitor_get_drive_for_id (proxy_volume->volume_monitor,
- proxy_volume->drive_id);
- G_UNLOCK (proxy_volume);
-
- return drive != NULL ? G_DRIVE (drive) : NULL;
-}
-
-static GMount *
-g_proxy_volume_get_mount (GVolume *volume)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- GMount *mount;
-
- G_LOCK (proxy_volume);
- if (proxy_volume->foreign_mount != NULL)
- {
- mount = g_object_ref (proxy_volume->foreign_mount);
- }
- else
- {
- mount = NULL;
- if (proxy_volume->mount_id != NULL && strlen (proxy_volume->mount_id) > 0)
- {
- GProxyMount *proxy_mount;
- proxy_mount = g_proxy_volume_monitor_get_mount_for_id (proxy_volume->volume_monitor,
- proxy_volume->mount_id);
- if (proxy_mount != NULL)
- mount = G_MOUNT (proxy_mount);
- }
- }
- G_UNLOCK (proxy_volume);
-
- return mount;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} EjectWrapperOp;
-
-static void
-eject_wrapper_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- EjectWrapperOp *data = user_data;
- data->callback (data->object, res, data->user_data);
- g_object_unref (data->object);
- g_free (data);
-}
-
-static void
-g_proxy_volume_eject (GVolume *volume,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- GProxyDrive *drive;
-
- drive = NULL;
- G_LOCK (proxy_volume);
- if (proxy_volume->drive_id != NULL && strlen (proxy_volume->drive_id) > 0)
- {
- drive = g_proxy_volume_monitor_get_drive_for_id (proxy_volume->volume_monitor,
- proxy_volume->drive_id);
- }
- G_UNLOCK (proxy_volume);
-
- if (drive != NULL)
- {
- EjectWrapperOp *data;
- data = g_new0 (EjectWrapperOp, 1);
- data->object = g_object_ref (volume);
- data->callback = callback;
- data->user_data = user_data;
- g_drive_eject (G_DRIVE (drive), flags, cancellable, eject_wrapper_callback, data);
- g_object_unref (drive);
- }
-}
-
-static gboolean
-g_proxy_volume_eject_finish (GVolume *volume,
- GAsyncResult *result,
- GError **error)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- GProxyDrive *drive;
- gboolean res;
-
- G_LOCK (proxy_volume);
- res = TRUE;
- drive = NULL;
- if (proxy_volume->drive_id != NULL && strlen (proxy_volume->drive_id) > 0)
- drive = g_proxy_volume_monitor_get_drive_for_id (proxy_volume->volume_monitor,
- proxy_volume->drive_id);
- G_UNLOCK (proxy_volume);
-
- if (drive != NULL)
- {
- res = g_drive_eject_finish (G_DRIVE (drive), result, error);
- g_object_unref (drive);
- }
-
- return res;
-}
-
-static char *
-g_proxy_volume_get_identifier (GVolume *volume,
- const char *kind)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- char *res;
-
- G_LOCK (proxy_volume);
- if (proxy_volume->identifiers != NULL)
- res = g_strdup (g_hash_table_lookup (proxy_volume->identifiers, kind));
- else
- res = NULL;
- G_UNLOCK (proxy_volume);
-
- return res;
-}
-
-static void
-add_identifier_key (const char *key, const char *value, GPtrArray *res)
-{
- g_ptr_array_add (res, g_strdup (key));
-}
-
-static char **
-g_proxy_volume_enumerate_identifiers (GVolume *volume)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- GPtrArray *res;
-
- res = g_ptr_array_new ();
-
- G_LOCK (proxy_volume);
- if (proxy_volume->identifiers != NULL)
- g_hash_table_foreach (proxy_volume->identifiers, (GHFunc) add_identifier_key, res);
- G_UNLOCK (proxy_volume);
-
- /* Null-terminate */
- g_ptr_array_add (res, NULL);
-
- return (char **) g_ptr_array_free (res, FALSE);
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
- GCancellable *cancellable;
-} DBusOp;
-
-static void
-mount_cb (DBusMessage *reply,
- GError *error,
- DBusOp *data)
-{
- GSimpleAsyncResult *simple;
- if (error != NULL)
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- else
- simple = g_simple_async_result_new (data->object,
- data->callback,
- data->user_data,
- NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- g_object_unref (data->object);
- g_free (data);
-}
-
-typedef struct
-{
- GProxyVolume *enclosing_volume;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} ForeignMountOp;
-
-static void
-mount_foreign_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- ForeignMountOp *data = user_data;
- data->callback (G_OBJECT (data->enclosing_volume), res, data->user_data);
- g_object_unref (data->enclosing_volume);
- g_free (data);
-}
-
-static void
-g_proxy_volume_mount (GVolume *volume,
- GMountMountFlags flags,
- GMountOperation *mount_operation,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
-
- G_LOCK (proxy_volume);
- if (proxy_volume->activation_uri != NULL)
- {
- ForeignMountOp *data;
- GFile *root;
-
- data = g_new0 (ForeignMountOp, 1);
- data->enclosing_volume = g_object_ref (volume);
- data->callback = callback;
- data->user_data = user_data;
-
- root = g_file_new_for_uri (proxy_volume->activation_uri);
-
- G_UNLOCK (proxy_volume);
-
- g_file_mount_enclosing_volume (root,
- flags,
- mount_operation,
- cancellable,
- mount_foreign_callback,
- data);
-
- g_object_unref (root);
- }
- else
- {
- DBusOp *data;
- DBusConnection *connection;
- const char *name;
- DBusMessage *message;
- dbus_uint32_t _flags = flags;
- dbus_bool_t use_mount_operation = mount_operation != NULL;
-
- /* TODO: support mount_operation */
-
- data = g_new0 (DBusOp, 1);
- data->object = g_object_ref (volume);
- data->callback = callback;
- data->user_data = user_data;
- data->cancellable = cancellable;
-
- connection = g_proxy_volume_monitor_get_dbus_connection (proxy_volume->volume_monitor);
- name = g_proxy_volume_monitor_get_dbus_name (proxy_volume->volume_monitor);
-
- message = dbus_message_new_method_call (name,
- "/",
- "org.gtk.Private.RemoteVolumeMonitor",
- "VolumeMount");
- dbus_message_append_args (message,
- DBUS_TYPE_STRING,
- &(proxy_volume->id),
- DBUS_TYPE_UINT32,
- &_flags,
- DBUS_TYPE_BOOLEAN,
- &use_mount_operation,
- DBUS_TYPE_INVALID);
- G_UNLOCK (proxy_volume);
-
- _g_dbus_connection_call_async (connection,
- message,
- -1,
- (GAsyncDBusCallback) mount_cb,
- data);
- dbus_message_unref (message);
- dbus_connection_unref (connection);
- }
-}
-
-static gboolean
-g_proxy_volume_mount_finish (GVolume *volume,
- GAsyncResult *result,
- GError **error)
-{
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
- return FALSE;
- return TRUE;
-}
-
-static GFile *
-g_proxy_volume_get_activation_root (GVolume *volume)
-{
- GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
- if (proxy_volume->activation_uri == NULL)
- return NULL;
- else
- return g_file_new_for_uri (proxy_volume->activation_uri);
-}
-
-static void
-g_proxy_volume_volume_iface_init (GVolumeIface *iface)
-{
- iface->get_name = g_proxy_volume_get_name;
- iface->get_icon = g_proxy_volume_get_icon;
- iface->get_uuid = g_proxy_volume_get_uuid;
- iface->get_drive = g_proxy_volume_get_drive;
- iface->get_mount = g_proxy_volume_get_mount;
- iface->can_mount = g_proxy_volume_can_mount;
- iface->can_eject = g_proxy_volume_can_eject;
- iface->should_automount = g_proxy_volume_should_automount;
- iface->mount_fn = g_proxy_volume_mount;
- iface->mount_finish = g_proxy_volume_mount_finish;
- iface->eject = g_proxy_volume_eject;
- iface->eject_finish = g_proxy_volume_eject_finish;
- iface->get_identifier = g_proxy_volume_get_identifier;
- iface->enumerate_identifiers = g_proxy_volume_enumerate_identifiers;
- iface->get_activation_root = g_proxy_volume_get_activation_root;
-}
-
-void
-g_proxy_volume_register (GIOModule *module)
-{
- g_proxy_volume_register_type (G_TYPE_MODULE (module));
-}
diff --git a/monitor/proxy/gproxyvolume.h b/monitor/proxy/gproxyvolume.h
deleted file mode 100644
index 5626092f..00000000
--- a/monitor/proxy/gproxyvolume.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_PROXY_VOLUME_H__
-#define __G_PROXY_VOLUME_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include "gproxyvolumemonitor.h"
-
-G_BEGIN_DECLS
-
-#define G_TYPE_PROXY_VOLUME (g_proxy_volume_get_type ())
-#define G_PROXY_VOLUME(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY_VOLUME, GProxyVolume))
-#define G_PROXY_VOLUME_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_PROXY_VOLUME, GProxyVolumeClass))
-#define G_IS_PROXY_VOLUME(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY_VOLUME))
-#define G_IS_PROXY_VOLUME_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_PROXY_VOLUME))
-
-typedef struct _GProxyVolumeClass GProxyVolumeClass;
-
-struct _GProxyVolumeClass {
- GObjectClass parent_class;
-};
-
-GType g_proxy_volume_get_type (void) G_GNUC_CONST;
-GProxyVolume *g_proxy_volume_new (GProxyVolumeMonitor *volume_monitor);
-void g_proxy_volume_update (GProxyVolume *volume,
- DBusMessageIter *iter);
-const char *g_proxy_volume_get_id (GProxyVolume *volume);
-void g_proxy_volume_adopt_foreign_mount (GProxyVolume *volume,
- GMount *foreign_mount);
-void g_proxy_volume_register (GIOModule *module);
-
-
-G_END_DECLS
-
-#endif /* __G_PROXY_VOLUME_H__ */
diff --git a/monitor/proxy/gproxyvolumemonitor.c b/monitor/proxy/gproxyvolumemonitor.c
deleted file mode 100644
index 06523714..00000000
--- a/monitor/proxy/gproxyvolumemonitor.c
+++ /dev/null
@@ -1,1278 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-/*
- * TODO: since we already call IsSupported() at module load time (in
- * order to register the appropriate types) we really just should
- * construct all the volume monitors. This is a good idea because
- *
- * - instead of calling IsSupported() we just call List()
- * - e.g. exactly the same IPC overhead
- * - neglible memory + cpu overhead
- * - will need to construct them at some point
- * - we can actually implement get_mount_for_mount_path()
- * correctly even when no volume monitor is constructed
- *
- * - implement support for GMountOperation
- * - not implemented in the HAL volume monitor and that's all
- * that is using it right now. Will implement at some point
- * when it's needed or someone has spare cycles.
- */
-
-#include <config.h>
-
-#include <limits.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-#include <gdbusutils.h>
-
-#include "gproxyvolumemonitor.h"
-#include "gproxymount.h"
-#include "gproxyvolume.h"
-#include "gproxydrive.h"
-
-G_LOCK_DEFINE_STATIC(proxy_vm);
-
-static DBusConnection *the_session_bus = NULL;
-static GHashTable *the_volume_monitors = NULL;
-
-struct _GProxyVolumeMonitor {
- GNativeVolumeMonitor parent;
- DBusConnection *session_bus;
-
- GHashTable *drives;
- GHashTable *volumes;
- GHashTable *mounts;
-};
-
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (GProxyVolumeMonitor,
- g_proxy_volume_monitor,
- G_TYPE_NATIVE_VOLUME_MONITOR,
- G_TYPE_FLAG_ABSTRACT,
- {})
-
-static void seed_monitor (GProxyVolumeMonitor *monitor);
-
-static DBusHandlerResult filter_function (DBusConnection *connection, DBusMessage *message, void *user_data);
-
-static void signal_emit_in_idle (gpointer object, const char *signal_name, gpointer other_object);
-
-static char *
-get_match_rule (GProxyVolumeMonitor *monitor)
-{
- return g_strdup_printf ("type='signal',"
- "interface='org.gtk.Private.RemoteVolumeMonitor',"
- "sender='%s'",
- g_proxy_volume_monitor_get_dbus_name (monitor));
-}
-
-static void
-g_proxy_volume_monitor_finalize (GObject *object)
-{
- GProxyVolumeMonitor *monitor;
- DBusError dbus_error;
- char *match_rule;
- GObjectClass *parent_class;
-
- /* since GProxyVolumeMonitor is a non-instantiatable type we're dealing with a
- * sub-type here. So we need to look at the grandparent sub-type to get the
- * parent class for GProxyVolumeMonitor */
- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (
- g_type_class_peek_parent (G_OBJECT_GET_CLASS (object))));
-
- monitor = G_PROXY_VOLUME_MONITOR (object);
-
- g_hash_table_unref (monitor->drives);
- g_hash_table_unref (monitor->volumes);
- g_hash_table_unref (monitor->mounts);
-
- dbus_connection_remove_filter (monitor->session_bus, filter_function, monitor);
- match_rule = get_match_rule (monitor);
- dbus_error_init (&dbus_error);
- dbus_bus_remove_match (monitor->session_bus,
- match_rule,
- &dbus_error);
- if (dbus_error_is_set (&dbus_error)) {
- /* not really a whole lot to do on failure than whine since
- * GObject finalization can't fail...
- */
- g_warning ("cannot remove match rule '%s': %s: %s", match_rule, dbus_error.name, dbus_error.message);
- dbus_error_free (&dbus_error);
- }
- g_free (match_rule);
- dbus_connection_unref (monitor->session_bus);
-
- if (parent_class->finalize)
- parent_class->finalize (object);
-}
-
-static GList *
-get_mounts (GVolumeMonitor *volume_monitor)
-{
- GProxyVolumeMonitor *monitor;
- GList *l;
- GHashTableIter hash_iter;
- GProxyMount *mount;
-
- monitor = G_PROXY_VOLUME_MONITOR (volume_monitor);
- l = NULL;
-
- G_LOCK (proxy_vm);
-
- g_hash_table_iter_init (&hash_iter, monitor->mounts);
- while (g_hash_table_iter_next (&hash_iter, NULL, (gpointer) &mount))
- l = g_list_append (l, g_object_ref (mount));
-
- G_UNLOCK (proxy_vm);
-
- return l;
-}
-
-static GList *
-get_volumes (GVolumeMonitor *volume_monitor)
-{
- GProxyVolumeMonitor *monitor;
- GList *l;
- GHashTableIter hash_iter;
- GProxyVolume *volume;
-
- monitor = G_PROXY_VOLUME_MONITOR (volume_monitor);
- l = NULL;
-
- G_LOCK (proxy_vm);
-
- g_hash_table_iter_init (&hash_iter, monitor->volumes);
- while (g_hash_table_iter_next (&hash_iter, NULL, (gpointer) &volume))
- l = g_list_append (l, g_object_ref (volume));
-
- G_UNLOCK (proxy_vm);
-
- return l;
-}
-
-static GList *
-get_connected_drives (GVolumeMonitor *volume_monitor)
-{
- GProxyVolumeMonitor *monitor;
- GList *l;
- GHashTableIter hash_iter;
- GProxyDrive *drive;
-
- monitor = G_PROXY_VOLUME_MONITOR (volume_monitor);
- l = NULL;
-
- G_LOCK (proxy_vm);
-
- g_hash_table_iter_init (&hash_iter, monitor->drives);
- while (g_hash_table_iter_next (&hash_iter, NULL, (gpointer) &drive))
- l = g_list_append (l, g_object_ref (drive));
-
- G_UNLOCK (proxy_vm);
-
- return l;
-}
-
-static GVolume *
-get_volume_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
-{
- GProxyVolumeMonitor *monitor;
- GHashTableIter hash_iter;
- GVolume *found_volume;
- GVolume *volume;
-
- monitor = G_PROXY_VOLUME_MONITOR (volume_monitor);
-
- G_LOCK (proxy_vm);
-
- found_volume = NULL;
- g_hash_table_iter_init (&hash_iter, monitor->volumes);
- while (g_hash_table_iter_next (&hash_iter, NULL, (gpointer) &volume) &&
- found_volume != NULL)
- {
- char *_uuid;
- _uuid = g_volume_get_uuid (volume);
- if (_uuid != NULL)
- {
- if (strcmp (uuid, _uuid) == 0)
- found_volume = g_object_ref (volume);
- g_free (_uuid);
- }
- }
-
- G_UNLOCK (proxy_vm);
-
- return found_volume;
-}
-
-static GMount *
-get_mount_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
-{
- GProxyVolumeMonitor *monitor;
- GHashTableIter hash_iter;
- GMount *found_mount;
- GMount *mount;
-
- monitor = G_PROXY_VOLUME_MONITOR (volume_monitor);
-
- G_LOCK (proxy_vm);
-
- found_mount = NULL;
- g_hash_table_iter_init (&hash_iter, monitor->mounts);
- while (g_hash_table_iter_next (&hash_iter, NULL, (gpointer) &mount) &&
- found_mount != NULL)
- {
- char *_uuid;
- _uuid = g_mount_get_uuid (mount);
- if (_uuid != NULL)
- {
- if (strcmp (uuid, _uuid) == 0)
- found_mount = g_object_ref (mount);
- g_free (_uuid);
- }
- }
-
- G_UNLOCK (proxy_vm);
-
- return found_mount;
-}
-
-static GMount *
-get_mount_for_mount_path (const char *mount_path,
- GCancellable *cancellable)
-{
- GMount *mount;
- GProxyVolumeMonitor *volume_monitor;
- GProxyVolumeMonitorClass *klass;
- GHashTableIter vm_hash_iter;
- GHashTableIter vol_hash_iter;
- GProxyMount *candidate_mount;
-
- /* This static method on GNativeVolumeMonitor is a *complete* pain
- * in the ass to deal with; we need to rework gio so it's deprecated
- * and thus never will get called.
- *
- * TODO: we don't handle the case when there's no volume monitor ever
- * constructed. See TODO at the top of this file on how to handle that.
- */
-
- mount = NULL;
- G_LOCK (proxy_vm);
-
- /* First find the native volume monitor if one exists */
- g_hash_table_iter_init (&vm_hash_iter, the_volume_monitors);
- while (g_hash_table_iter_next (&vm_hash_iter, NULL, (gpointer) &volume_monitor)) {
- klass = G_PROXY_VOLUME_MONITOR_CLASS (G_OBJECT_GET_CLASS (volume_monitor));
-
- if (klass->is_native) {
- /* The see if we've got a mount */
- g_hash_table_iter_init (&vol_hash_iter, volume_monitor->mounts);
- while (g_hash_table_iter_next (&vol_hash_iter, NULL, (gpointer) &candidate_mount)) {
- if (g_proxy_mount_has_mount_path (candidate_mount, mount_path))
- {
- mount = g_object_ref (candidate_mount);
- goto out;
- }
- }
- goto out;
- }
- }
-
- out:
- G_UNLOCK (proxy_vm);
- return mount;
-}
-
-static void
-volume_monitor_went_away (gpointer data,
- GObject *where_the_object_was)
-{
- GType type = (GType) data;
- G_LOCK (proxy_vm);
- g_hash_table_remove (the_volume_monitors, (gpointer) type);
- G_UNLOCK (proxy_vm);
-}
-
-static GObject *
-g_proxy_volume_monitor_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GObject *object;
- GProxyVolumeMonitor *monitor;
- GProxyVolumeMonitorClass *klass;
- GObjectClass *parent_class;
- DBusError dbus_error;
- char *match_rule;
-
- G_LOCK (proxy_vm);
-
- klass = G_PROXY_VOLUME_MONITOR_CLASS (g_type_class_peek (type));
- object = g_hash_table_lookup (the_volume_monitors, (gpointer) type);
- if (object != NULL)
- {
- g_object_ref (object);
- goto out;
- }
-
- /* Invoke parent constructor. */
- klass = G_PROXY_VOLUME_MONITOR_CLASS (g_type_class_peek (G_TYPE_PROXY_VOLUME_MONITOR));
- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
- object = parent_class->constructor (type,
- n_construct_properties,
- construct_properties);
-
- monitor = G_PROXY_VOLUME_MONITOR (object);
-
- dbus_error_init (&dbus_error);
- monitor->session_bus = dbus_connection_ref (the_session_bus);
- monitor->drives = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
- monitor->volumes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
- monitor->mounts = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
-
- dbus_connection_add_filter (monitor->session_bus, filter_function, monitor, NULL);
- match_rule = get_match_rule (monitor);
- dbus_bus_add_match (monitor->session_bus,
- match_rule,
- &dbus_error);
- if (dbus_error_is_set (&dbus_error)) {
- /* not really a whole lot to do on failure than whine since
- * GObject construction can't fail...
- */
- g_warning ("cannot add match rule '%s': %s: %s", match_rule, dbus_error.name, dbus_error.message);
- dbus_error_free (&dbus_error);
- }
- g_free (match_rule);
-
- seed_monitor (monitor);
-
- g_hash_table_insert (the_volume_monitors, (gpointer) type, object);
- g_object_weak_ref (G_OBJECT (object), volume_monitor_went_away, (gpointer) type);
-
- out:
- G_UNLOCK (proxy_vm);
- return object;
-}
-
-typedef struct {
- const char *signal_name;
- GObject *object;
- GObject *other_object;
-} SignalEmitIdleData;
-
-static gboolean
-signal_emit_in_idle_do (SignalEmitIdleData *data)
-{
- if (data->other_object != NULL)
- {
- g_signal_emit_by_name (data->object, data->signal_name, data->other_object);
- g_object_unref (data->other_object);
- }
- else
- {
- g_signal_emit_by_name (data->object, data->signal_name);
- }
- g_object_unref (data->object);
- g_free (data);
-
- return FALSE;
-}
-
-static void
-signal_emit_in_idle (gpointer object, const char *signal_name, gpointer other_object)
-{
- SignalEmitIdleData *data;
-
- data = g_new0 (SignalEmitIdleData, 1);
- data->signal_name = signal_name;
- data->object = g_object_ref (G_OBJECT (object));
- data->other_object = other_object != NULL ? g_object_ref (G_OBJECT (other_object)) : NULL;
- g_idle_add ((GSourceFunc) signal_emit_in_idle_do, data);
-}
-
-
-
-static DBusHandlerResult
-filter_function (DBusConnection *connection, DBusMessage *message, void *user_data)
-{
- GProxyVolumeMonitor *monitor = G_PROXY_VOLUME_MONITOR (user_data);
- DBusMessageIter iter;
- const char *id;
- const char *the_dbus_name;
- const char *member;
- GProxyDrive *drive;
- GProxyVolume *volume;
- GProxyMount *mount;
- GProxyVolumeMonitorClass *klass;
-
- G_LOCK (proxy_vm);
-
- klass = G_PROXY_VOLUME_MONITOR_CLASS (G_OBJECT_GET_CLASS (monitor));
-
- member = dbus_message_get_member (message);
-
- if (dbus_message_is_signal (message, "org.gtk.Private.RemoteVolumeMonitor", "DriveChanged") ||
- dbus_message_is_signal (message, "org.gtk.Private.RemoteVolumeMonitor", "DriveConnected") ||
- dbus_message_is_signal (message, "org.gtk.Private.RemoteVolumeMonitor", "DriveDisconnected") ||
- dbus_message_is_signal (message, "org.gtk.Private.RemoteVolumeMonitor", "DriveEjectButton")) {
-
- dbus_message_iter_init (message, &iter);
- dbus_message_iter_get_basic (&iter, &the_dbus_name);
- dbus_message_iter_next (&iter);
- dbus_message_iter_get_basic (&iter, &id);
- dbus_message_iter_next (&iter);
-
- if (strcmp (the_dbus_name, klass->dbus_name) != 0)
- goto not_for_us;
-
- if (strcmp (member, "DriveChanged") == 0)
- {
- drive = g_hash_table_lookup (monitor->drives, id);
- if (drive != NULL)
- {
- g_proxy_drive_update (drive, &iter);
- signal_emit_in_idle (drive, "changed", NULL);
- signal_emit_in_idle (monitor, "drive-changed", drive);
- }
- }
- else if (strcmp (member, "DriveConnected") == 0)
- {
- drive = g_hash_table_lookup (monitor->drives, id);
- if (drive == NULL)
- {
- drive = g_proxy_drive_new (monitor);
- g_proxy_drive_update (drive, &iter);
- g_hash_table_insert (monitor->drives, g_strdup (g_proxy_drive_get_id (drive)), drive);
- signal_emit_in_idle (monitor, "drive-connected", drive);
- }
- }
- else if (strcmp (member, "DriveDisconnected") == 0)
- {
- drive = g_hash_table_lookup (monitor->drives, id);
- if (drive != NULL)
- {
- g_object_ref (drive);
- g_hash_table_remove (monitor->drives, id);
- signal_emit_in_idle (drive, "disconnected", NULL);
- signal_emit_in_idle (monitor, "drive-disconnected", drive);
- g_object_unref (drive);
- }
- }
- else if (strcmp (member, "DriveEjectButton") == 0)
- {
- drive = g_hash_table_lookup (monitor->drives, id);
- if (drive != NULL)
- {
- signal_emit_in_idle (drive, "eject-button", NULL);
- signal_emit_in_idle (monitor, "drive-eject-button", drive);
- }
- }
-
- } else if (dbus_message_is_signal (message, "org.gtk.Private.RemoteVolumeMonitor", "VolumeChanged") ||
- dbus_message_is_signal (message, "org.gtk.Private.RemoteVolumeMonitor", "VolumeAdded") ||
- dbus_message_is_signal (message, "org.gtk.Private.RemoteVolumeMonitor", "VolumeRemoved")) {
-
- dbus_message_iter_init (message, &iter);
- dbus_message_iter_get_basic (&iter, &the_dbus_name);
- dbus_message_iter_next (&iter);
- dbus_message_iter_get_basic (&iter, &id);
- dbus_message_iter_next (&iter);
-
- if (strcmp (the_dbus_name, klass->dbus_name) != 0)
- goto not_for_us;
-
- if (strcmp (member, "VolumeChanged") == 0)
- {
- volume = g_hash_table_lookup (monitor->volumes, id);
- if (volume != NULL)
- {
- g_proxy_volume_update (volume, &iter);
- signal_emit_in_idle (volume, "changed", NULL);
- signal_emit_in_idle (monitor, "volume-changed", volume);
- }
- }
- else if (strcmp (member, "VolumeAdded") == 0)
- {
- volume = g_hash_table_lookup (monitor->volumes, id);
- if (volume == NULL)
- {
- volume = g_proxy_volume_new (monitor);
- g_proxy_volume_update (volume, &iter);
- g_hash_table_insert (monitor->volumes, g_strdup (g_proxy_volume_get_id (volume)), volume);
- signal_emit_in_idle (monitor, "volume-added", volume);
- }
- }
- else if (strcmp (member, "VolumeRemoved") == 0)
- {
- volume = g_hash_table_lookup (monitor->volumes, id);
- if (volume != NULL)
- {
- g_object_ref (volume);
- g_hash_table_remove (monitor->volumes, id);
- signal_emit_in_idle (volume, "removed", NULL);
- signal_emit_in_idle (monitor, "volume-removed", volume);
- g_object_unref (volume);
- }
- }
-
- } else if (dbus_message_is_signal (message, "org.gtk.Private.RemoteVolumeMonitor", "MountChanged") ||
- dbus_message_is_signal (message, "org.gtk.Private.RemoteVolumeMonitor", "MountAdded") ||
- dbus_message_is_signal (message, "org.gtk.Private.RemoteVolumeMonitor", "MountPreUnmount") ||
- dbus_message_is_signal (message, "org.gtk.Private.RemoteVolumeMonitor", "MountRemoved")) {
-
- dbus_message_iter_init (message, &iter);
- dbus_message_iter_get_basic (&iter, &the_dbus_name);
- dbus_message_iter_next (&iter);
- dbus_message_iter_get_basic (&iter, &id);
- dbus_message_iter_next (&iter);
-
- if (strcmp (the_dbus_name, klass->dbus_name) != 0)
- goto not_for_us;
-
- if (strcmp (member, "MountChanged") == 0)
- {
- mount = g_hash_table_lookup (monitor->mounts, id);
- if (mount != NULL)
- {
- g_proxy_mount_update (mount, &iter);
- signal_emit_in_idle (mount, "changed", NULL);
- signal_emit_in_idle (monitor, "mount-changed", mount);
- }
- }
- else if (strcmp (member, "MountAdded") == 0)
- {
- mount = g_hash_table_lookup (monitor->mounts, id);
- if (mount == NULL)
- {
- mount = g_proxy_mount_new (monitor);
- g_proxy_mount_update (mount, &iter);
- g_hash_table_insert (monitor->mounts, g_strdup (g_proxy_mount_get_id (mount)), mount);
- signal_emit_in_idle (monitor, "mount-added", mount);
- }
- }
- else if (strcmp (member, "MountPreUnmount") == 0)
- {
- mount = g_hash_table_lookup (monitor->mounts, id);
- if (mount != NULL)
- {
- signal_emit_in_idle (mount, "pre-unmount", NULL);
- signal_emit_in_idle (monitor, "mount-pre-unmount", mount);
- }
- }
- else if (strcmp (member, "MountRemoved") == 0)
- {
- mount = g_hash_table_lookup (monitor->mounts, id);
- if (mount != NULL)
- {
- g_object_ref (mount);
- g_hash_table_remove (monitor->mounts, id);
- signal_emit_in_idle (mount, "unmounted", NULL);
- signal_emit_in_idle (monitor, "mount-removed", mount);
- g_object_unref (mount);
- }
- }
-
- }
-
- not_for_us:
- G_UNLOCK (proxy_vm);
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-static void
-g_proxy_volume_monitor_init (GProxyVolumeMonitor *monitor)
-{
-}
-
-static void
-g_proxy_volume_monitor_class_finalize (GProxyVolumeMonitorClass *klass)
-{
- g_free (klass->dbus_name);
-}
-
-typedef struct {
- char *dbus_name;
- gboolean is_native;
-} ProxyClassData;
-
-static ProxyClassData *
-proxy_class_data_new (const char *dbus_name, gboolean is_native)
-{
- ProxyClassData *data;
- data = g_new0 (ProxyClassData, 1);
- data->dbus_name = g_strdup (dbus_name);
- data->is_native = is_native;
- return data;
-}
-
-static void
-g_proxy_volume_monitor_class_intern_init_pre (GProxyVolumeMonitorClass *klass, gconstpointer class_data)
-{
- ProxyClassData *data = (ProxyClassData *) class_data;
- klass->dbus_name = g_strdup (data->dbus_name);
- klass->is_native = data->is_native;
- g_proxy_volume_monitor_class_intern_init (klass);
-}
-
-static gboolean
-is_supported (void)
-{
- if (the_session_bus != NULL)
- return TRUE;
- return FALSE;
-}
-
-static GVolume *
-adopt_orphan_mount (GMount *mount, GVolumeMonitor *monitor)
-{
- GProxyVolumeMonitor *proxy_monitor = G_PROXY_VOLUME_MONITOR (monitor);
- GFile *mount_root;
- GProxyVolume *proxy_volume;
- GVolume *ret;
- GHashTableIter hash_iter;
-
- ret = NULL;
-
- G_LOCK (proxy_vm);
-
- mount_root = g_mount_get_root (mount);
-
- /* TODO: consider what happens if two volumes wants to adopt the same mount?
- *
- * e.g. imagine two GVolume objects with activation_roots
- *
- * ssh://server/dir1
- * ssh://server/dir2
- */
-
- g_hash_table_iter_init (&hash_iter, proxy_monitor->volumes);
- while (g_hash_table_iter_next (&hash_iter, NULL, (gpointer) &proxy_volume))
- {
- GFile *activation_root;
-
- activation_root = g_volume_get_activation_root (G_VOLUME (proxy_volume));
- if (activation_root != NULL)
- {
- if (g_file_has_prefix (activation_root, mount_root) ||
- g_file_equal (activation_root, mount_root))
- {
- g_proxy_volume_adopt_foreign_mount (proxy_volume, mount);
- ret = g_object_ref (proxy_volume);
- g_object_unref (activation_root);
- goto found;
- }
- g_object_unref (activation_root);
- }
- }
-
- found:
- g_object_unref (mount_root);
-
- G_UNLOCK (proxy_vm);
- return ret;
-}
-
-static void
-g_proxy_volume_monitor_class_init (GProxyVolumeMonitorClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVolumeMonitorClass *monitor_class = G_VOLUME_MONITOR_CLASS (klass);
- GNativeVolumeMonitorClass *native_class = G_NATIVE_VOLUME_MONITOR_CLASS (klass);
-
- gobject_class->constructor = g_proxy_volume_monitor_constructor;
- gobject_class->finalize = g_proxy_volume_monitor_finalize;
-
- monitor_class->get_mounts = get_mounts;
- monitor_class->get_volumes = get_volumes;
- monitor_class->get_connected_drives = get_connected_drives;
- monitor_class->get_volume_for_uuid = get_volume_for_uuid;
- monitor_class->get_mount_for_uuid = get_mount_for_uuid;
- monitor_class->adopt_orphan_mount = adopt_orphan_mount;
- monitor_class->is_supported = is_supported;
-
- native_class->get_mount_for_mount_path = get_mount_for_mount_path;
-}
-
-/* Must be called with no locks held */
-static void
-seed_monitor (GProxyVolumeMonitor *monitor)
-{
- DBusMessage *message;
- DBusMessage *reply;
- DBusError dbus_error;
- DBusMessageIter iter_reply;
- DBusMessageIter iter_array;
-
- message = dbus_message_new_method_call (g_proxy_volume_monitor_get_dbus_name (monitor),
- "/",
- "org.gtk.Private.RemoteVolumeMonitor",
- "List");
- if (message == NULL)
- {
- g_warning ("Cannot allocate memory for DBusMessage");
- goto fail;
- }
- dbus_error_init (&dbus_error);
- reply = dbus_connection_send_with_reply_and_block (monitor->session_bus,
- message,
- -1,
- &dbus_error);
- dbus_message_unref (message);
- if (dbus_error_is_set (&dbus_error))
- {
- g_warning ("invoking List() failed for type %s: %s: %s",
- G_OBJECT_TYPE_NAME (monitor),
- dbus_error.name,
- dbus_error.message);
- dbus_error_free (&dbus_error);
- goto fail;
- }
-
- dbus_message_iter_init (reply, &iter_reply);
-
- /* TODO: verify signature */
-
- /* drives */
- dbus_message_iter_recurse (&iter_reply, &iter_array);
- while (dbus_message_iter_get_arg_type (&iter_array) != DBUS_TYPE_INVALID)
- {
- GProxyDrive *drive;
- const char *id;
- drive = g_proxy_drive_new (monitor);
- g_proxy_drive_update (drive, &iter_array);
- id = g_proxy_drive_get_id (drive);
- g_hash_table_insert (monitor->drives, g_strdup (id), drive);
- dbus_message_iter_next (&iter_array);
- }
- dbus_message_iter_next (&iter_reply);
-
- /* volumes */
- dbus_message_iter_recurse (&iter_reply, &iter_array);
- while (dbus_message_iter_get_arg_type (&iter_array) != DBUS_TYPE_INVALID)
- {
- GProxyVolume *volume;
- const char *id;
- volume = g_proxy_volume_new (monitor);
- g_proxy_volume_update (volume, &iter_array);
- id = g_proxy_volume_get_id (volume);
- g_hash_table_insert (monitor->volumes, g_strdup (id), volume);
- dbus_message_iter_next (&iter_array);
- }
- dbus_message_iter_next (&iter_reply);
-
- /* mounts */
- dbus_message_iter_recurse (&iter_reply, &iter_array);
- while (dbus_message_iter_get_arg_type (&iter_array) != DBUS_TYPE_INVALID)
- {
- GProxyMount *mount;
- const char *id;
- mount = g_proxy_mount_new (monitor);
- g_proxy_mount_update (mount, &iter_array);
- id = g_proxy_mount_get_id (mount);
- g_hash_table_insert (monitor->mounts, g_strdup (id), mount);
- dbus_message_iter_next (&iter_array);
- }
- dbus_message_iter_next (&iter_reply);
-
- dbus_message_unref (reply);
-
- fail:
- ;
-}
-
-GProxyDrive *
-g_proxy_volume_monitor_get_drive_for_id (GProxyVolumeMonitor *volume_monitor,
- const char *id)
-{
- GProxyDrive *drive;
-
- G_LOCK (proxy_vm);
- drive = g_hash_table_lookup (volume_monitor->drives, id);
- if (drive != NULL)
- g_object_ref (drive);
- G_UNLOCK (proxy_vm);
-
- return drive;
-}
-
-GProxyVolume *
-g_proxy_volume_monitor_get_volume_for_id (GProxyVolumeMonitor *volume_monitor,
- const char *id)
-{
- GProxyVolume *volume;
-
- G_LOCK (proxy_vm);
- volume = g_hash_table_lookup (volume_monitor->volumes, id);
- if (volume != NULL)
- g_object_ref (volume);
- G_UNLOCK (proxy_vm);
-
- return volume;
-}
-
-GProxyMount *
-g_proxy_volume_monitor_get_mount_for_id (GProxyVolumeMonitor *volume_monitor,
- const char *id)
-{
- GProxyMount *mount;
-
- G_LOCK (proxy_vm);
- mount = g_hash_table_lookup (volume_monitor->mounts, id);
- if (mount != NULL)
- g_object_ref (mount);
- G_UNLOCK (proxy_vm);
-
- return mount;
-}
-
-
-GHashTable *
-_get_identifiers (DBusMessageIter *iter)
-{
- GHashTable *hash_table;
- DBusMessageIter iter_array;
-
- hash_table = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- g_free);
-
- dbus_message_iter_recurse (iter, &iter_array);
- while (dbus_message_iter_get_arg_type (&iter_array) != DBUS_TYPE_INVALID)
- {
- DBusMessageIter iter_dict_entry;
- const char *key;
- const char *value;
-
- dbus_message_iter_recurse (&iter_array, &iter_dict_entry);
- dbus_message_iter_get_basic (&iter_dict_entry, &key);
- dbus_message_iter_next (&iter_dict_entry);
- dbus_message_iter_get_basic (&iter_dict_entry, &value);
-
- g_hash_table_insert (hash_table, g_strdup (key), g_strdup (value));
-
- dbus_message_iter_next (&iter_array);
- }
-
- return hash_table;
-}
-
-static GIcon *
-_g_icon_new_from_tokens (char **tokens, int num_tokens)
-{
- GIcon *icon;
-
- icon = NULL;
- if (strcmp (tokens[0], "GFileIcon") == 0)
- {
- GFile *file;
- char *unescaped_uri;
-
- if (num_tokens != 2)
- goto out;
-
- unescaped_uri = g_uri_unescape_string (tokens[1], NULL);
- file = g_file_new_for_uri (unescaped_uri);
- icon = g_file_icon_new (file);
- g_object_unref (file);
- g_free (unescaped_uri);
- }
- else if (strcmp (tokens[0], "GThemedIcon") == 0)
- {
- int n;
-
- for (n = 1; n < num_tokens; n++)
- {
- char *unescaped_name;
-
- unescaped_name = g_uri_unescape_string (tokens[n], NULL);
- if (icon == NULL)
- icon = g_themed_icon_new (unescaped_name);
- else
- g_themed_icon_append_name (G_THEMED_ICON (icon), unescaped_name);
- g_free (unescaped_name);
- }
- }
- else if (strcmp (tokens[0], "GEmblemedIcon") == 0)
- {
- int n, m, i;
- GIcon *base, *e_icon;
- GEmblem *emblem;
- GList *emblems, *e;
- GEmblemOrigin origin;
- char **t = tokens;
-
- t++;
- n = atoi (*t);
- t++;
- if (t - tokens >= num_tokens)
- goto out;
- base = _g_icon_new_from_tokens (t, n);
- if (base == NULL)
- goto out;
-
- t = t + n;
- m = atoi (*t);
- t++;
- emblems = NULL;
- for (i = 0; i < m; i++)
- {
- origin = atoi (*t);
- t++;
- n = atoi (*t);
- t++;
- if (t - tokens >= num_tokens)
- goto cleanup;
- e_icon = _g_icon_new_from_tokens (t, n);
- t += n;
- if (e_icon == NULL)
- goto cleanup;
- emblem = g_emblem_new_with_origin (e_icon, origin);
- emblems = g_list_append (emblems, emblem);
- }
- icon = g_emblemed_icon_new (base, (GEmblem*)emblems->data);
- for (e = emblems->next; e; e = e->next)
- g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (icon), (GEmblem*)e->data);
-
- cleanup:
- g_object_unref (base);
- g_list_foreach (emblems, (GFunc)g_object_unref, NULL);
- g_list_free (emblems);
- }
-
- out:
- return icon;
-}
-
-GIcon *
-_g_icon_new_from_serialized_data (const char *gicon_data)
-{
- char **tokens;
- GIcon *icon;
- gint num_tokens;
-
- g_return_val_if_fail (gicon_data != NULL, NULL);
-
- icon = NULL;
-
- tokens = g_strsplit (gicon_data, " ", 0);
-
- if (g_strv_length (tokens) >= 3)
- {
- num_tokens = atoi (tokens[0]);
- icon = _g_icon_new_from_tokens (tokens + 1, num_tokens);
- }
-
- if (icon == NULL)
- g_warning ("malformed GIcon data \"%s\"", gicon_data);
-
- g_strfreev (tokens);
- return icon;
-}
-
-DBusConnection *
-g_proxy_volume_monitor_get_dbus_connection (GProxyVolumeMonitor *volume_monitor)
-{
- return dbus_connection_ref (volume_monitor->session_bus);
-}
-
-const char *
-g_proxy_volume_monitor_get_dbus_name (GProxyVolumeMonitor *volume_monitor)
-{
- GProxyVolumeMonitorClass *klass = G_PROXY_VOLUME_MONITOR_CLASS (G_OBJECT_GET_CLASS (volume_monitor));
- return klass->dbus_name;
-}
-
-static void
-register_volume_monitor (GTypeModule *type_module,
- const char *type_name,
- const char *dbus_name,
- gboolean is_native,
- int priority)
-{
- GType type;
- const GTypeInfo type_info = {
- sizeof (GProxyVolumeMonitorClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) g_proxy_volume_monitor_class_intern_init_pre,
- (GClassFinalizeFunc) g_proxy_volume_monitor_class_finalize,
- (gconstpointer) proxy_class_data_new (dbus_name, is_native), /* class_data (leaked!) */
- sizeof (GProxyVolumeMonitor),
- 0, /* n_preallocs */
- (GInstanceInitFunc) g_proxy_volume_monitor_init,
- NULL /* value_table */
- };
-
- type = g_type_module_register_type (type_module,
- G_TYPE_PROXY_VOLUME_MONITOR,
- type_name,
- &type_info,
- 0 /* type_flags */);
-
- g_io_extension_point_implement (is_native ? G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME :
- G_VOLUME_MONITOR_EXTENSION_POINT_NAME,
- type,
- type_name,
- priority);
-}
-
-gboolean
-g_proxy_volume_monitor_setup_session_bus_connection (void)
-{
- gboolean ret;
- DBusError dbus_error;
-
- ret = FALSE;
-
- G_LOCK (proxy_vm);
- if (the_session_bus != NULL)
- {
- g_warning ("session bus connection is already up!");
- dbus_connection_ref (the_session_bus);
- goto out;
- }
-
- /* This is so that system daemons can use gio
- * without spawning private dbus instances.
- * See bug 526454.
- */
- if (g_getenv ("DBUS_SESSION_BUS_ADDRESS") == NULL)
- {
- goto out;
- }
-
- dbus_error_init (&dbus_error);
- the_session_bus = dbus_bus_get_private (DBUS_BUS_SESSION, &dbus_error);
- if (dbus_error_is_set (&dbus_error)) {
- g_warning ("cannot connect to the session bus: %s: %s", dbus_error.name, dbus_error.message);
- dbus_error_free (&dbus_error);
- goto out;
- }
-
- _g_dbus_connection_integrate_with_main (the_session_bus);
-
- the_volume_monitors = g_hash_table_new (g_direct_hash, g_direct_equal);
-
- ret = TRUE;
-
- out:
- G_UNLOCK (proxy_vm);
- return ret;
-}
-
-void
-g_proxy_volume_monitor_teardown_session_bus_connection (void)
-{
- G_LOCK (proxy_vm);
- if (the_session_bus != NULL)
- {
- /* it would be nice to check that refcount==1 here */
- _g_dbus_connection_remove_from_main (the_session_bus);
- dbus_connection_close (the_session_bus);
- the_session_bus = NULL;
-
- g_hash_table_unref (the_volume_monitors);
- the_volume_monitors = NULL;
- }
- G_UNLOCK (proxy_vm);
-}
-
-static gboolean
-is_remote_monitor_supported (const char *dbus_name)
-{
- DBusMessage *message;
- DBusMessage *reply;
- DBusError dbus_error;
- dbus_bool_t is_supported;
-
- message = NULL;
- reply = NULL;
- is_supported = FALSE;
-
- message = dbus_message_new_method_call (dbus_name,
- "/",
- "org.gtk.Private.RemoteVolumeMonitor",
- "IsSupported");
- if (message == NULL)
- {
- g_warning ("Cannot allocate memory for DBusMessage");
- goto fail;
- }
- dbus_error_init (&dbus_error);
- reply = dbus_connection_send_with_reply_and_block (the_session_bus,
- message,
- -1,
- &dbus_error);
- if (dbus_error_is_set (&dbus_error))
- {
- g_warning ("invoking IsSupported() failed for remote volume monitor with dbus name %s: %s: %s",
- dbus_name,
- dbus_error.name,
- dbus_error.message);
- dbus_error_free (&dbus_error);
- goto fail;
- }
-
- if (!dbus_message_get_args (reply, &dbus_error,
- DBUS_TYPE_BOOLEAN, &is_supported,
- DBUS_TYPE_INVALID))
- {
- g_warning ("Error parsing args in reply for IsSupported(): %s: %s", dbus_error.name, dbus_error.message);
- dbus_error_free (&dbus_error);
- goto fail;
- }
-
- if (!is_supported)
- g_warning ("remote volume monitor with dbus name %s is not supported", dbus_name);
-
- fail:
- if (message != NULL)
- dbus_message_unref (message);
- if (reply != NULL)
- dbus_message_unref (reply);
- return is_supported;
-}
-
-void
-g_proxy_volume_monitor_register (GIOModule *module)
-{
- GDir *dir;
- GError *error;
-
- /* first register the abstract base type... */
- g_proxy_volume_monitor_register_type (G_TYPE_MODULE (module));
-
- /* ... then register instantiable types for each remote volume
- * monitor - each remote volume monitor is defined in a key-value
- * file in $(datadir)/gvfs/remote-volume-monitors that must have
- * the suffix .monitor. Each file specifies
- *
- * - the name of the volume monitor
- * - the name of the D-Bus service
- * - whether the volume monitor is native
- * - and if so the priority
- */
-
- error = NULL;
- dir = g_dir_open (REMOTE_VOLUME_MONITORS_DIR, 0, &error);
- if (dir == NULL)
- {
- g_warning ("cannot open directory " REMOTE_VOLUME_MONITORS_DIR ": %s", error->message);
- g_error_free (error);
- }
- else
- {
- const char *name;
-
- while ((name = g_dir_read_name (dir)) != NULL)
- {
- GKeyFile *key_file;
- char *type_name;
- char *path;
- char *dbus_name;
- gboolean is_native;
- int native_priority;
-
- type_name = NULL;
- key_file = NULL;
- dbus_name = NULL;
- path = NULL;
-
- if (!g_str_has_suffix (name, ".monitor"))
- goto cont;
-
- path = g_build_filename (REMOTE_VOLUME_MONITORS_DIR, name, NULL);
-
- key_file = g_key_file_new ();
- error = NULL;
- if (!g_key_file_load_from_file (key_file, path, G_KEY_FILE_NONE, &error))
- {
- g_warning ("error loading key-value file %s: %s", path, error->message);
- g_error_free (error);
- goto cont;
- }
-
- type_name = g_key_file_get_string (key_file, "RemoteVolumeMonitor", "Name", &error);
- if (error != NULL)
- {
- g_warning ("error extracting Name key from %s: %s", path, error->message);
- g_error_free (error);
- goto cont;
- }
-
- dbus_name = g_key_file_get_string (key_file, "RemoteVolumeMonitor", "DBusName", &error);
- if (error != NULL)
- {
- g_warning ("error extracting DBusName key from %s: %s", path, error->message);
- g_error_free (error);
- goto cont;
- }
-
- is_native = g_key_file_get_boolean (key_file, "RemoteVolumeMonitor", "IsNative", &error);
- if (error != NULL)
- {
- g_warning ("error extracting IsNative key from %s: %s", path, error->message);
- g_error_free (error);
- goto cont;
- }
-
- if (is_native)
- {
- native_priority = g_key_file_get_integer (key_file, "RemoteVolumeMonitor", "NativePriority", &error);
- if (error != NULL)
- {
- g_warning ("error extracting NativePriority key from %s: %s", path, error->message);
- g_error_free (error);
- goto cont;
- }
- }
- else
- {
- native_priority = 0;
- }
-
- if (is_remote_monitor_supported (dbus_name))
- {
- register_volume_monitor (G_TYPE_MODULE (module),
- type_name,
- dbus_name,
- is_native,
- native_priority);
- }
-
- cont:
-
- g_free (type_name);
- g_free (dbus_name);
- g_free (path);
- if (key_file != NULL)
- g_key_file_free (key_file);
- }
- g_dir_close (dir);
- }
-}
diff --git a/monitor/proxy/gproxyvolumemonitor.h b/monitor/proxy/gproxyvolumemonitor.h
deleted file mode 100644
index eb2f9316..00000000
--- a/monitor/proxy/gproxyvolumemonitor.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_PROXY_VOLUME_MONITOR_H__
-#define __G_PROXY_VOLUME_MONITOR_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <gio/gunixmounts.h>
-#include <dbus/dbus.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_PROXY_VOLUME_MONITOR (g_proxy_volume_monitor_get_type ())
-#define G_PROXY_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY_VOLUME_MONITOR, GProxyVolumeMonitor))
-#define G_PROXY_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_PROXY_VOLUME_MONITOR, GProxyVolumeMonitorClass))
-#define G_IS_PROXY_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY_VOLUME_MONITOR))
-#define G_IS_PROXY_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_PROXY_VOLUME_MONITOR))
-
-typedef struct _GProxyVolumeMonitor GProxyVolumeMonitor;
-typedef struct _GProxyVolumeMonitorClass GProxyVolumeMonitorClass;
-
-/* Forward definitions */
-typedef struct _GProxyDrive GProxyDrive;
-typedef struct _GProxyVolume GProxyVolume;
-typedef struct _GProxyMount GProxyMount;
-
-struct _GProxyVolumeMonitorClass {
- GNativeVolumeMonitorClass parent_class;
- char *dbus_name;
- gboolean is_native;
-};
-
-GType g_proxy_volume_monitor_get_type (void) G_GNUC_CONST;
-
-void g_proxy_volume_monitor_register (GIOModule *module);
-GProxyDrive *g_proxy_volume_monitor_get_drive_for_id (GProxyVolumeMonitor *volume_monitor,
- const char *id);
-GProxyVolume *g_proxy_volume_monitor_get_volume_for_id (GProxyVolumeMonitor *volume_monitor,
- const char *id);
-GProxyMount *g_proxy_volume_monitor_get_mount_for_id (GProxyVolumeMonitor *volume_monitor,
- const char *id);
-DBusConnection *g_proxy_volume_monitor_get_dbus_connection (GProxyVolumeMonitor *volume_monitor);
-const char *g_proxy_volume_monitor_get_dbus_name (GProxyVolumeMonitor *volume_monitor);
-
-gboolean g_proxy_volume_monitor_setup_session_bus_connection (void);
-void g_proxy_volume_monitor_teardown_session_bus_connection (void);
-
-
-GHashTable *_get_identifiers (DBusMessageIter *iter);
-
-GIcon *_g_icon_new_from_serialized_data (const char *gicon_data);
-
-G_END_DECLS
-
-#endif /* __G_PROXY_VOLUME_MONITOR_H__ */
diff --git a/monitor/proxy/gvfsproxyvolumemonitordaemon.c b/monitor/proxy/gvfsproxyvolumemonitordaemon.c
deleted file mode 100644
index 3ee5bbf8..00000000
--- a/monitor/proxy/gvfsproxyvolumemonitordaemon.c
+++ /dev/null
@@ -1,1155 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-#include <string.h>
-#include <locale.h>
-#include <gio/gio.h>
-#include <dbus/dbus.h>
-#include <glib/gi18n.h>
-#include <stdlib.h>
-
-#include "gdbusutils.h"
-#include "gvfsproxyvolumemonitordaemon.h"
-
-static GVolumeMonitor *monitor = NULL;
-static DBusConnection *connection = NULL;
-static GType the_volume_monitor_type;
-static const char *the_dbus_name = NULL;
-
-static void monitor_try_create (void);
-
-static char *
-_g_icon_serialize (GIcon *icon)
-{
- char *ret;
-
- g_return_val_if_fail (icon != NULL, NULL);
- g_return_val_if_fail (G_IS_ICON (icon), NULL);
-
- /* We encode icons as a series of whitespace-separated tokens.
- * The first token is the type of the icon. To help decoding,
- * the number of tokens is prepended as the first token (not
- * included in the count).
- */
- if (G_IS_FILE_ICON (icon))
- {
- GFileIcon *file_icon = G_FILE_ICON (icon);
- GFile *file;
- char *uri;
- char *escaped_uri;
-
- file = g_file_icon_get_file (file_icon);
- uri = g_file_get_uri (file);
- escaped_uri = g_uri_escape_string (uri, NULL, TRUE);
-
- ret = g_strdup_printf ("2 GFileIcon %s", escaped_uri);
-
- g_free (uri);
- g_free (escaped_uri);
- }
- else if (G_IS_THEMED_ICON (icon))
- {
- GThemedIcon *themed_icon = G_THEMED_ICON (icon);
- char *escaped_name;
- char **names;
- GString *s;
-
- g_object_get (themed_icon,
- "names", &names,
- NULL);
-
- s = g_string_new (0);
- g_string_append_printf (s, "%d GThemedIcon", g_strv_length (names) + 1);
-
- if (names != NULL)
- {
- int n;
- for (n = 0; names[n] != NULL; n++)
- {
- escaped_name = g_uri_escape_string (names[n], NULL, TRUE);
- g_string_append_c (s, ' ');
- g_string_append (s, escaped_name);
- g_free (escaped_name);
- }
- }
-
- ret = g_string_free (s, FALSE);
-
- g_strfreev (names);
- }
- else if (G_IS_EMBLEMED_ICON (icon))
- {
- char *base, *s;
- GList *emblems, *e;
- int n;
- GString *str;
-
- /* GEmblemedIcons are encoded as
- *
- * <num_tokens> GEmblemedIcon <num_emblems> [<origin> <encoded_icon> ]*
- */
- str = g_string_new ("");
- base = _g_icon_serialize (g_emblemed_icon_get_icon (G_EMBLEMED_ICON (icon)));
- emblems = g_emblemed_icon_get_emblems (G_EMBLEMED_ICON (icon));
- g_string_append_printf (str, "GEmblemedIcon %s %d", base, g_list_length (emblems));
- n = atoi (base) + 2;
- g_free (base);
- for (e = emblems; e; e = e->next)
- {
- s = _g_icon_serialize (g_emblem_get_icon (G_EMBLEM (e->data)));
- g_string_append_printf (str, " %d %s", g_emblem_get_origin (G_EMBLEM (e->data)), s);
- n += atoi (s) + 2;
- g_free (s);
- }
-
- s = g_string_free (str, FALSE);
- ret = g_strdup_printf ("%d %s", n + 1, s);
- g_free (s);
- }
- else
- {
- ret = NULL;
- g_warning ("unknown icon type; please add support");
- }
-
- return ret;
-}
-
-/* string id
- * string name
- * string gicon_data
- * boolean can-eject
- * boolean can-poll-for-media
- * boolean has-media
- * boolean is-media-removable
- * array:string volume-ids
- * dict:string->string identifiers
- */
-#define DRIVE_STRUCT_TYPE "(sssbbbbasa{ss})"
-
-static void
-append_drive (GDrive *drive, DBusMessageIter *iter_array)
-{
- DBusMessageIter iter_struct;
- DBusMessageIter iter_volume_array;
- DBusMessageIter iter_identifiers;
- char *id;
- char *name;
- GIcon *icon;
- char *icon_data;
- gboolean can_eject;
- gboolean can_poll_for_media;
- gboolean has_media;
- gboolean is_media_removable;
- GList *volumes, *l;
- char **identifiers;
- int n;
-
- dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct);
-
- id = g_strdup_printf ("%p", drive);
- name = g_drive_get_name (drive);
- icon = g_drive_get_icon (drive);
- icon_data = _g_icon_serialize (icon);
- can_eject = g_drive_can_eject (drive);
- can_poll_for_media = g_drive_can_poll_for_media (drive);
- has_media = g_drive_has_media (drive);
- is_media_removable = g_drive_is_media_removable (drive);
- volumes = g_drive_get_volumes (drive);
- identifiers = g_drive_enumerate_identifiers (drive);
-
- if (name == NULL)
- name = g_strdup ("");
-
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &id);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &name);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &icon_data);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_BOOLEAN, &can_eject);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_BOOLEAN, &can_poll_for_media);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_BOOLEAN, &has_media);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_BOOLEAN, &is_media_removable);
-
- dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "s", &iter_volume_array);
- for (l = volumes; l != NULL; l = l->next)
- {
- GVolume *volume = G_VOLUME (l->data);
- char *volume_id;
- volume_id = g_strdup_printf ("%p", volume);
- dbus_message_iter_append_basic (&iter_volume_array, DBUS_TYPE_STRING, &volume_id);
- g_free (volume_id);
- }
- dbus_message_iter_close_container (&iter_struct, &iter_volume_array);
-
- dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "{ss}", &iter_identifiers);
- for (n = 0; identifiers[n] != NULL; n++)
- {
- DBusMessageIter iter_dict_entry;
- char *id_value;
- id_value = g_drive_get_identifier (drive, identifiers[n]);
- dbus_message_iter_open_container (&iter_identifiers,
- DBUS_TYPE_DICT_ENTRY,
- NULL,
- &iter_dict_entry);
- dbus_message_iter_append_basic (&iter_dict_entry, DBUS_TYPE_STRING, &(identifiers[n]));
- dbus_message_iter_append_basic (&iter_dict_entry, DBUS_TYPE_STRING, &id_value);
- dbus_message_iter_close_container (&iter_identifiers, &iter_dict_entry);
- g_free (id_value);
- }
- dbus_message_iter_close_container (&iter_struct, &iter_identifiers);
-
- g_strfreev (identifiers);
- g_list_foreach (volumes, (GFunc) g_object_unref, NULL);
- g_list_free (volumes);
- g_free (icon_data);
- g_object_unref (icon);
- g_free (name);
- g_free (id);
-
- dbus_message_iter_close_container (iter_array, &iter_struct);
-}
-
-/* string id
- * string name
- * string gicon_data
- * string uuid
- * string activation_uri
- * boolean can-mount
- * boolean should-automount
- * string drive-id
- * string mount-id
- * dict:string->string identifiers
- */
-#define VOLUME_STRUCT_TYPE "(sssssbbssa{ss})"
-
-static void
-append_volume (GVolume *volume, DBusMessageIter *iter_array)
-{
- DBusMessageIter iter_struct;
- DBusMessageIter iter_identifiers;
- char *id;
- char *name;
- GIcon *icon;
- char *icon_data;
- char *uuid;
- GFile *activation_root;
- char *activation_uri;
- gboolean can_mount;
- gboolean should_automount;
- GDrive *drive;
- char *drive_id;
- GMount *mount;
- char *mount_id;
- char **identifiers;
- int n;
-
- dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct);
-
- id = g_strdup_printf ("%p", volume);
- name = g_volume_get_name (volume);
- icon = g_volume_get_icon (volume);
- icon_data = _g_icon_serialize (icon);
- uuid = g_volume_get_uuid (volume);
- activation_root = g_volume_get_activation_root (volume);
- if (activation_root == NULL)
- activation_uri = g_strdup ("");
- else
- activation_uri = g_file_get_uri (activation_root);
- can_mount = g_volume_can_mount (volume);
- should_automount = g_volume_should_automount (volume);
- drive = g_volume_get_drive (volume);
- if (drive == NULL)
- drive_id = g_strdup ("");
- else
- drive_id = g_strdup_printf ("%p", drive);
- mount = g_volume_get_mount (volume);
- if (mount == NULL)
- mount_id = g_strdup ("");
- else
- mount_id = g_strdup_printf ("%p", mount);
- identifiers = g_volume_enumerate_identifiers (volume);
-
- if (name == NULL)
- name = g_strdup ("");
- if (uuid == NULL)
- uuid = g_strdup ("");
-
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &id);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &name);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &icon_data);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &uuid);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &activation_uri);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_BOOLEAN, &can_mount);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_BOOLEAN, &should_automount);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &drive_id);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &mount_id);
-
- dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "{ss}", &iter_identifiers);
- for (n = 0; identifiers[n] != NULL; n++)
- {
- DBusMessageIter iter_dict_entry;
- char *id_value;
- id_value = g_volume_get_identifier (volume, identifiers[n]);
- dbus_message_iter_open_container (&iter_identifiers,
- DBUS_TYPE_DICT_ENTRY,
- NULL,
- &iter_dict_entry);
- dbus_message_iter_append_basic (&iter_dict_entry, DBUS_TYPE_STRING, &(identifiers[n]));
- dbus_message_iter_append_basic (&iter_dict_entry, DBUS_TYPE_STRING, &id_value);
- dbus_message_iter_close_container (&iter_identifiers, &iter_dict_entry);
- g_free (id_value);
- }
- dbus_message_iter_close_container (&iter_struct, &iter_identifiers);
-
- g_strfreev (identifiers);
- g_free (mount_id);
- if (mount != NULL)
- g_object_unref (mount);
- g_free (drive_id);
- if (drive != NULL)
- g_object_unref (drive);
- g_free (uuid);
- if (activation_root != NULL)
- g_object_unref (activation_root);
- g_free (activation_uri);
- g_free (icon_data);
- g_object_unref (icon);
- g_free (name);
- g_free (id);
-
- dbus_message_iter_close_container (iter_array, &iter_struct);
-}
-
-/* string id
- * string name
- * string gicon_data
- * string uuid
- * string root_uri
- * boolean can-unmount
- * string volume-id
- * array:string x-content-types
- */
-#define MOUNT_STRUCT_TYPE "(sssssbsas)"
-
-static void
-append_mount (GMount *mount, DBusMessageIter *iter_array)
-{
- DBusMessageIter iter_struct;
- DBusMessageIter iter_x_content_types_array;
- char *id;
- char *name;
- GIcon *icon;
- char *icon_data;
- char *uuid;
- GFile *root;
- char *root_uri;
- gboolean can_unmount;
- GVolume *volume;
- char *volume_id;
- char **x_content_types;
- int n;
-
- dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct);
-
- id = g_strdup_printf ("%p", mount);
- name = g_mount_get_name (mount);
- icon = g_mount_get_icon (mount);
- icon_data = _g_icon_serialize (icon);
- uuid = g_mount_get_uuid (mount);
- root = g_mount_get_root (mount);
- root_uri = g_file_get_uri (root);
- can_unmount = g_mount_can_unmount (mount);
- volume = g_mount_get_volume (mount);
- if (volume == NULL)
- volume_id = g_strdup ("");
- else
- volume_id = g_strdup_printf ("%p", volume);
-
- if (name == NULL)
- name = g_strdup ("");
- if (uuid == NULL)
- uuid = g_strdup ("");
-
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &id);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &name);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &icon_data);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &uuid);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &root_uri);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_BOOLEAN, &can_unmount);
- dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &volume_id);
-
- dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "s", &iter_x_content_types_array);
- x_content_types = (char **) g_object_get_data (G_OBJECT (mount), "x-content-types");
- if (x_content_types != NULL)
- {
- for (n = 0; x_content_types[n] != NULL; n++)
- dbus_message_iter_append_basic (&iter_x_content_types_array, DBUS_TYPE_STRING, &(x_content_types[n]));
- }
- dbus_message_iter_close_container (&iter_struct, &iter_x_content_types_array);
-
- g_free (volume_id);
- if (volume != NULL)
- g_object_unref (volume);
- g_free (root_uri);
- g_object_unref (root);
- g_free (uuid);
- g_free (icon_data);
- g_object_unref (icon);
- g_free (name);
- g_free (id);
-
- dbus_message_iter_close_container (iter_array, &iter_struct);
-}
-
-static DBusHandlerResult
-handle_list (DBusConnection *connection, DBusMessage *message)
-{
- GList *drives;
- GList *volumes;
- GList *mounts;
- DBusMessageIter iter;
- DBusMessageIter iter_array;
- DBusMessage *reply;
-
- drives = g_volume_monitor_get_connected_drives (monitor);
- volumes = g_volume_monitor_get_volumes (monitor);
- mounts = g_volume_monitor_get_mounts (monitor);
-
- reply = dbus_message_new_method_return (message);
- dbus_message_iter_init_append (reply, &iter);
-
- dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, DRIVE_STRUCT_TYPE, &iter_array);
- g_list_foreach (drives, (GFunc) append_drive, &iter_array);
- dbus_message_iter_close_container (&iter, &iter_array);
-
- dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, VOLUME_STRUCT_TYPE, &iter_array);
- g_list_foreach (volumes, (GFunc) append_volume, &iter_array);
- dbus_message_iter_close_container (&iter, &iter_array);
-
- dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, MOUNT_STRUCT_TYPE, &iter_array);
- g_list_foreach (mounts, (GFunc) append_mount, &iter_array);
- dbus_message_iter_close_container (&iter, &iter_array);
-
- g_list_foreach (drives, (GFunc) g_object_unref, NULL);
- g_list_free (drives);
- g_list_foreach (volumes, (GFunc) g_object_unref, NULL);
- g_list_free (volumes);
- g_list_foreach (mounts, (GFunc) g_object_unref, NULL);
- g_list_free (mounts);
-
- dbus_connection_send (connection, reply, NULL);
- dbus_message_unref (reply);
-
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-static void
-mount_unmount_cb (GMount *mount, GAsyncResult *result, DBusMessage *message)
-{
- GError *error;
- DBusMessage *reply;
-
- error = NULL;
- if (!g_mount_unmount_finish (mount, result, &error))
- {
- reply = _dbus_message_new_from_gerror (message, error);
- g_error_free (error);
- }
- else
- {
- reply = dbus_message_new_method_return (message);
- }
-
- dbus_connection_send (connection, reply, NULL);
- dbus_message_unref (message);
- dbus_message_unref (reply);
-}
-
-static DBusHandlerResult
-handle_mount_unmount (DBusConnection *connection, DBusMessage *message)
-{
- const char *id;
- dbus_uint32_t unmount_flags;
- DBusError dbus_error;
- GList *mounts, *l;
- GMount *mount;
- DBusHandlerResult ret;
-
- mounts = NULL;
- unmount_flags = 0;
- ret = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- dbus_error_init (&dbus_error);
- if (!dbus_message_get_args (message, &dbus_error,
- DBUS_TYPE_STRING, &id,
- DBUS_TYPE_UINT32 &unmount_flags,
- DBUS_TYPE_INVALID))
- {
- g_warning ("Error parsing args for MountUnmount(): %s: %s", dbus_error.name, dbus_error.message);
- dbus_error_free (&dbus_error);
- goto out;
- }
-
- ret = DBUS_HANDLER_RESULT_HANDLED;
-
- mount = NULL;
- mounts = g_volume_monitor_get_mounts (monitor);
- for (l = mounts; l != NULL; l = l->next)
- {
- char *mount_id;
-
- mount = G_MOUNT (l->data);
- mount_id = g_strdup_printf ("%p", mount);
- if (strcmp (mount_id, id) == 0)
- break;
-
- g_free (mount_id);
- }
- if (l == NULL)
- mount = NULL;
-
- if (mount == NULL)
- {
- DBusMessage *reply;
- reply = dbus_message_new_error (message,
- "org.gtk.Private.RemoteVolumeMonitor.NotFound",
- "The given mount was not found");
- dbus_connection_send (connection, reply, NULL);
- dbus_message_unref (reply);
- goto out;
- }
-
- g_mount_unmount (mount,
- unmount_flags,
- NULL,
- (GAsyncReadyCallback) mount_unmount_cb,
- dbus_message_ref (message));
-
- out:
- if (mounts != NULL)
- {
- g_list_foreach (mounts, (GFunc) g_object_unref, NULL);
- g_list_free (mounts);
- }
- return ret;
-}
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-static void
-volume_mount_cb (GVolume *volume, GAsyncResult *result, DBusMessage *message)
-{
- GError *error;
- DBusMessage *reply;
-
- error = NULL;
- if (!g_volume_mount_finish (volume, result, &error))
- {
- reply = _dbus_message_new_from_gerror (message, error);
- g_error_free (error);
- }
- else
- {
- reply = dbus_message_new_method_return (message);
- }
-
- dbus_connection_send (connection, reply, NULL);
- dbus_message_unref (message);
- dbus_message_unref (reply);
-}
-
-static DBusHandlerResult
-handle_volume_mount (DBusConnection *connection, DBusMessage *message)
-{
- const char *id;
- dbus_uint32_t mount_flags;
- dbus_bool_t use_mount_operation;
- DBusError dbus_error;
- GList *volumes, *l;
- GVolume *volume;
- DBusHandlerResult ret;
- GMountOperation *mount_operation;
-
- volume = NULL;
- ret = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- dbus_error_init (&dbus_error);
- if (!dbus_message_get_args (message, &dbus_error,
- DBUS_TYPE_STRING, &id,
- DBUS_TYPE_UINT32, &mount_flags,
- DBUS_TYPE_BOOLEAN, &use_mount_operation,
- DBUS_TYPE_INVALID))
- {
- g_warning ("Error parsing args for VolumeMount(): %s: %s", dbus_error.name, dbus_error.message);
- dbus_error_free (&dbus_error);
- goto out;
- }
-
- ret = DBUS_HANDLER_RESULT_HANDLED;
-
- volume = NULL;
- volumes = g_volume_monitor_get_volumes (monitor);
- for (l = volumes; l != NULL; l = l->next)
- {
- char *volume_id;
-
- volume = G_VOLUME (l->data);
- volume_id = g_strdup_printf ("%p", volume);
- if (strcmp (volume_id, id) == 0)
- break;
-
- g_free (volume_id);
- }
- if (l == NULL)
- volume = NULL;
-
- if (volume == NULL)
- {
- DBusMessage *reply;
- reply = dbus_message_new_error (message,
- "org.gtk.Private.RemoteVolumeMonitor.NotFound",
- "The given volume was not found");
- dbus_connection_send (connection, reply, NULL);
- dbus_message_unref (reply);
- goto out;
- }
-
- mount_operation = NULL;
- if (use_mount_operation)
- mount_operation = g_mount_operation_new ();
-
- g_volume_mount (volume,
- mount_flags,
- mount_operation,
- NULL,
- (GAsyncReadyCallback) volume_mount_cb,
- dbus_message_ref (message));
-
- if (mount_operation != NULL)
- g_object_unref (mount_operation);
-
- out:
- if (volumes != NULL)
- {
- g_list_foreach (volumes, (GFunc) g_object_unref, NULL);
- g_list_free (volumes);
- }
- return ret;
-}
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-static void
-drive_eject_cb (GDrive *drive, GAsyncResult *result, DBusMessage *message)
-{
- GError *error;
- DBusMessage *reply;
-
- error = NULL;
- if (!g_drive_eject_finish (drive, result, &error))
- {
- reply = _dbus_message_new_from_gerror (message, error);
- g_error_free (error);
- }
- else
- {
- reply = dbus_message_new_method_return (message);
- }
-
- dbus_connection_send (connection, reply, NULL);
- dbus_message_unref (message);
- dbus_message_unref (reply);
-}
-
-static DBusHandlerResult
-handle_drive_eject (DBusConnection *connection, DBusMessage *message)
-{
- const char *id;
- dbus_uint32_t unmount_flags;
- DBusError dbus_error;
- GList *drives, *l;
- GDrive *drive;
- DBusHandlerResult ret;
-
- drive = NULL;
- unmount_flags = 0;
- ret = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- dbus_error_init (&dbus_error);
- if (!dbus_message_get_args (message, &dbus_error,
- DBUS_TYPE_STRING, &id,
- DBUS_TYPE_UINT32 &unmount_flags,
- DBUS_TYPE_INVALID))
- {
- g_warning ("Error parsing args for DriveEject(): %s: %s", dbus_error.name, dbus_error.message);
- dbus_error_free (&dbus_error);
- goto out;
- }
-
- ret = DBUS_HANDLER_RESULT_HANDLED;
-
- drive = NULL;
- drives = g_volume_monitor_get_connected_drives (monitor);
- for (l = drives; l != NULL; l = l->next)
- {
- char *drive_id;
-
- drive = G_DRIVE (l->data);
- drive_id = g_strdup_printf ("%p", drive);
- if (strcmp (drive_id, id) == 0)
- break;
-
- g_free (drive_id);
- }
- if (l == NULL)
- drive = NULL;
-
- if (drive == NULL)
- {
- DBusMessage *reply;
- reply = dbus_message_new_error (message,
- "org.gtk.Private.RemoteVolumeMonitor.NotFound",
- "The given drive was not found");
- dbus_connection_send (connection, reply, NULL);
- dbus_message_unref (reply);
- goto out;
- }
-
- g_drive_eject (drive,
- unmount_flags,
- NULL,
- (GAsyncReadyCallback) drive_eject_cb,
- dbus_message_ref (message));
-
- out:
- if (drives != NULL)
- {
- g_list_foreach (drives, (GFunc) g_object_unref, NULL);
- g_list_free (drives);
- }
- return ret;
-}
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-static void
-drive_poll_for_media_cb (GDrive *drive, GAsyncResult *result, DBusMessage *message)
-{
- GError *error;
- DBusMessage *reply;
-
- error = NULL;
- if (!g_drive_poll_for_media_finish (drive, result, &error))
- {
- reply = _dbus_message_new_from_gerror (message, error);
- g_error_free (error);
- }
- else
- {
- reply = dbus_message_new_method_return (message);
- }
-
- dbus_connection_send (connection, reply, NULL);
- dbus_message_unref (message);
- dbus_message_unref (reply);
-}
-
-static DBusHandlerResult
-handle_drive_poll_for_media (DBusConnection *connection, DBusMessage *message)
-{
- const char *id;
- DBusError dbus_error;
- GList *drives, *l;
- GDrive *drive;
- DBusHandlerResult ret;
-
- drive = NULL;
- ret = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- dbus_error_init (&dbus_error);
- if (!dbus_message_get_args (message, &dbus_error,
- DBUS_TYPE_STRING, &id,
- DBUS_TYPE_INVALID))
- {
- g_warning ("Error parsing args for DrivePollForMedia(): %s: %s", dbus_error.name, dbus_error.message);
- dbus_error_free (&dbus_error);
- goto out;
- }
-
- ret = DBUS_HANDLER_RESULT_HANDLED;
-
- drive = NULL;
- drives = g_volume_monitor_get_connected_drives (monitor);
- for (l = drives; l != NULL; l = l->next)
- {
- char *drive_id;
-
- drive = G_DRIVE (l->data);
- drive_id = g_strdup_printf ("%p", drive);
- if (strcmp (drive_id, id) == 0)
- break;
-
- g_free (drive_id);
- }
- if (l == NULL)
- drive = NULL;
-
- if (drive == NULL)
- {
- DBusMessage *reply;
- reply = dbus_message_new_error (message,
- "org.gtk.Private.RemoteVolumeMonitor.NotFound",
- "The given drive was not found");
- dbus_connection_send (connection, reply, NULL);
- dbus_message_unref (reply);
- goto out;
- }
-
- g_drive_poll_for_media (drive,
- NULL,
- (GAsyncReadyCallback) drive_poll_for_media_cb,
- dbus_message_ref (message));
-
- out:
- if (drives != NULL)
- {
- g_list_foreach (drives, (GFunc) g_object_unref, NULL);
- g_list_free (drives);
- }
- return ret;
-}
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-static DBusHandlerResult
-handle_is_supported (DBusConnection *connection, DBusMessage *message)
-{
- dbus_bool_t is_supported;
- DBusMessage *reply;
- DBusMessageIter iter;
-
- /* if monitor wasn't created on startup; try again */
- if (monitor == NULL)
- monitor_try_create ();
-
- is_supported = (monitor != NULL);
-
- reply = dbus_message_new_method_return (message);
- dbus_message_iter_init_append (reply, &iter);
- dbus_message_iter_append_basic (&iter, DBUS_TYPE_BOOLEAN, &is_supported);
- dbus_connection_send (connection, reply, NULL);
- dbus_message_unref (reply);
-
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-static DBusHandlerResult
-filter_function (DBusConnection *connection, DBusMessage *message, void *user_data)
-{
- DBusHandlerResult ret;
-
- ret = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- if (dbus_message_is_method_call (message, "org.gtk.Private.RemoteVolumeMonitor", "IsSupported") &&
- strcmp (dbus_message_get_path (message), "/") == 0)
- {
- ret = handle_is_supported (connection, message);
- }
- else
- {
- if (monitor != NULL)
- {
- if (dbus_message_is_method_call (message, "org.gtk.Private.RemoteVolumeMonitor", "List") &&
- strcmp (dbus_message_get_path (message), "/") == 0)
- ret = handle_list (connection, message);
-
- else if (dbus_message_is_method_call (message, "org.gtk.Private.RemoteVolumeMonitor", "MountUnmount") &&
- strcmp (dbus_message_get_path (message), "/") == 0)
- ret = handle_mount_unmount (connection, message);
-
- else if (dbus_message_is_method_call (message, "org.gtk.Private.RemoteVolumeMonitor", "VolumeMount") &&
- strcmp (dbus_message_get_path (message), "/") == 0)
- ret = handle_volume_mount (connection, message);
-
- else if (dbus_message_is_method_call (message, "org.gtk.Private.RemoteVolumeMonitor", "DriveEject") &&
- strcmp (dbus_message_get_path (message), "/") == 0)
- ret = handle_drive_eject (connection, message);
-
- else if (dbus_message_is_method_call (message, "org.gtk.Private.RemoteVolumeMonitor", "DrivePollForMedia") &&
- strcmp (dbus_message_get_path (message), "/") == 0)
- ret = handle_drive_poll_for_media (connection, message);
- }
- }
-
- return ret;
-}
-
-typedef void (*AppendFunc) (void *object, DBusMessageIter *iter);
-
-static void
-emit_signal (DBusConnection *connection, const char *signal_name, void *object, AppendFunc func)
-{
- char *id;
- DBusMessage *message;
- DBusMessageIter iter;
-
- id = g_strdup_printf ("%p", object);
-
- message = dbus_message_new_signal ("/", "org.gtk.Private.RemoteVolumeMonitor", signal_name);
- dbus_message_iter_init_append (message, &iter);
- dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &the_dbus_name);
- dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &id);
-
- func (object, &iter);
-
- dbus_connection_send (connection, message, NULL);
- dbus_message_unref (message);
-
-
- g_free (id);
-}
-
-static void
-drive_changed (GVolumeMonitor *monitor, GDrive *drive, DBusConnection *connection)
-{
- emit_signal (connection, "DriveChanged", drive, (AppendFunc) append_drive);
-}
-
-static void
-drive_connected (GVolumeMonitor *monitor, GDrive *drive, DBusConnection *connection)
-{
- emit_signal (connection, "DriveConnected", drive, (AppendFunc) append_drive);
-}
-
-static void
-drive_disconnected (GVolumeMonitor *monitor, GDrive *drive, DBusConnection *connection)
-{
- emit_signal (connection, "DriveDisconnected", drive, (AppendFunc) append_drive);
-}
-
-static void
-drive_eject_button (GVolumeMonitor *monitor, GDrive *drive, DBusConnection *connection)
-{
- g_warning ("drive eject button!");
- emit_signal (connection, "DriveEjectButton", drive, (AppendFunc) append_drive);
-}
-
-static void
-volume_changed (GVolumeMonitor *monitor, GVolume *volume, DBusConnection *connection)
-{
- emit_signal (connection, "VolumeChanged", volume, (AppendFunc) append_volume);
-}
-
-static void
-volume_added (GVolumeMonitor *monitor, GVolume *volume, DBusConnection *connection)
-{
- emit_signal (connection, "VolumeAdded", volume, (AppendFunc) append_volume);
-}
-
-static void
-volume_removed (GVolumeMonitor *monitor, GVolume *volume, DBusConnection *connection)
-{
- emit_signal (connection, "VolumeRemoved", volume, (AppendFunc) append_volume);
-}
-
-static void
-mount_changed (GVolumeMonitor *monitor, GMount *mount, DBusConnection *connection)
-{
- emit_signal (connection, "MountChanged", mount, (AppendFunc) append_mount);
-}
-
-static void
-mount_sniff_x_content_type (GMount *mount)
-{
- char **x_content_types;
- x_content_types = g_mount_guess_content_type_sync (mount, TRUE, NULL, NULL);
- g_object_set_data_full (G_OBJECT (mount), "x-content-types", x_content_types, (GDestroyNotify) g_strfreev);
-}
-
-static void
-mount_added (GVolumeMonitor *monitor, GMount *mount, DBusConnection *connection)
-{
- mount_sniff_x_content_type (mount);
- emit_signal (connection, "MountAdded", mount, (AppendFunc) append_mount);
-}
-
-static void
-mount_pre_unmount (GVolumeMonitor *monitor, GMount *mount, DBusConnection *connection)
-{
- emit_signal (connection, "MountPreUnmount", mount, (AppendFunc) append_mount);
-}
-
-static void
-mount_removed (GVolumeMonitor *monitor, GMount *mount, DBusConnection *connection)
-{
- emit_signal (connection, "MountRemoved", mount, (AppendFunc) append_mount);
-}
-
-void
-g_vfs_proxy_volume_monitor_daemon_init (void)
-{
- /* avoid loading the gio proxy module which will spawn ourselves
- *
- * see remote-volume-monitor-module.c
- */
- g_setenv ("GVFS_REMOTE_VOLUME_MONITOR_IGNORE", "1", TRUE);
-
- setlocale (LC_ALL, "");
-
- bindtextdomain (GETTEXT_PACKAGE, GVFS_LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- dbus_threads_init_default ();
- g_thread_init (NULL);
- g_type_init ();
-}
-
-
-static void
-monitor_try_create (void)
-{
- GVolumeMonitorClass *klass;
- GList *mounts;
- GList *l;
-
- monitor = NULL;
- klass = G_VOLUME_MONITOR_CLASS (g_type_class_ref (the_volume_monitor_type));
- if (klass == NULL)
- {
- g_warning ("Can't get class for type");
- goto fail;
- }
-
- if (klass->is_supported != NULL)
- {
- if (! (klass->is_supported ()))
- {
- g_warning ("monitor says it's not supported");
- goto fail;
- }
- }
-
- monitor = G_VOLUME_MONITOR (g_object_new (the_volume_monitor_type, NULL));
- if (monitor == NULL)
- {
- g_warning ("Cannot instantiate volume monitor");
- goto fail;
- }
-
- mounts = g_volume_monitor_get_mounts (monitor);
- for (l = mounts; l != NULL; l = l->next)
- mount_sniff_x_content_type (G_MOUNT (l->data));
- g_list_foreach (mounts, (GFunc) g_object_unref, NULL);
- g_list_free (mounts);
-
- fail:
- if (klass != NULL)
- g_type_class_unref (klass);
-}
-
-int
-g_vfs_proxy_volume_monitor_daemon_main (int argc,
- char *argv[],
- const char *dbus_name,
- GType volume_monitor_type)
-{
- int rc;
- int ret;
- GMainLoop *loop;
- DBusError dbus_error;
-
- ret = 1;
-
- loop = g_main_loop_new (NULL, FALSE);
-
- /* need to start up regardless of whether we can instantiate a
- * volume monitor; this is because the proxy will need to be able to
- * call IsSupported() on our D-Bus interface.
- */
-
- the_volume_monitor_type = volume_monitor_type;
- the_dbus_name = dbus_name;
-
- /* try and create the monitor */
- monitor_try_create ();
-
- dbus_error_init (&dbus_error);
- connection = dbus_bus_get (DBUS_BUS_SESSION, &dbus_error);
- if (dbus_error_is_set (&dbus_error))
- {
- g_warning ("Cannot connect to session bus: %s: %s", dbus_error.name, dbus_error.message);
- dbus_error_free (&dbus_error);
- goto out;
- }
-
- _g_dbus_connection_integrate_with_main (connection);
-
- rc = dbus_bus_request_name (connection, dbus_name, 0, &dbus_error);
- if (dbus_error_is_set (&dbus_error))
- {
- g_warning ("dbus_bus_request_name failed: %s: %s", dbus_error.name, dbus_error.message);
- dbus_error_free (&dbus_error);
- goto out;
- }
- if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
- {
- g_warning ("Cannot become primary owner");
- goto out;
- }
-
- if (!dbus_connection_add_filter (connection, filter_function, NULL, NULL))
- {
- g_warning ("Cannot add filter function");
- goto out;
- }
-
- if (monitor != NULL)
- {
- g_signal_connect (monitor, "drive-changed", (GCallback) drive_changed, connection);
- g_signal_connect (monitor, "drive-connected", (GCallback) drive_connected, connection);
- g_signal_connect (monitor, "drive-disconnected", (GCallback) drive_disconnected, connection);
- g_signal_connect (monitor, "drive-eject-button", (GCallback) drive_eject_button, connection);
-
- g_signal_connect (monitor, "volume-changed", (GCallback) volume_changed, connection);
- g_signal_connect (monitor, "volume-added", (GCallback) volume_added, connection);
- g_signal_connect (monitor, "volume-removed", (GCallback) volume_removed, connection);
-
- g_signal_connect (monitor, "mount-changed", (GCallback) mount_changed, connection);
- g_signal_connect (monitor, "mount-added", (GCallback) mount_added, connection);
- g_signal_connect (monitor, "mount-pre-unmount", (GCallback) mount_pre_unmount, connection);
- g_signal_connect (monitor, "mount-removed", (GCallback) mount_removed, connection);
- }
-
- g_main_loop_run (loop);
- g_main_loop_unref (loop);
-
- ret = 0;
-
-out:
- return ret;
-}
diff --git a/monitor/proxy/gvfsproxyvolumemonitordaemon.h b/monitor/proxy/gvfsproxyvolumemonitordaemon.h
deleted file mode 100644
index d6c767db..00000000
--- a/monitor/proxy/gvfsproxyvolumemonitordaemon.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#ifndef __G_VFS_PROXY_VOLUME_MONITOR_DAEMON_H__
-#define __G_VFS_PROXY_VOLUME_MONITOR_DAEMON_H__
-
-#include <gio/gio.h>
-
-void g_vfs_proxy_volume_monitor_daemon_init (void);
-int g_vfs_proxy_volume_monitor_daemon_main (int argc,
- char *argv[],
- const char *dbus_name,
- GType volume_monitor_type);
-
-#endif
diff --git a/monitor/proxy/remote-volume-monitor-module.c b/monitor/proxy/remote-volume-monitor-module.c
deleted file mode 100644
index f675bc41..00000000
--- a/monitor/proxy/remote-volume-monitor-module.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gmodule.h>
-#include <gio/gio.h>
-
-#include "gproxyvolumemonitor.h"
-#include "gproxyvolume.h"
-#include "gproxymount.h"
-#include "gproxydrive.h"
-
-void
-g_io_module_load (GIOModule *module)
-{
- /* see gvfsproxyvolumemonitor.c:g_vfs_proxy_volume_monitor_daemon_init() */
- if (g_getenv ("GVFS_REMOTE_VOLUME_MONITOR_IGNORE") != NULL)
- goto out;
-
- bindtextdomain (GETTEXT_PACKAGE, GVFS_LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-
- if (!g_proxy_volume_monitor_setup_session_bus_connection ())
- goto out;
-
- g_proxy_drive_register (module);
- g_proxy_mount_register (module);
- g_proxy_volume_register (module);
- g_proxy_volume_monitor_register (module);
-out:
- ;
- }
-
-void
-g_io_module_unload (GIOModule *module)
-{
- if (g_getenv ("GVFS_REMOTE_VOLUME_MONITOR_IGNORE") != NULL)
- goto out;
-
- g_proxy_volume_monitor_teardown_session_bus_connection ();
-
-out:
- ;
-}
diff --git a/po/.gitignore b/po/.gitignore
deleted file mode 100644
index 6c59253f..00000000
--- a/po/.gitignore
+++ /dev/null
@@ -1,14 +0,0 @@
-*.gmo
-*.mo
-*.pot
-Makefile
-Makefile.in
-Makefile.in.in
-POTFILES
-po2tbl.sed
-po2tbl.sed.in
-cat-id-tbl.c
-stamp-cat-id
-stamp-it
-messages
-missing
diff --git a/po/ChangeLog b/po/ChangeLog
deleted file mode 100644
index 18bea32c..00000000
--- a/po/ChangeLog
+++ /dev/null
@@ -1,1290 +0,0 @@
-=== gvfs 0.99.8 ===
-
-2008-09-15 Gil Forcada <gforcada@gnome.org>
-
- * ca.po: Updated Catalan translation.
-
-2008-09-15 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Khaled Hosny.
-
-2008-09-14 Alexander Shopov <ash@contact.bg>
-
- * bg.po: Updated Bulgarian translation by
- Alexander Shopov <ash@contact.bg>
-
-2008-09-14 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Missing word in Italian translation.
-
-2008-09-14 Goran Rakić <grakic@devbase.net>
-
- * LINGUAS, sr.po, sr@latin.po: Added Serbian translation..
-
-2008-09-14 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Little fix in Italian translation.
-
-2008-09-14 Gintautas Miliauskas <gintas@akl.lt>
-
- * lt.po: Updated Lithuanian translation.
-
-2008-09-14 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation.
-
-2008-09-11 I. Felix <ifelix@redhat.com>
-
- * ta.po: Tamil Translation updated by Tirumurthi Vasudevan
-
-2008-09-11 Sandeep Shedmake <sshedmak@redhat.com>
-
- * mr.po: Updated Marathi Translations.
-
-2008-09-10 Krishnababu K <kkrothap@redhat.com>
-
- * te.po: Newly added Telugu Translation.
-
-2008-09-08 Petr Kovar <pknbe@volny.cz>
-
- * cs.po: Updated Czech translation.
-
-2008-09-07 Duarte Loreto <happyguy_pt@hotmail.com>
-
- * pt.po: Updated Portuguese translation.
-
-2008-09-07 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * nl.po: Updated Dutch translation by Wouter Bolsterlee.
-
-2008-09-06 Philip Withnall <philip@tecnocode.co.uk>
-
- * en_GB.po: Updated British English translation.
-
-2008-09-06 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation.
-
-2008-09-06 Funda Wang <fundawang@gmail.com>
-
- * zh_CN.po: Updated zh_CN translation.
-
-2008-09-05 Tomasz Dominikowski <tdominikowski@aviary.pl>
-
- * pl.po: Updated Polish translation
-
-2008-09-05 Sweta Kothari <swkothar@redhat.com>
-
- * gu.po: Committed Gujarati Translation.
-
-2008-09-04 Kjartan Maraas <kmaraas@gnome.org>
-
- * nb.po: Updated Norwegian bokmål translation.
-
-=== gvfs 0.99.6 ===
-
-2008-09-01 Hans Petter Jansson <hpj@novell.com>
-
- * POTFILES.in: Remove dead file gvfsjobupload.c and add replacement
- gvfsjobpull.c and gvfsjobpush.c.
-
-2008-09-01 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-2008-08-30 Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
-
- * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
- * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
-
-2008-08-28 Seán de Búrca <sdeburca@svn.gnome.org>
-
- * ga.po: Added Irish translation.
- * LINGUAS: Added Irish.
-
-2008-08-28 Hendrik Richter <hendrikr@gnome.org>
-
- * de.po: Updated German translation.
-
-2008-08-28 Hendrik Richter <hendrikr@gnome.org>
-
- * de.po: Updated German translation.
-
-2008-08-27 Jovan Naumovski <jovan@lugola.net>
-
- * mk.po: Updated Macedonian translation.
-
-2008-08-27 Kjartan Maraas <kmaraas@gnome.org>
-
- * nb.po: Updated Norwegian bokmål translation.
-
-2008-08-26 Yair Hershkovitz <yairhr@gmail.com>
-
- * he.po: Updated Hebrew translation by Mark Krapivner.
-
-2008-08-25 Robert-André Mauchin <zebob.m@pengzone.org>
-
- * fr.po: Updated French translation.
-
-2008-08-24 Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
-
- * vi.po: Updated Vietnamese translation
-
-2008-08-24 Takeshi AIHANA <takeshi.aihana@gmail.com>
-
- * ja.po: Updated Japanese translation.
-
-2008-08-24 Theppitak Karoonboonyanan <thep@linux.thai.net>
-
- * th.po: Updated Thai translation.
-
-2008-08-23 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * eu.po: Updated Basque translation.
-
-2008-08-23 Priit Laes <plaes at svn dot gnome dot org>
-
- * et.po: Translation updated by Ivar Smolin
-
-2008-08-22 Og Maciel <ogmaciel@gnome.org>
-
- * pt_BR.po: Updated Brazilian Portuguese translation by Vladimir Melo.
-
-2008-08-22 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-08-21 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
-
- gl.po: Updated Galician translation
-
-2008-08-21 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * nl.po: Updated Dutch translation by Wouter Bolsterlee.
-
-=== gvfs 0.99.5 ===
-
-2008-08-16 Ihar Hrachyshka <booxter@lacinka.org>
-
- * be@latin.po: Updated Belarusian Latin translation by Ihar Hrachyshka.
-
-2008-08-16 Priit Laes <plaes at svn dot gnome dot org>
-
- * et.po: Translation updated by Ivar Smolin
-
-2008-08-16 Theppitak Karoonboonyanan <thep@linux.thai.net>
-
- * th.po: Updated Thai translation.
-
-2008-08-15 Og Maciel <ogmaciel@gnome.org>
- * pt_BR.po: Updated translation by Vladimir Melo.
-
-2008-08-15 Tomasz Dominikowski <tdominikowski@aviary.pl>
- * pl.po: Updated Polish translation.
-
-2008-08-15 Praveen Arimbrathodiyil <pravi.a@gmail.com>
-
- * ml.po: Malayalam translation update by Harivishnu
-
-2008-08-14 Duarte Loreto <happyguy_pt@hotmail.com>
-
- * pt.po: Updated Portuguese translation.
-
-2008-08-13 Ilkka Tuohela <hile@iki.fi>
-
- * fi.po: Updated Finnish translation.
-
-2008-08-12 Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
-
- * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
- * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
-
-2008-08-09 Petr Kovar <pknbe@volny.cz>
-
- * cs.po: Updated Czech translation.
-
-2008-08-08 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
-
- gl.po: Updated Galician translation
-
-2008-08-07 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-08-07 Takeshi AIHANA <takeshi.aihana@gmail.com>
-
- * ja.po: Fixed a typo.
-
-2008-08-06 Yair Hershkovitz <yairhr@gmail.com>
-
- * he.po: Updated Hebrew translation.
-
-2008-08-06 Sweta Kothari <swkothar@redhat.com>
-
- * gu.po: Added Gujarati Translation.
-
-2008-08-06 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Khaled Hosny.
-
-2008-08-05 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-=== gvfs 0.99.4 ===
-
-2008-08-04 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated italian translation.
-
-2008-08-03 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
-
- * gl.po: Updated Galician translation
-
-2008-08-03 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-08-01 Takeshi AIHANA <takeshi.aihana@gmail.com>
-
- * ja.po: Updated Japanese translation.
-
-2008-07-29 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Khaled Hosny.
-
-2008-07-25 Leonardo Ferreira Fontenelle <leonardof@gnome.org>
-
- * pt_BR.po: Terminology improvements by Vladimir Melo.
-
-=== gvfs 0.99.2 ===
-
-2008-07-08 David Zeuthen <davidz@redhat.com>
-
- * POTFILES.in: hal/*.c moved to monitor/hal/*.c
-
-2008-06-14 Andre Klapper <a9016009@gmx.de>
-
- * POTFILES.in: added programs/gvfs-mkdir.c.
-
-2008-06-11 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Khaled Hosny.
-
-2008-06-05 Clytie Siddall <clytie@riverland.net.au>
-
- * vi.po: Updated Vietnamese translation.
-
-2008-06-05 Priit Laes <plaes at svn dot gnome dot org>
-
- * et.po: Translation updated by Ivar Smolin
-
-=== gvfs 0.99.1 ===
-
-2008-06-02 Clytie Siddall <clytie@riverland.net.au>
-
- * vi.po: Added Vietnamese translation (and in LINGUAS).
-
-2008-05-22 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Khaled Hosny.
-
-2008-05-22 Priit Laes <plaes at svn dot gnome dot org>
-
- * et.po: Translation updated by Ivar Smolin
-
-2008-05-19 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Djihed Afifi.
-
-2008-05-08 Alexander Shopov <ash@contact.bg>
-
- * LINGUAS: Added bg (Bulgarian)
-
-2008-04-27 Yair Hershkovitz <yairhr@gmail.com>
-
- * he.po: Updated Hebrew translation.
-
-2008-04-21 Kjartan Maraas <kmaraas@gnome.org>
-
- * POTFILES.in: Add hal-utils.c
- * nb.po: Updated Norwegian bokmål translation.
-
-2008-04-10 Yair Hershkovitz <yairhr@gmail.com>
-
- * he.po: Updated Hebrew translation.
-
-2008-04-01 Priit Laes <plaes at svn dot gnome dot org>
-
- * et.po: Translation updated by Ivar Smolin
-
-2008-03-31 Baris Cicek <baris@teamforce.name.tr>
-
- * tr.po: Updated Turkish translation
-
-=== gvfs 0.2.2 ===
-
-2008-03-31 Eskild Hustvedt <eskildh@gnome.org>
-
- * nn.po: Added Norwegian Nynorsk translation
-
-2008-03-28 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-2008-03-20 Erdal Ronahi <erdal dot ronahi at gmail dot com>
-
- * LINGUAS: Added ku to list of languages
- * ku.po: Added initial Kurdish translations
-
-2008-03-12 Alexander Larsson <alexl@redhat.com>
-
- * POTFILES.in:
- Added gvfsbackenddaemon.c
-
-2008-03-10 Stéphane Raimbault <stephane.raimbault@gmail.com>
-
- * fr.po: Updated French translation.
-
-2008-03-10 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
-
- * gl.po: Updated Galician Translation.
-
-=== gvfs 0.2.0.1 ===
-
-2008-03-10 Kostas Papadimas <pkst@gnome.org>
-
- * el.po: Updated Greek translation
-
-2008-03-10 Gabor Kelemen <kelemeng@gnome.hu>
-
- * hu.po: Translation updated
-
-2008-03-09 Kenneth Nielsen <k.nielsen81@gmail.com>
-
- * LUNGUAS: Added da to list of languages
- * da.po: Added Danish translation
-
-2008-03-09 Gabor Kelemen <kelemeng@gnome.hu>
-
- * hu.po: Translation updated
-
-2008-03-09 Marcel Telka <marcel@telka.sk>
-
- * sk.po: Added Slovak translation by Pavol Šimo.
- * LINGUAS: Added sk (Slovak).
-
-2008-03-09 Kjartan Maraas <kmaraas@gnome.org>
-
- * nb.po: Updated Norwegian bokmål translation.
-
-2008-03-09 Stéphane Raimbault <stephane.raimbault@gmail.com>
-
- * fr.po: Updated French translation.
-
-2008-03-09 Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
-
- * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
- * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
-
-2008-03-09 Artur Flinta <aflinta@gmail.com>
-
- * pl.po: Updated Polish translation by GNOME PL Team.
-
-2008-03-09 Petr Kovar <pknbe@volny.cz>
-
- * cs.po: Updated Czech translation.
-
-2008-03-09 Gintautas Miliauskas <gintas@akl.lt>
-
- * lt.po: Updated Lithuanian translation.
-
-2008-03-08 Wadim Dziedzic <wadimd@svn.gnome.org>
-
- * pl.po: Updated polish translation
-
-2008-03-08 Simos Xenitellis <simos@gnome.org>
-
- * el.po: Added Greek translation.
- * LINGUAS: Added (el) Greek.
-
-2008-03-8 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Djihed Afifi.
-
-2008-03-08 Runa Bhattacharjee <runab@fedoraproject.org>
-
- * bn_IN.po: Updated Bengali India Translations by Sankarshan Mukhopdhyay
-
-2008-03-08 Takeshi AIHANA <takeshi.aihana@gmail.com>
-
- * ja.po: Updated Japanese translation.
-
-2008-03-08 Maxim Dziumanenko <dziumanenko@gmail.com>
-
- * uk.po: Added Ukrainian translation.
- * LINGUAS: Added Ukrainian (uk) to the list of languages
-
-2008-03-07 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-2008-03-07 Arangel Angov <arangel@linux.net.mk>
-
- * mk.po: Updated Macedonian translation.
-
-2008-03-07 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation.
-
-2008-03-07 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-03-07 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * eu.po: Updated Basque translation.
-
-2008-03-07 Ihar Hrachyshka <booxter@lacinka.org>
-
- * be@latin.po: Updated Belarusian Latin translation.
-
-2008-03-07 Changwoo Ryu <cwryu@debian.org>
-
- * ko.po: Updated Korean translation by Young-Ho Cha.
-
-2008-03-07 Gintautas Miliauskas <gintas@akl.lt>
-
- * lt.po: Updated Lithuanian translation.
-
-2008-03-07 Theppitak Karoonboonyanan <thep@linux.thai.net>
-
- * th.po: Updated Thai translation.
-
-2008-03-07 Gil Forcada <gforcada@gnome.org>
-
- * ca.po: Updated Catalan translation.
-
-2008-03-06 Duarte Loreto <happyguy_pt@hotmail.com>
-
- * pt.po: Updated Portuguese translation.
-
-2008-03-06 Philip Withnall <pwithnall@svn.gnome.org>
-
- * en_GB.po: Updated British English translation.
-
-2008-03-06 Marcel Telka <marcel@telka.sk>
-
- * POTFILES.in: Added missing files.
-
-2008-03-06 Hendrik Brandt <heb@gnome-de.org>
-
- * de.po: Updated German translation.
-
-2008-03-06 I. Felix <ifelix@svn.gnome.org>
-
- * ta.po: Tamil Translation updated by Tirumurthi Vasudevan
-
-2008-03-06 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * nl.po: Updated Dutch translation by Wouter Bolsterlee.
-
-2008-03-06 Runa Bhattacharjee <runab@fedoraproject.org>
-
- * bn_IN: Correction of header section for plural form
-
-2008-03-05 Runa Bhattacharjee <runab@fedoraproject.org>
-
- * bn_IN.po: Added Bengali India Translations by Sankarshan Mukhopadhyay
- * LINGUAS: Added Bengali India (bn_IN) to the list of languages
-
-2008-03-05 Takeshi AIHANA <takeshi.aihana@gmail.com>
-
- * ja.po: Updated Japanese translation.
-
-2008-03-05 Hendrik Brandt <heb@gnome-de.org>
-
- * de.po: Updated German translation.
-
-2008-03-05 Rahul Bhalerao <b.rahul.pm@gmail.com>
-
- * mr.po: Updated Marathi Translations by Sandeep Shedmake.
-
-2008-03-04 Gil Forcada <gforcada@gnome.org>
-
- * ca.po: Updated Catalan translation.
-
-=== gvfs 0.1.11 ===
-=== gvfs 0.1.10 ===
-
-2008-03-04 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * nl.po: Updated Dutch translation by Wouter Bolsterlee.
-
-2008-03-04 Rajesh Ranjan <rajeshkajha@yahoo.com>
-
- * hi.po: Added Hindi translation.
-
-=== gvfs 0.1.9 ===
-
-2008-03-04 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation.
-
-2008-03-03 Philip Withnall <pwithnall@svn.gnome.org>
-
- * en_GB.po: Updated British English translation.
-
-2008-03-03 Rahul Bhalerao <b.rahul.pm@gmail.com>
-
- * mr.po: Updated Marathi translations from Sandeep Shedmake.
-
-2008-03-03 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
-
- * gl.po: Updated Galician Translation.
-
-2008-03-03 Leonid Kanter <leon@asplinux.ru>
-
- * ru.po: Updated Russian translation
-
-2008-03-03 Theppitak Karoonboonyanan <thep@linux.thai.net>
-
- * th.po: Updated Thai translation.
-
-2008-03-03 Kjartan Maraas <kmaraas@gnome.org>
-
- * nb.po: Updated Norwegian bokmål translation.
-
-2008-03-03 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * eu.po: Updated Basque translation.
-
-2008-03-03 Stéphane Raimbault <stephane.raimbault@gmail.com>
-
- * fr.po: Updated French translation by Robert-André Mauchin and
- Stéphane Raimbault.
-
-2008-03-03 Ihar Hrachyshka <booxter@lacinka.org>
-
- * be@latin.po: Updated Belarusian Latin translation.
-
-2008-03-03 Duarte Loreto <happyguy_pt@hotmail.com>
-
- * pt.po: Updated Portuguese translation.
-
-2008-03-02 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-03-02 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation.
-
-2008-03-02 Philip Withnall <pwithnall@svn.gnome.org>
-
- * LINGUAS: Added en_GB (British English).
- * en_GB.po: Added British English translation.
-
-2008-03-02 Petr Kovar <pknbe@volny.cz>
-
- * cs.po: Updated Czech translation.
-
-2008-03-02 Gintautas Miliauskas <gintas@akl.lt>
-
- * LINGUAS: Added Lithuanian (lt).
- * lt.po: Updated Lithuanian translation.
-
-2008-03-02 Arangel Angov <arangel@linux.net.mk>
-
- * mk.po: Updated Macedonian translation.
-
-2008-03-01 Hendrik Brandt <heb@gnome-de.org>
-
- * de.po: Updated German translation.
-
-2008-03-01 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-03-01 Jonh Wendell <jwendell@gnome.org>
-
- * pt_BR: Updated Brazilian Portuguese translation.
-
-2008-03-01 Artur Flinta <aflinta@gmail.com>
-
- * pl.po: Updated Polish translation by GNOME PL Team.
-
-2008-03-01 Artur Flinta <aflinta@gmail.com>
-
- * pl.po: Updated Polish translation by GNOME PL Team.
-
-2008-03-01 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-2008-03-01 Ilkka Tuohela <hile@iki.fi>
-
- * fi.po: Updated Finnish translation.
-
-2008-02-29 Takeshi AIHANA <takeshi.aihana@gmail.com>
-
- * ja.po: Updated Japanese translation.
-
-2008-02-29 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation.
-
-2008-02-29 Ani Peter <peter.ani@gmail.com>
-
- * ml.po: Updated Malayalam Translation
- * LINGUAS: Added Malayalam (ml)
-
-2008-02-29 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * eu.po: Updated Basque translation.
-
-2008-02-29 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-02-29 Theppitak Karoonboonyanan <thep@linux.thai.net>
-
- * th.po: Updated Thai translation.
-
-2008-02-29 Changwoo Ryu <cwryu@debian.org>
-
- * ko.po: Updated Korean translation by Young-Ho Cha.
-
-2008-02-29 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * nl.po: Updated Dutch translation by Wouter Bolsterlee.
-
-2008-02-28 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-02-28 Gil Forcada <gforcada@gnome.org>
-
- * ca.po: Updated Catalan translation.
-
-2008-02-28 Hendrik Brandt <heb@gnome-de.org>
-
- * de.po: Updated German translation.
-
-2008-02-28 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-2008-02-28 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
-
- * gl.po: Updated Galician Translation.
-
-2008-02-28 Jonh Wendell <jwendell@gnome.org>
-
- * pt_BR: Updated Brazilian Portuguese translation.
-
-2008-02-28 Ilkka Tuohela <hile@iki.fi>
-
- * fi.po: Updated Finnish translation.
-
-2008-02-27 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * nl.po: Updated Dutch translation by Wouter Bolsterlee.
-
-2008-02-27 Stéphane Raimbault <stephane.raimbault@gmail.com>
-
- * fr.po: Updated French translation.
-
-2008-02-27 Bastien Nocera <hadess@hadess.net>
-
- * POTFILES.in: update for the obexftp backend, no
- new strings though
-
-2008-02-27 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * eu.po: Updated Basque translation.
-
-2008-02-27 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation.
-
-2008-02-27 Arangel Angov <arangel@linux.net.mk>
-
- * mk.po: Updated Macedonian translation.
-
-2008-02-26 Jonh Wendell <jwendell@gnome.org>
-
- * pt_BR: Updated Brazilian Portuguese translation.
-
-2008-02-26 Kjartan Maraas <kmaraas@gnome.org>
-
- * nb.po: Updated Norwegian bokmål translation.
-
-2008-02-26 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Djihed Afifi.
-
-2008-02-26 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
-
- * gl.po: Updated Galician Translation.
-
-2008-02-26 Theppitak Karoonboonyanan <thep@linux.thai.net>
-
- * th.po: Updated Thai translation.
-
-2008-02-26 Ilkka Tuohela <hile@iki.fi>
-
- * fi.po: Updated Finnish translation.
-
-2008-02-26 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-=== gvfs 0.1.8 ===
-
-2008-02-25 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-02-25 Andre Klapper <a9016009@gmx.de>
-
- * POTFILES.in: added missing daemon/gvfsbackendgphoto2.c.
-
-2008-02-25 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * nl.po: Updated Dutch translation by Wouter Bolsterlee.
-
-2008-02-25 Hendrik Brandt <heb@gnome-de.org>
-
- * de.po: Updated German translation.
-
-2008-02-25 Duarte Loreto <happyguy_pt@hotmail.com>
-
- * pt.po: Updated Portuguese translation.
-
-2008-02-25 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-2008-02-25 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-02-24 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
-
- * gl.po: Updated Galician Translation.
-
-2008-02-24 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * nl.po: Updated Dutch translation by Wouter Bolsterlee.
-
-2008-02-24 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * POTFILES.in: Add missing file to POTFILES.in. This
- string freeze break was approved by the Gnome i18n team.
-
-2008-02-23 Hendrik Brandt <heb@gnome-de.org>
-
- * de.po: Updated German translation.
-
-2008-02-23 Stéphane Raimbault <stephane.raimbault@gmail.com>
-
- * fr.po: Updated French translation by Robert-André Mauchin.
-
-2008-02-22 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-2008-02-23 Theppitak Karoonboonyanan <thep@linux.thai.net>
-
- * th.po: Updated Thai translation.
-
-2008-02-22 Duarte Loreto <happyguy_pt@hotmail.com>
-
- * pt.po: Updated Portuguese translation.
-
-2008-02-23 Ihar Hrachyshka <booxter@lacinka.org>
-
- * be@latin.po: Updated Belarusian Latin translation.
-
-2008-02-22 Artur Flinta <aflinta@gmail.com>
-
- * pl.po: Updated Polish translation by GNOME PL Team.
-
-2008-02-22 Hendrik Brandt <heb@gnome-de.org>
-
- * de.po: Updated German translation.
-
-2008-02-22 Ilkka Tuohela <hile@iki.fi>
-
- * fi.po: Updated Finnish translation.
-
-2008-02-22 Takeshi AIHANA <takeshi.aihana@gmail.com>
-
- * LINGUAS: Added 'ja' (Japanese).
- * ja.po: Added Japanese translation.
-
-2008-02-22 Jonh Wendell <jwendell@gnome.org>
-
- * pt_BR: Updated Brazilian Portuguese translation.
-
-2008-02-22 Jonh Wendell <jwendell@gnome.org>
-
- * POTFILES.in: Added daemon/gvfsbackendnetwork.c
- * po/: Added some files to the svn ignore list
-
-2008-02-22 Ilkka Tuohela <hile@iki.fi>
-
- * fi.po: Updated Finnish translation.
-
-2008-02-22 Amanpreet Singh Alam <apreet.alam@gmail.com>
-
- * pa.po: Punjabi Translation Added
- * LINGUAS: 'pa' Added to list
-
-2008-02-22 Arangel Angov <arangel@linux.net.mk>
-
- * mk.po: Updated Macedonian translation.
-
-2008-02-21 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * eu.po: Updated Basque translation.
-
-2008-02-21 Ihar Hrachyshka <booxter@lacinka.org>
-
- * be@latin.po: Updated Belarusian Latin translation.
-
-2008-02-21 Theppitak Karoonboonyanan <thep@linux.thai.net>
-
- * LINGUAS: Added th (Thai).
- * th.po: Added Thai translation.
-
-2008-02-21 Gil Forcada <gforcada@gnome.org>
-
- * ca.po: Updated Catalan translation.
-
-2008-02-20 Duarte Loreto <happyguy_pt@hotmail.com>
-
- * pt.po: Updated Portuguese translation.
-
-2008-02-20 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-2008-02-20 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-02-20 Changwoo Ryu <cwryu@debian.org>
-
- * ko.po: Added Korean translation by Young-Ho Cha.
- * LINGUAS: Added ko (Korean)
-
-2008-02-19 Baris Cicek <baris@teamforce.name.tr>
-
- * tr.po: Added Turkish translation from Anil Karadag
- * LINGUAS: Added tr (Turkish)
-
-2008-02-11 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation, fixed typos thanks to Ignacio
- Casal Quinteiro.
-
-2008-02-19 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
-
- * gl.po: Updated Galician Translation.
-
-2008-02-18 Kjartan Maraas <kmaraas@gnome.org>
-
- * nb.po: Updated Norwegian bokmål translation.
-
-2008-02-18 Kjartan Maraas <kmaraas@gnome.org>
-
- * nb.po: Updated Norwegian bokmål translation.
-
-2008-02-18 Ilkka Tuohela <hile@iki.fi>
-
- * fi.po: Updated Finnish translation.
-
-2008-02-18 Ihar Hrachyshka <booxter@lacinka.org>
-
- * be@latin.po: Added Belarusian Latin translation.
- * LINGUAS: Added be@latin.
-
-2008-02-17 Wouter Bolsterlee <wbolster@svn.gnome.org>
-
- * nl.po: Added Dutch translation by Wouter Bolsterlee.
-
-2008-02-17 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Djihed Afifi.
-
-2008-02-17 Gil Forcada <gforcada@gnome.org>
-
- * ca.po: Updated Catalan translation.
-
-2008-02-16 Petr Kovar <pknbe@volny.cz>
-
- * cs.po: Added Czech translation.
- * LINGUAS: Added cs.
-
-2008-02-16 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * eu.po: Updated Basque translation.
-
-2008-02-15 Hendrik Brandt <heb@gnome-de.org>
-
- * de.po: Updated German translation.
-
-2008-02-15 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-2008-02-14 Rahul Bhalerao <b.rahul.pm@gmail.com>
-
- * mr.po: Added Marathi translations by Sandeep Shedmake.
- * LINGUAS: Added an entry for Marathi (mr).
-
-2008-02-14 Duarte Loreto <happyguy_pt@hotmail.com>
-
- * pt.po: Updated Portuguese translation.
-
-2008-02-13 Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
-
- * LINGUAS: add zh_HK zh_TW
- * zh_HK.po: Added Traditional Chinese translation(Hong Kong).
- * zh_TW.po: Added Traditional Chinese translation(Taiwan).
-
-2008-02-13 Ilkka Tuohela <hile@iki.fi>
-
- * fi.po: Added Finnish translation.
-
-2008-02-12 Artur Flinta <aflinta@svn.gnome.org>
-
- * pl.po: Updated Polish translation by GNOME PL Team.
-
-2008-02-11 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-=== gvfs 0.1.7 ===
-
-2008-02-11 Leonid Kanter <leon@asplinux.ru>
-
- * ru.po: Updated Rusian translation
-
-2008-02-11 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-02-11 Kjartan Maraas <kmaraas@gnome.org>
-
- * nb.po: Updated Norwegian bokmål translation.
-
-2008-02-10 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-2008-02-10 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-02-09 Duarte Loreto <happyguy_pt@hotmail.com>
-
- * pt.po: Updated Portuguese translation.
-
-2008-02-09 Hendrik Brandt <heb@gnome-de.org>
-
- * de.po: Updated German translation.
-
-2008-02-09 Gabor Kelemen <kelemeng@gnome.hu>
-
- * hu.po: Translation added
- * LINGUAS: hu added
-
-2008-02-08 Artur Flinta <aflinta@svn.gnome.org>
-
- * pl.po: Updated Polish translation by GNOME PL Team.
-
-2008-02-08 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * eu.po: Updated Basque translation.
-
-2008-02-07 Artur Flinta <aflinta@svn.gnome.org>
-
- * pl.po: Updated Polish translation by GNOME PL Team.
-
-2008-02-07 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
-
- * LINGUAS: Added gl.
- * gl.po: Added Galician Translation.
-
-2008-02-05 Stéphane Raimbault <stephane.raimbault@gmail.com>
-
- * LINGUAS: Added fr.
- * fr.po: Added French translation by Claude Paroz.
-
-2008-02-04 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation
-
-2008-02-04 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-02-02 Yair Hershkovitz <yairhr@gmail.com>
-
- * he.po, LINGUAS: Added Hebrew translation.
-
-2008-02-02 Hendrik Brandt <heb@gnome-de.org>
-
- * de.po: Updated German translation.
-
-2008-01-31 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Khaled Hosny.
-
-2008-01-31 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Khaled Hosny.
-
-2008-01-29 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-01-29 Alexander Larsson <alexl@redhat.com>
-
- * POTFILES.in:
- Added gvfs-open.c
-
-2008-01-29 Jonh Wendell <jwendell@gnome.org>
-
- * LINGUAS, pt_BR.po: Brazilian Portuguese translation by Enrico Nicoletto.
-
-=== gvfs 0.1.6 ===
-
-2008-01-29 Jovan Naumovski <jovan@lugola.net>
-
- * mk.po: Added Macedonian translation.
-
-2008-01-28 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Updated Swedish translation.
-
-=== gvfs 0.1.5 ===
-
-2008-01-28 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-01-27 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Updated Arabic Translation by Khaled Hosny.
-
-2008-01-27 Kjartan Maraas <kmaraas@gnome.org>
-
- * nb.po: Updated Norwegian bokmål translation.
-
-2008-01-26 Duarte Loreto <happyguy_pt@hotmail.com>
-
- * pt.po: Added Portuguese translation.
- * LINGUAS: Added Portuguese (pt) to list.
-
-2008-01-26 Matej Urbančič <mateju@svn.gnome.org>
-
- * sl.po: Added Slovenian translation
- * LINGUAS: Added sl
-
-2008-01-25 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * eu.po: Updated Basque translation.
-
-2008-01-25 I. Felix <ifelix@svn.gnome.org>
-
- * ta.po: Tamil Translation updated by Thangamani Arul
- * LINGUAS: Added Tamil (ta) to The List of Languages.
-
-2008-01-24 Alexander Larsson <alexl@redhat.com>
-
- * LINGUAS: Added.
-
-2008-01-24 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation.
-
-2008-01-24 Gil Forcada <gforcada@gnome.org>
-
- * ca.po: Fixed translation to pass msgfmt -cv.
-
-2008-01-22 Gil Forcada <gforcada@gnome.org>
-
- * ca.po: Added Catalan translation with lots of help from David Planella.
-
-2008-01-22 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-01-22 Johannes Schmid <jhs@gnome.org>
-
- * de.po: Updated German translation
-
-2008-01-21 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-=== gvfs 0.1.4 ===
-2008-01-21 Alexander Larsson <alexl@redhat.com>
-
- * POTFILES.in:
- Add new files
-
-2008-01-18 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-01-18 Luca Ferretti <elle.uca@libero.it>
-
- * POTFILES.in: Added programs/gvfs-cat.c
-
-2008-01-17 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-01-16 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-01-16 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * eu.po: Updated Basque translation.
-
-2008-01-15 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation.
-
-2008-01-15 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-01-15 Daniel Nylander <po@danielnylander.se>
-
- * sv.po: Added Swedish translation.
-
-2008-01-14 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-=== gvfs 0.1.2 ===
-
-2008-01-14 Kjartan Maraas <kmaraas@gnome.org>
-
- * POTFILES.in: Add missing file.
- * nb.po: Updated Norwegian bokmål translation.
-
-2008-01-13 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-01-13 Andre Klapper <a9016009@gmx.de>
-
- * de.po: Added German translation.
-
-2008-01-12 Leonid Kanter <leon@asplinux.ru>
-
- * ru.po: Added Russian translation
-
-2008-01-12 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation.
-
-2008-01-12 Luca Ferretti <elle.uca@libero.it>
-
- * POTFILES.in: Added new gvfsbackendhttp.c
-
-2008-01-12 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Updated Spanish translation
-
-2008-01-11 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
-
- * eu.po: Added Basque translation.
-
-2008-01-11 Jorge Gonzalez <jorgegonz@svn.gnome.org>
-
- * es.po: Added initial Spanish translation
- * LINGUAS: Added es.
-
-2008-01-11 Kjartan Maraas <kmaraas@gnome.org>
-
- * POTFILES.in: Add missing file.
- * nb.po: Updated Norwegian bokmål translation.
-
-2008-01-10 Djihed Afifi <djihed@gmail.com>
-
- * ar.po: Added Arabic Translation.
- * LINGUAS: Added ar.
-
-2008-01-09 Luca Ferretti <elle.uca@libero.it>
-
- * Makefile.in.in:
-
- Removed, autogenerated using intltool by now.
-
- * POTFILES.in:
-
- Added new missing files for computer:// backend.
-
-=== gvfs 0.1.1 ===
-
-2007-12-27 Alexander Larsson <alexl@redhat.com>
-
- * POTFILES.in:
- Remove intltool option, since we don't use intltool.
-
-2007-12-21 Kjartan Maraas <kmaraas@gnome.org>
-
- * POTFILES.in: Add missing file.
- * nb.po: Add Norwegian bokmål translation.
-
-=== gvfs 0.1.0 ===
-
-2007-12-20 Alexander Larsson <alexl@redhat.com>
-
- * Makefile.in.in: Added.
- * POTFILES.in:
- * it.po:
- Add Makefile.in.in
-
-2007-12-18 Luca Ferretti <elle.uca@libero.it>
-
- * POTFILES.in: revert previous commit: gvfs is not using
- intltool. The question is: should it???
-
-2007-12-18 Luca Ferretti <elle.uca@libero.it>
-
- * POTFILES.in: prepend "[encoding: UTF-8]" to make
- intltool-update happy.
-
-2007-12-18 Luca Ferretti <elle.uca@libero.it>
-
- * POTFILES.in: remove duplicate entries and add missing files
- [recentrly added: daemon/gvfsjobunmount.c hal/ghaldrive.c
- hal/ghalmount.c hal/ghalvolume.c hal/ghalvolumemonitor.c]
-
-2007-12-18 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Added Italian translation.
-
-=== gvfs 0.0.2 ===
-
-2007-11-15 Alexander Larsson <alexl@redhat.com>
-
- * POTFILES.in:
- Remove wrongly added files from failed distcheck
-
-2007-11-06 Alexander Larsson <alexl@redhat.com>
-
- * POTFILES.in:
- Added all source files
-
-
diff --git a/po/LINGUAS b/po/LINGUAS
deleted file mode 100644
index e67c36b0..00000000
--- a/po/LINGUAS
+++ /dev/null
@@ -1,52 +0,0 @@
-# please keep this list sorted alphabetically
-ar
-be@latin
-bg
-bn_IN
-ca
-cs
-da
-de
-el
-en_GB
-es
-eu
-et
-fi
-fr
-ga
-gl
-gu
-he
-hu
-hi
-it
-ja
-ko
-ku
-lt
-mk
-ml
-mr
-nb
-nl
-nn
-pa
-pl
-pt
-pt_BR
-ru
-sk
-sl
-sr
-sr@latin
-sv
-ta
-te
-th
-tr
-uk
-vi
-zh_CN
-zh_HK
-zh_TW
diff --git a/po/POTFILES.in b/po/POTFILES.in
deleted file mode 100644
index e77c9c6f..00000000
--- a/po/POTFILES.in
+++ /dev/null
@@ -1,80 +0,0 @@
-# List of source files containing translatable strings.
-# Please keep this file sorted alphabetically.
-[encoding: UTF-8]
-client/gdaemonfile.c
-client/gdaemonfileinputstream.c
-client/gdaemonfileoutputstream.c
-client/gdaemonvfs.c
-client/gvfsdaemondbus.c
-common/gmounttracker.c
-common/gsysutils.c
-common/gvfsdaemonprotocol.c
-daemon/daemon-main.c
-daemon/gvfsbackend.c
-daemon/gvfsbackendarchive.c
-daemon/gvfsbackendburn.c
-daemon/gvfsbackendcdda.c
-daemon/gvfsbackendcomputer.c
-daemon/gvfsbackenddav.c
-daemon/gvfsbackenddnssd.c
-daemon/gvfsbackendftp.c
-daemon/gvfsbackendgphoto2.c
-daemon/gvfsbackendhttp.c
-daemon/gvfsbackendlocaltest.c
-daemon/gvfsbackendnetwork.c
-daemon/gvfsbackendobexftp.c
-daemon/gvfsbackendsftp.c
-daemon/gvfsbackendsmb.c
-daemon/gvfsbackendsmbbrowse.c
-daemon/gvfsbackendtest.c
-daemon/gvfsbackendtrash.c
-daemon/gvfschannel.c
-daemon/gvfsdaemon.c
-daemon/gvfsdaemonutils.c
-daemon/gvfsjobcloseread.c
-daemon/gvfsjobclosewrite.c
-daemon/gvfsjobcopy.c
-daemon/gvfsjobcreatemonitor.c
-daemon/gvfsjobdbus.c
-daemon/gvfsjobdelete.c
-daemon/gvfsjobenumerate.c
-daemon/gvfsjobmakedirectory.c
-daemon/gvfsjobmakesymlink.c
-daemon/gvfsjobmount.c
-daemon/gvfsjobmountmountable.c
-daemon/gvfsjobmove.c
-daemon/gvfsjobopenforread.c
-daemon/gvfsjobopenforwrite.c
-daemon/gvfsjobpull.c
-daemon/gvfsjobpush.c
-daemon/gvfsjobqueryattributes.c
-daemon/gvfsjobqueryfsinfo.c
-daemon/gvfsjobqueryinfo.c
-daemon/gvfsjobread.c
-daemon/gvfsjobseekread.c
-daemon/gvfsjobseekwrite.c
-daemon/gvfsjobsetattribute.c
-daemon/gvfsjobsetdisplayname.c
-daemon/gvfsjobtrash.c
-daemon/gvfsjobunmount.c
-daemon/gvfsjobunmountmountable.c
-daemon/gvfsjobwrite.c
-daemon/main.c
-daemon/mount.c
-monitor/hal/ghaldrive.c
-monitor/hal/ghalmount.c
-monitor/hal/ghalvolume.c
-monitor/hal/ghalvolumemonitor.c
-monitor/hal/hal-utils.c
-monitor/gphoto2/ggphoto2volume.c
-monitor/gphoto2/ggphoto2volumemonitor.c
-monitor/gphoto2/hal-utils.c
-programs/gvfs-cat.c
-programs/gvfs-copy.c
-programs/gvfs-info.c
-programs/gvfs-ls.c
-programs/gvfs-mkdir.c
-programs/gvfs-move.c
-programs/gvfs-open.c
-programs/gvfs-save.c
-programs/gvfs-tree.c
diff --git a/po/ar.po b/po/ar.po
deleted file mode 100644
index ad99f638..00000000
--- a/po/ar.po
+++ /dev/null
@@ -1,1586 +0,0 @@
-# translation of gvfs.HEAD.po to Arabic
-# Copyright (C) 2008 THE gnome'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the gnome package.
-#
-#
-# Djihed Afifi <djihed@gmail.com> 2008.
-# Khaled Hosny <khaledhosny@eglug.org>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs.HEAD\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-15 10:43+0100\n"
-"PO-Revision-Date: 2008-05-22 19:21+0300\n"
-"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
-"Language-Team: Arabic <doc@arabeyes.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Arabic\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
-"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "العملية غير مدعومة، ملفات على نقاط وصْل مختلفة"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "قيمة مرتجعة غير صحيحة من get_info"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "قيمة مرتجعة غير صحيحة من query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "تعذر جلب واصِف ملف الدفْق"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2588
-msgid "Invalid return value from open"
-msgstr "قيمة غير صحيحة للدفْق من \"افتح\""
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "لم أحصل على واصِف ملف الدفْق"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "قيمة مُرتجعة غير صحيحة من النداء"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "قيمة مُرتجعة غير صحيحة من get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "تعذّر العثور على نقطة الضم الحاوية"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "اسم ملف غير صالح %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "قيمة مُرتجعة غير صحيحة من query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "قيمة مُرتجعة غير صحيحة من monitor_dir"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "قيمة مُرتجعة غير صحيحة من monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "خطأ في برتوكول الدفْق: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "نهاية الدفْق"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "أُلغيت العملية"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "لا يُدعم الالتماس على الدفْق"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "لا تُدعم عملية استعلام المعلومات"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, fuzzy, c-format
-msgid "Query info not supported on stream"
-msgstr "لا يُدعم الالتماس على الدفْق"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "خطأ أثناء جلب معلومات الوصْل: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "خطأ أثناء الاتصال بالخادوم: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "خطأ أثناء إنشاء المقبس: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "خطأ أثناء الاتصال بالمقبس: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "تنسيق ملف معلومات غير صحيح."
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "محتوى قائمة خواص غير صحيح"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "خطأ أثناء الاتصال بـ D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "خدمة نظام ملفات %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "خطأ: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "الاستخدام: ‪%s --spawner dbus-id object_path‬"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "الاستخدام: ‪%s key=value key=value ...‬"
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "لم يُحدّد نوع الوصْل"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "نقطة الوصل %s تعمل مسبقا"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "خطأ أثناء بدأ جني الوصْل"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ على %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "لم يحدّد اسم مستضيف"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "وصف وصْل خطأ"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "الملف غير موجود"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "الملف ليس مُجلّدا"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "اكتب"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "تعذّر إنشاء المجلد المؤقت"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "ليس ثمّة ملف أو مجلد"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "الدليل غير فارغ"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "لا يمكن نسخ ملف على مجلد"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "منشئ الاسطوانات/ديڤيدي"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "الملف موجود"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "لا تدعم الخلفية هذا العملية"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "ليس ثمّة ملف أو مجلد في المسار المقصود"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "لا يمكن نسخ دليل على دليل"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "الملف الهدف موجود مسبّقا"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "تعذّر النسخ التتابعي للدليل "
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "ليس مدعومًا"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-#, fuzzy
-msgid "Cannot connect to the system bus"
-msgstr "تعذّر الاتصال بالمستضيف"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "لم يحدّد أي مشغّل"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "تعذّر إيجاد المُشغّل %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "لا يحتوي المشغل %s على ملفات صوت"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "نقطة تحميل cdda2 على %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "قرص صوتي"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "نظام الملفات مشغول: لا ملفات مفتوحة"
-msgstr[1] "نظام الملفات مشغول: ملف واحد مفتوح"
-msgstr[2] "نظام الملفات مشغول: ملفين مفتوحين"
-msgstr[3] "نظام الملفات مشغول: %Id ملفات مفتوحة"
-msgstr[4] "نظام الملفات مشغول: %Id ملفا مفتوحا"
-msgstr[5] "نظام الملفات مشغول: %Id ملف مفتوح"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "ليس ثمّة ملف %s على المشغّل %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "خطأ من 'paranoia' على المشغّل %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "خطأ أثناء الالتماس في الدفق على المشغّل %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "ليس ثمّة ملف"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "الملف غير موجود أو ليس مقطعا صوتيا"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "خدمة نظام ملفات أقراص الصوت"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "الحاسوب"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "نظام الملفات"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "تعذّر فتح الدّليل"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "تعذّر فتح الملف القابل للوصْل"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "خطأ داخلي: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "تعذّر وصْل الملف"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "لا وسائط في القرص"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "لا ملف قابل للوصْل"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "تعذّر فصْل الملف"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "تعذّر إخراج الملف"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "خطأ HTTP‬: ‫%s‪"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "تعذّر تحليل الاستجابة"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "استجابة خالية"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "ردّ غير متوقّع من الخادوم"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "رد غير سليم"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "مشاركة WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "أدخل كلمة سر %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "رجاءً أدخل كلمة سر الوسيط"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "ليس مشاركة WebDAV مفعّلة"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV على %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "تعذّر إنشاء الطلب"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "الملف الهدف موجود مسبقًا"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "عُدّل الملف خارجيّا"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "فشل إنشاء الملف الاحتياطي"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "لا يمكن مراقبة الملف أو الدليل"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "الشبكة"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "الحسابات غير مدعومة"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "قطع الخادوم الاتصال"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "لا يمكن فتح اتصال. هل هناك حائط ناري؟"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "أُغلق اتصال البيانات"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "فشلت العمليّة"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "لا توجد مساحة كافية على الخادوم"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "عمليّة غير مدعومة"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "رُفض التّصريح"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "نوع الصّفحة غير معروف"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "اسم ملف غير صالح"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "رد غير صالح"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "إرسال معطّل"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "تعذّر الاتصال بالمستضيف"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "رجاء أدخل كلمة سر آف تي بي (ftp) على %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "أُلغِي حوار كلمة السر"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "آف تي بي (ftp) على %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "آف تي بي (ftp) باسم %s على %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "الملف دليل"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "النسخ الاحتياطية غير مدعومة"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "اسم الملف طويل جدًا"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "اسم الملف الهدف غير سليم"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, fuzzy, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "‏%s: %s: خطأ في فتح الملف: %s\n"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, fuzzy, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "ليس ثمّة ملف أو مجلد"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, fuzzy, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "اسم ملف غير صالح"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, fuzzy, c-format
-msgid "%s: %d: Not Supported"
-msgstr "ليس مدعومًا"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "آلة تصوير رقميّة (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "آلة تصوير %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "مشغل صوت %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "آلة تصوير"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "مشغل الصوت"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-#, fuzzy
-msgid "Failed to get folder list"
-msgstr "الملف غير موجود"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-#, fuzzy
-msgid "No device specified"
-msgstr "لم يحدّد أي مشغّل"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-#, fuzzy
-msgid "Error creating camera"
-msgstr "خطأ أثناء إنشاء المقبس: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-#, fuzzy
-msgid "Error loading device information"
-msgstr "حدث خطأ أثناء إرسال fd: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-#, fuzzy
-msgid "Error getting device information"
-msgstr "خطأ في إزالة الملف الهدف: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-#, fuzzy
-msgid "Error setting up camera communications port"
-msgstr "خطأ أثناء جلب معلومات الوصْل: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr ""
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "نقطة وصْل gphoto2 على %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-#, fuzzy
-msgid "No camera specified"
-msgstr "لم يحدّد اسم مستضيف"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-#, fuzzy
-msgid "Error creating file object"
-msgstr "خطأ في إنشاء الملف الاحتياطي: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-#, fuzzy
-msgid "Error getting file"
-msgstr "خطأ أثناء حذف الملف: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-#, fuzzy
-msgid "Error getting data from file"
-msgstr "خطأ في إزالة الملف الهدف: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, fuzzy, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "خطأ أثناء الالتماس في الدفق على المشغّل %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "ليس دليلا"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-#, fuzzy
-msgid "Failed to get file list"
-msgstr "الملف غير موجود"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-#, fuzzy
-msgid "Error creating directory"
-msgstr "خطأ أثناء إنشاء المقبس: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-#, fuzzy
-msgid "Name already exists"
-msgstr "الملف الهدف موجود مسبقًا"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-#, fuzzy
-msgid "New name too long"
-msgstr "اسم الملف طويل جدًا"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-#, fuzzy
-msgid "Error renaming dir"
-msgstr "حدث خطأ أثناء إرسال fd: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-#, fuzzy
-msgid "Error renaming file"
-msgstr "خطأ أثناء نقل الملف: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, fuzzy, c-format
-msgid "Directory '%s' is not empty"
-msgstr "الدليل غير فارغ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-#, fuzzy
-msgid "Error deleting directory"
-msgstr "خطأ أثناء حذف الملف: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-#, fuzzy
-msgid "Error deleting file"
-msgstr "خطأ أثناء حذف الملف: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-#, fuzzy
-msgid "Can't write to directory"
-msgstr "تعذّر فتح الدّليل"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-#, fuzzy
-msgid "Error writing file"
-msgstr "خطأ أثناء حذف الملف: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-#, fuzzy
-msgid "Not supported (not same directory)"
-msgstr "ليس دليلا"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr ""
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "خطأ عميل ‪HTTP‬: ‫%s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (ترميز غير سليم)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "تنبيه المجلد غير مدعوم"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "شبكة ويندوز"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "شبكة محليّة"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "مراقب أمكنة الشبكة"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "‏%s على %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr ""
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "خرج برنامج ssh بصورة غير متوقّعة"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "اسم المستضيف مجهول"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "لا توجيه للمستضيف"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "رفض الخادوم الاتصال"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "فشل التحقق من مفتاح المستضيف"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "فشل تشعيب برنامج ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "فشل تشعيب برنامج ‪ssh‬: ‫%s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "انتهت المهلة أثناء الولوج"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "أدخل عبارة سر المفتاح"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "أدخل كلمة السر"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "تعذّر إرسال كلمة السر"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "لُج على أي حال"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "ألغِ الولوج"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"هوية الحاسوب البعيد (%s) غير معروفة.\n"
-"يحدث هذا عند الولوج إلى حاسوب للمرّة الأولى.\n"
-"\n"
-"الهوية المرسلة من الحاسوب البعيد هي %s. إذا أردت التأكد من سلامة الاستمرار، "
-"اتصل بمدير النظام."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "أُلغِي حوار الولوج"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "لا يمكن إرسال تأكيد هوية الخادوم"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "خطأ بروتوكول"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "‏sftp على %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "تعذّر إيجاد أمر ssh مدعوم"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "فشل"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "تم استقبال رد غير صحيح"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "خطأ في إنشاء الملف الاحتياطي: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "تعذّر إنشاء الملف المؤقت"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "لا يمكن نقل دليل على دليل"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "كلمة السر مطلوبة لمشاركة %s على %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "خطأ داخلي (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "فشل وصْل مشاركة ويندوز"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "نوع التماس غير مدعوم"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "فشل إنشاء ملف تخزين: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "خطأ أثناء حذف الملف: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "خطأ أثناء نقل الملف: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "خطأ في إزالة الملف الهدف: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "تعذّر نقل المجلد تتابعيا"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "خادوم نظام ملفات مشاركات ويندوز"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "مشاركات ويندوز على %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "الملف ليس قابلا للوصل"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "ليس ملفا اعتياديا"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "خادوم نظام ملفات شبكة ويندوز"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "المهملات"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "‏%s (في المهملات)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "تعذّر حذف المهملات"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "تنبيه مجلد المهملات غير مدعوم"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "نوع خلفية غير سليم"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "حدث خطأ أثناء إرسال fd: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "لا تدعم الخلفية الوصلات الرمزية"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "رسالة dbus غير سليمة"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "استبدل الخادوم القديم."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "لا تبدأ fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "عفريت GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "عفريت GVFS الرئيسي"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "جرّب ‪\"%s --help\"‬ لمزيد من المعلومات."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "معطيات غير سليمة من الابن المُشعّب"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "فشل الفصْل: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "المكان المحدد ليس موصولا"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "المكان المحدد ليس مدعوما"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "المكان موصول من قبْل"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "المكان ليس قابلا للوصْل"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "اسطوانة"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "قارئ اسطوانات"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "ناسخ اسطوانات"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "مشغّل ‪%s/%s‬"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "مشغّل %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "مشغل أقراص مرنة"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "مُشغّل RAID برمجي"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "مشغل USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "مشغّل ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "مشغّل SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "مشغّل FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "قارئ أشرطة"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "مشغّل فلاش مضغوط"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "مشغل قلم ذاكرة"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "مشغّل SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "مشغّل SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "مشغّل Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "مشغل Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "مشغل قلم"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "مشغل تخزين عام"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "فشل إخراج الوسيط، واحد أو أكثر من الأجزاء على الوسيط مشغول."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%I.1f ك.بايت"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%I.1f م.بايت"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%I.1f ج.بايت"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "قرص صوت و بيانات مختلط"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "وسط %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s بيانات معمّاة"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "اسطوانة"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "اسطوانة فارغة"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "اسطوانة قراءة"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "اسطوانة قراءة فارغة"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "اسطوانة إعادة كتابة"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "اسطوانة إعادة كتابة فارغة"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "قرص DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "قرص DVD-RAM فارغ"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "قرص DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "قرص DVD-RAM فارغ"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "قرص DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "قرص DVD-RW فارغ"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "قرص DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "قرص DVD+R فارغ"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "قرص DVD+RW فارغ"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "قرص DVD+RW فارغ"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "قرص DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "قرص DVD-RAM فارغ"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "قرص Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "قرص Blu-Ray فارغ"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "قرص Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "قرص Blu-Ray R فارغ"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "قرص Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "قرص Blu-Ray RW فارغ"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "قرص HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "قرص HD DVD فارغ"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "قرص HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "قرص HD DVD-R فارغ"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "قرص HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "قرص HD DVD-RW فارغ"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "قرص MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "قرص MO فارغ"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "قرص"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "قرص فارغ"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "‏%s: %s: خطأ في فتح الملف: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "‏%s: %s، خطأ في الكتابة إلى الخرج اقياسي"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "‏%s: %s، خطأ في قراءة: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "‏%s: %s: خطأ في غلق: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "أماكن... - جمّع الأماكن إلى الخرج القياسي"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"جمّع الملفات في الأماكن واطبعهم إلى الخرج القياسي. يعمل كأدات cat التقليدية، "
-"لكن باستخدام أماكن gvfs بدلا من الملفات المحلية. مثلا يمكنك استخدام شيء مثل "
-"smb://server/resource/file.txt كمكان لتجميعه."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"ملاحظة: مرر إلى cat إذا كانت تريد خياراته التنسيقية مثل ‪-n‬، ‪-T‬، أو غيرها."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "‏%s: لا أماكن"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "‏%s: %s: خطأ أثناء فتح المكان: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "‏%s: %s: خطأ أثناء بدأ التطبيق: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "ملف... - افتح الملفات بالبرنامج المسجل"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"افتح الملف/الملفات بالبرنامج المبدئي المسجل لمعالجة هذا النوع من الملفات."
-
-#, fuzzy
-#~ msgid "Error creating port info list"
-#~ msgstr "خطأ أثناء إنشاء المقبس: %s"
-
-#, fuzzy
-#~ msgid "Error getting port info from port info list"
-#~ msgstr "خطأ أثناء جلب معلومات الوصْل: %s"
-
-#, fuzzy
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "نظام الملفات مشغول: لا ملفات مفتوحة"
-
-#, fuzzy
-#~ msgid "Error listing folders"
-#~ msgstr "خطأ أثناء حذف الملف: %s"
-
-#, fuzzy
-#~ msgid "Error listing files in folder"
-#~ msgstr "خطأ أثناء حذف الملف: %s"
-
-#~ msgid "File unavailable"
-#~ msgstr "ملفّ غير متوفّر"
diff --git a/po/be@latin.po b/po/be@latin.po
deleted file mode 100644
index 98ccc2fe..00000000
--- a/po/be@latin.po
+++ /dev/null
@@ -1,1568 +0,0 @@
-# Biełaruski pierakład gvfs.
-# Copyright (C) 2008 Ihar Hrachyshka
-# This file is distributed under the same license as the gvfs package.
-# Ihar Hrachyshka <booxter@lacinka.org>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-16 23:56+0300\n"
-"PO-Revision-Date: 2008-03-07 10:59+0200\n"
-"Last-Translator: Ihar Hrachyshka <booxter@lacinka.org>\n"
-"Language-Team: Belarusian Latin <i18n@mova.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-"Aperacyja nie padtrymlivajecca, bo fajły mieściacca na roznych zmantavanych "
-"fajłavych drevach"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Niapravilnaja viernutaja vartaść ad get_info"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Niapravilnaja viernutaja vartaść ad query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Niemahčyma atrymać deskryptara strumienievaha fajłu"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "Niapravilnaja viernutaja vartaść ad open"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Nie atrymany deskryptar strumienievaha fajłu"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Niapravilnaja viernutaja vartaść ad call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Niapravilnaja viernutaja vartaść ad get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Niemahčyma znajści kancavoha mantavańnia"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Niapravilnaja nazva fajłu %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Niapravilnaja viernutaja vartaść ad query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "Niapravilnaja viernutaja vartaść ad monitor_dir"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "Niapravilnaja viernutaja vartaść ad monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Pamyłka ŭ strumienievym pratakole: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Kaniec strumienia"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Aperacyja anulavanaja"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Pieraskok nie padtrymlivajecca dla strumienia"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Aperacyja zapytu źviestak nie padtrymlivajecca"
-
-#: ../client/gdaemonfileoutputstream.c:991
-msgid "Query info not supported on stream"
-msgstr "Atrymańnie źviestak pra zapyt nie padtrymlivajecca dla strumienia"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Pamyłka padčas atrymańnia źviestak ab mantavańni: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Pamyłka spałučeńnia z demanam: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Pamyłka stvareńnia sokieta: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Pamyłka spałučeńnia z sokietam: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Niapravilny farmat źviestak ab fajle"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Niapravilnaje źmieściva śpisu sa źviestkami ab atrybutach"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Pamyłka spałučeńnia z D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Fajłavaja pasłuha %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Pamyłka: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Užyćcio: %s --spawner dbus-id ściežka_abjektu"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Užyćcio: %s kluč=vartaść kluč=vartaść ..."
-
-#: ../daemon/daemon-main.c:171
-msgid "No mount type specified"
-msgstr "Typ mantavańnia nie akreśleny"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "punkt mantavańnia dla %s užo vykarystoŭvajecca"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "pamyłka ŭklučeńnia demanu mantavańnia"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ na %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Nazva hostu nie akreślenaja"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Niapravilnaja specyfikacyja mantavańnia"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-msgid "File doesn't exist"
-msgstr "Fajł nie isnuje"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Fajł nie źjaŭlajecca kataloham"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Burn"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Niemahčyma stvaryć časovy kataloh"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1978 ../daemon/gvfsbackendgphoto2.c:2687
-msgid "No such file or directory"
-msgstr "Niama takoha fajłu ci katalohu"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "Kataloh nie pusty"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "Niemahčyma skapijavać fajł na miesca katalohu"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Stvaralnik CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2760
-msgid "File exists"
-msgstr "Fajł isnuje"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "U metavaj ściežcy niama takoha fajłu ci katalohu"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "Niemahčyma skapijavać kataloh na miesca inšaha katalohu"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "Metavy fajł isnuje"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "Niemahčyma rekursiŭna skapijavać kataloh"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2345
-#: ../daemon/gvfsbackendgphoto2.c:2553 ../daemon/gvfsbackendgphoto2.c:2648
-#: ../daemon/gvfsbackendgphoto2.c:2739
-msgid "Not supported"
-msgstr "Nie padtrymlivajecca"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "Niemahčyma padłučycca da systemnaj šyny"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "Niemahčyma stvaryć kantekst \"libhal\""
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "Niemahčyma zinicyjalizavać \"libhal\""
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Pryvod nie akreśleny"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Niemahčyma znajści pryvod %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Pryvod %s nia ŭtrymlivaje hukavych fajłaŭ"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "zmantavańnie cdda na %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-msgid "Audio Disc"
-msgstr "Hukavy dysk"
-
-#: ../daemon/gvfsbackendcdda.c:356
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Fajłavaja systema zaniataja: %d adčynieny fajł"
-msgstr[1] "Fajłavaja systema zaniataja: %d adčynienyja fajły"
-msgstr[2] "Fajłavaja systema zaniataja: %d adčynienych fajłaŭ"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Niama fajłu %s u pryvodzie %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Pamyłka ad prahramy \"paranoia\" u pryvodzie %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Pamyłka pieraskoku ŭ strumieni ŭ pryvodzie %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1708
-msgid "No such file"
-msgstr "Niama takoha fajłu"
-
-#: ../daemon/gvfsbackendcdda.c:829
-msgid "The file does not exist or isn't an audio track"
-msgstr "Fajł nie isnuje albo nie źjaŭlajecca hukavoj ściežkaj"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Pasłuha fajłavaj systemy dla Audio CD"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Kamputar"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Fajłavaja systema"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1700
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "Niemahčyma adčynić kataloh"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Niemahčyma adčynić mantavalny fajł"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Unutranaja pamyłka: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Niemahčyma zmantavać fajł"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "U pryvodzie niama nośbitu"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Nie mantavalny fajł"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Niemahčyma razmantavać fajł"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Niemahčyma vysunuć fajł"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Pamyłka HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Niemahčyma praanalizavać adkaz"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Pusty adkaz"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Niečakany adkaz ad servera"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "Niapravilny adkaz"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "Supolny resurs WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "Uviadzi parol dla %s"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "Uviadzi parol proxy"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr "Nie supolny resurs WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV na %s"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "Niemahčyma stvaryć zapyt"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Metavy fajł užo isnuje"
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Fajł byŭ źmienieny zvonku"
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Nie ŭdałosia stvaryć zapasnuju kopiju fajłu"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Niemahčyma nazirać za fajłam ci kataloham."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Sietka"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Konty nie padtrymlivajucca"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Kamputar začyniŭ spałučeńnie"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Niemahčyma adčynić spałučeńnie dla pieradačy źviestak. Mahčyma, hetamu "
-"zaminaje tvaja sietkavaja zasłona?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Spałučeńnie dla pieradačy źviestak začynienaje"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Niaŭdałaja aperacyja"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Na servery zakončyłasia volnaja prastora"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Aperacyja nie padtrymlivajecca"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Nie staje dazvołu"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Nieviadomy typ staronki"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Niapravilnaja nazva fajłu"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Niapravilny adkaz"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "złamanaja pieradača"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Niemahčyma spałučycca z kamputaram"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Uviadzi parol FTP dla %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Dyjaloh uvodu parolu anulavany"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp na %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp jak %s na %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Fajł źjaŭlajecca kataloham"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "zapasnyja kopii jašče nie padtrymlivajucca"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "nazva fajłu zadaŭhaja"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Niapravilnaja nazva metavaha fajłu"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Kataloh ci fajł isnuje"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Niama takoha fajłu ci katalohu"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Niapravilnaja nazva fajłu"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Nie padtrymlivajecca"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Ličbavaja kamera (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Kamera u %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Hukavy player %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Hukavy player"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325
-msgid "Error listing folders to figure out ignore prefix"
-msgstr "Pamyłka prahladu katalohaŭ dziela vyznačeńnia prefiksu dla ihnaravańnia"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "Pryłada nie akreślenaja"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "Niemahčyma stvaryć kantekst \"gphoto2\""
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "Pamyłka stvareńnia kamery"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482
-msgid "Error creating port info list"
-msgstr "Pamyłka stvareńnia śpisu sa źviestkami pra porty"
-
-#: ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading info list"
-msgstr "Pamyłka zahruzki śpisu sa źviestkami"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up port info from port info list"
-msgstr "Pamyłka pošuku źviestak pra port ŭ śpisie"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting port info from port info list"
-msgstr "Pamyłka atrymańnia źviestak pra port sa śpisu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting port info"
-msgstr "Pamyłka aznačeńnia źviestak pra port"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "Pamyłka inicyjalizacyi kamery"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "zmantavańnie gphoto2 na %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "Kamera nie akreślenaja"
-
-#: ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open files"
-msgstr "Fajłavaja systema zaniataja: %d adčynienych fajłaŭ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1716
-msgid "Error creating file object"
-msgstr "Pamyłka stvareńnia fajłavaha abjekta"
-
-#: ../daemon/gvfsbackendgphoto2.c:1730
-msgid "Error getting file"
-msgstr "Pamyłka atrymańnia fajłu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1739
-msgid "Error getting data from file"
-msgstr "Pamyłka atrymańnia źviestak z fajłu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1833 ../daemon/gvfsbackendgphoto2.c:3007
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Pamyłka pieraskoku ŭ strumieni z kamery %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1972 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Nie kataloh"
-
-#: ../daemon/gvfsbackendgphoto2.c:2005
-msgid "Error listing folders"
-msgstr "Pamyłka prahladu katalohaŭ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2068
-msgid "Error listing files in folder"
-msgstr "Pamyłka prahladu fajłaŭ z katalohu"
-
-#: ../daemon/gvfsbackendgphoto2.c:2357
-msgid "Error creating directory"
-msgstr "Pamyłka stvareńnia katalohu"
-
-#: ../daemon/gvfsbackendgphoto2.c:2565
-msgid "Name already exists"
-msgstr "Nazva ŭžo zaniataja"
-
-#: ../daemon/gvfsbackendgphoto2.c:2576 ../daemon/gvfsbackendgphoto2.c:3197
-msgid "New name too long"
-msgstr "Novaja nazva nadta daŭhaja"
-
-#: ../daemon/gvfsbackendgphoto2.c:2586 ../daemon/gvfsbackendgphoto2.c:3208
-msgid "Error renaming dir"
-msgstr "Pamyłka źmieny nazvy katalohu"
-
-#: ../daemon/gvfsbackendgphoto2.c:2598 ../daemon/gvfsbackendgphoto2.c:3220
-msgid "Error renaming file"
-msgstr "Pamyłka źmieny nazvy fajłu"
-
-#: ../daemon/gvfsbackendgphoto2.c:2661
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Kataloh \"%s\" nie pusty"
-
-#: ../daemon/gvfsbackendgphoto2.c:2672
-msgid "Error deleting directory"
-msgstr "Pamyłka vydaleńnia katalohu"
-
-#: ../daemon/gvfsbackendgphoto2.c:2697
-msgid "Error deleting file"
-msgstr "Pamyłka vydaleńnia fajłu"
-
-#: ../daemon/gvfsbackendgphoto2.c:2749
-msgid "Can't write to directory"
-msgstr "Niemahčyma zapisać u katalohu"
-
-#: ../daemon/gvfsbackendgphoto2.c:2796
-msgid "Cannot allocate new file to append to"
-msgstr "Niemahčyma vydzialić novy fajł, u jaki treba dadavać"
-
-#: ../daemon/gvfsbackendgphoto2.c:2810
-msgid "Cannot read file to append to"
-msgstr "Niemahčyma pračytać z fajłu, u jaki treba dadavać"
-
-#: ../daemon/gvfsbackendgphoto2.c:2820
-msgid "Cannot get data of file to append to"
-msgstr "Niemahčyma atrymać źviestki z fajłu, u jaki treba dadavać"
-
-#: ../daemon/gvfsbackendgphoto2.c:3106
-msgid "Error writing file"
-msgstr "Pamyłka zapisu fajłu"
-
-#: ../daemon/gvfsbackendgphoto2.c:3153
-msgid "Not supported (not same directory)"
-msgstr "Nie padtrymlivajecca (inšy kataloh)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3165
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Nie padtrymlivajecca (krynica-kataloh, meta-kataloh)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3173
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Nie padtrymlivajecca (krynica-kataloh, meta-najaŭny fajł)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3185
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Nie padtrymlivajecca (krynica-fajł, meta-kataloh)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Pamyłka klijenta HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (niapravilnaje kadavańnie)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Infarmavańnie dla katalohu nie padtrymlivajecca"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Sietka Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Lakalnaja sietka"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Sietkavy vandroŭnik"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s na %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Spałučeńnie z pryładaj stračanaje"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Pryłada vymahaje aktualizacyi prahramy"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "Prahrama \"ssh\" niečakana vyjšła"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Nieviadomaja nazva hostu"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Niama šlachu da hostu"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Server admoviŭ spałučeńniu"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Nie ŭdałosia spraŭdzić kluč hostu"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Niemahčyma ŭklučyć prahramu \"ssh\""
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Niemahčyma ŭklučyć prahramu \"ssh\": %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Skončyŭsia termin čakańnia ŭvachodu"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Uviadzi parol dla kluča"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Uviadzi parol"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Niemahčyma dasłać parol"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Usia adno ŭvajdzi"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Anuluj uvachod"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Identyfikacyjnyja źviestki addalenaha kamputara (%s) nieviadomyja.\n"
-"Tak zdarajecca, kali ty ŭvachodziš na kamputar upieršyniu.\n"
-"\n"
-"Addaleny kamputar identyfikuje siabie jak %s. Kali ty chočaš całkam "
-"upeŭnicca ŭ biaśpiečnaści takoha spałučeńnia, spytaj pra heta ŭ systemnaha "
-"administratara."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Dyjaloh uvachodu anulavany"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Niemahčyma vysłać źviestki akreśleńnia hostu"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Pamyłka pratakołu"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp na %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Niemahčyma znajści prydatnaha zahadu \"ssh\""
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Pamyłka"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Atrymany niapravilny adkaz"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Pamyłka stvareńnia zapasnoj kopii fajłu: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Niemahčyma stvaryć časovy fajł"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Niemahčyma pieranieści kataloh na miesca inšaha katalohu"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Dla supolnaha resursu %s na %s vymahajecca parol"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Unutranaja pamyłka (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Nie ŭdałosia zmantavać supolny resurs Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Hety typ pieraskoku nie padtrymlivajecca"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Nie ŭdałosia stvaryć zapasnuju kopiju fajłu: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Pamyłka vydaleńnia fajłu: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Pamyłka pieranosu fajłu: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Pamyłka vydaleńnia metavaha fajłu: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Niemahčyma rekursiŭna pieranieści kataloh"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Pasłuha fajłavaj systemy dla supolnadastupnych resursaŭ Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Supolnyja resursy Windows na %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Fajł nie mantavalny"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Niezvyčajny fajł"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Pasłuha fajłavaj systemy dla sietki Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Śmietnica"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (u śmietnicy)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Niemahčyma vydalić śmietnicu"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Infarmavańnie dla śmietnicy nie padtrymlivajecca"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Niapravilny typ ruchavika"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Pamyłka vysyłańnia fd: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Aperacyja nie padtrymlivajecca ruchavikom"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Symbalnyja poviazi nie padtrymlivajucca ruchavikom"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Niapravilnaje paviedamleńnie dbus"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Padmiani staroha demana."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Nie ŭklučaj fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Deman GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Hałoŭny deman GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Pasprabuj \"%s --help\" dla padrabiaźniejšych źviestak."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Niapravilnyja arhumenty dla stvoranaha pracesu-naščadka"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Nie ŭdałosia aŭtamatyčna zmantavać: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Akreślenaje pałažeńnie nie zmantavanaje"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Akreślenaje pałažeńnie nie padtrymlivajecca"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Pałažeńnie ŭžo zmantavanaje"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Niemahčyma zmantavać pałažeńnie"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Pryłada %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Pryłada %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Dyskietavod"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Pryłada Software RAID"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Pryłada USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Pryłada ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Pryłada SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Pryłada FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Stužkavaja pryłada"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Pryłada CompactFlash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Pryłada MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Pryłada SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Pryłada SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Pryłada Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Pryłada Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Pryłada Thumb"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Pryłada Mass Storage"
-
-#: ../monitor/hal/ghaldrive.c:723
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Nie ŭdałosia vysunuć nośbit; adna ci niekalki partycyjaŭ z nośbita zaniatyja."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Dysk z hukam i źviestkami"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "Nośbit u %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s zašyfravanych źviestak"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Dysk CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Pusty dysk CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Dysk CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Pusty dysk CD-R"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Dysk CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Pusty dysk CD-RW"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Dysk DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Pusty dysk DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Dysk DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Pusty dysk DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Dysk DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Pusty dysk DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Dysk DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Pusty dysk DVD+R"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Dysk DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Pusty dysk DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Dysk DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Pusty dysk DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Dysk Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Pusty dysk Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Dysk Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Pusty dysk Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Dysk Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Pusty dysk Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Dysk HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Pusty dysk HD DVD"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Dysk HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Pusty dysk HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Dysk HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Pusty dysk HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Dysk MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Pusty dysk MO"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Dysk"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Pusty dysk"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: pamyłka adčynieńnia fajłu: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, pamyłka zapisu ŭ standartnaje vyjście"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: pamyłka čytańnia: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: pamyłka začynieńnia: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "PAŁAŽEŃNIE... - spałučy PAŁAŽEŃNI na standartnym vyjści."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Spałučy fajły z pałažeńniaŭ i vyviedzi ich u standartnaje vyjście. Pracuje "
-"jak zvyčajnaja prahrama \"cat\", ale z pałažeńniami gvfs zamiest lakalnych "
-"fajłaŭ: napr., možna akreślić smb://server/resource/file.txt dla ŭłučeńnia."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Zaŭvaha: prosta kanvejeryzuj praz \"cat\", kali patrebnyja jaje opcyi "
-"farmatavańnia, napr., -n, -T dy inšyja."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: nie staje pałažeńniaŭ"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: pamyłka adčynieńnia pałažeńnia: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: pamyłka ŭklučeńnia aplikacyi: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr ""
-"FAJŁY... - adčyniaj FAJŁY z dapamohaj zarehistravanych dla ich aplikacyj."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Adčyniaje fajł(y) z dapamohaj aplikacyj, zarehistravanych dla typaŭ fajłaŭ."
-
-#~ msgid "File unavailable"
-#~ msgstr "Fajłu niama"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "Nośbit u %.1f kB"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "Nośbit u %.1f MB"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "Nośbit u %.1f GB"
-
-#~ msgid "File does not exist"
-#~ msgstr "Fajł nie isnuje"
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "Hukavy dysk u %s"
-
-#~ msgid "The file does not exist"
-#~ msgstr "Fajł nie isnuje"
diff --git a/po/bg.po b/po/bg.po
deleted file mode 100644
index 1a2cf67a..00000000
--- a/po/bg.po
+++ /dev/null
@@ -1,1541 +0,0 @@
-# Bulgarian translation of gvfs po-file.
-# Copyright (C) 2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gvfs package.
-# Alexander Shopov <ash@contact.bg>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs gnome-2-24\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-14 20:41+0300\n"
-"PO-Revision-Date: 2008-09-14 20:41+0300\n"
-"Last-Translator: Alexander Shopov <ash@contact.bg>\n"
-"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-"Действието не се поддържа, файловете са на различно монтирани местоположения"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info върна неправилна стойност"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info върна неправилна стойност"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Файловият дескриптор не може да бъде получен"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "open върна неправилна стойност"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "Файловият дескриптор не бе получен"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Извиканият модул върна неправилна стойност"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info върна неправилна стойност"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Съдържащият монтиран обект не е открит"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Неправилно име на файл: %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info върна неправилна стойност"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir върна неправилна стойност"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file върна неправилна стойност"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Грешка в поточния протокол: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Край на потока"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Действието е отменено"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Потокът не поддържа търсене"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Запитващото действие не се поддържа"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Потокът не поддържа търсене"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Грешка при получаване на информация за файловата система: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Грешка при свързване към демон: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Грешка при създаване на гнездо: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Грешка при свързване към гнездо: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Неправилно форматирана информация за файл"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Неправилно съдържание на списък с информация за атрибути"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Грешка при свързване с D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Услуга за файловата система по %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Грешка: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Употреба: %s --spawner ид-dbus път_до_обект"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Употреба: %s ключ=стойност ключ=стойност…"
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Не е указан вид при монтирането"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "точката на монтиране на %s вече работи"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "грешка при стартирането на монтиращия демон"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ на %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Не е указано име на хост"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Неправилно указан обект за монтиране"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Файлът не съществува"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Файлът не е папка"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Записване"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Неуспех при създаване на временна папка"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Липсва такъв файл или папка"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Папката не е празна"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "Файлът не може да бъде копиран върху папка"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Създаване на CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Файлът съществува"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Действието не се поддържа от модула"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "В целевия път липсва такъв файл или папка"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "Папката не може да бъде копирана върху папка"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "Целевият файл съществува"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "Папката не може да бъде копирана рекурсивно"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Не се поддържа"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Не може да се направи връзка със системната шина"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Контекстът за libhal не може да бъде създаден"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Библиотеката libhal не може да бъде инициализирана"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Не е указано устройство"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Устройството %s не може да бъде открито"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Устройството %s не съдържа аудио файлове"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "монтиране по cdda в %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Аудио диск"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Файловата система е заета: отворен е %d файл"
-msgstr[1] "Файловата система е заета: отворени са %d файла"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Липсва файл %s на устройство %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Грешка от „paranoia“ от устройство %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Грешка при търсене в поток от устройство %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Няма такъв файл"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Файлът не съществува или не е аудио писта"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Услуга за файлова система на аудио CD"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Компютър"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Файлова система"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "Папката не може да бъде отворена"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Файлът за монтиране не може да бъде отворен"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Вътрешна грешка: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Файлът не може да бъде монтиран"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "В устройството няма носител"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Не е файл за монтиране"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Файлът не може да бъде демонтиран"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Файлът не може да бъде изваден"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Грешка от HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Отговорът не може да бъде анализиран"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Празен отговор"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Неочакван отговор от сървъра"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Неправилен отговор"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "Споделен ресурс по WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Въведете парола за %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Въведете паролата за сървъра-посредник"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Споделен ресурс без поддръжка на WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV на %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Заявката не може да бъде създадена"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Целевият файл вече съществува"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Файлът бе променен от външно приложение"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Резервният файл не бе създаден"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Папката или файлът не могат да бъдат наблюдавани"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "DNS-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Мрежа"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Не се поддържат абонаменти"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Хостът затвори връзката"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Не може да се отвори връзка за данни. Възможно е да ви пречи защитната стена."
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Връзката за данни бе затворена"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Неуспешно действие"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Не е останало място на диска"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Действието не се поддържа"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Достъпът е отказан"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Неизвестен вид на страницата"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Неправилно име на файл"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Неправилен отговор"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "прекъснато предаване"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Не може да се направи връзка с хоста"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Въведете паролата за ftp за %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Диалоговият прозорец за парола е отменен"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp към %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp като %s към %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Файлът е папка"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "резервни копия все още не се поддържат"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "името на файла е прекалено дълго"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Неправилно име на целевия файл"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %s: Папката или файлът съществува"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Липсва такъв файл или папка"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Неправилно име на файл"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Не се поддържа"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Цифрова камера (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Камера от %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Аудио плеър от %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Камера"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Аудио плеър"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Неуспех при получаването на съдържанието на папка"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Не е указано устройство"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Контекстът за gphoto2 не може да бъде създаден"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Грешка при създаване на камера"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Грешка при зареждане на информацията за устройството"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Грешка при проверка на информацията за устройството"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Грешка при получаването на информацията за устройството"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Грешка при настройването на порта за комуникация с камерата"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Грешка при инициализиране на камерата"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "монтиране по gphoto2 в %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Не е указана камера"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Грешка при създаване на файлов обект"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Грешка при получаване на файл"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Грешка при получаване на данни от файл"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Грешка при търсене в поток от камера %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Не е папка"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Неуспех при получаването на списъка на файловете"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Грешка при създаване на папка"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Името вече съществува"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Новото име е прекалено дълго"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Грешка при преименуване на папка"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Грешка при преименуване на файл"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Папката „%s“ не е празна"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Грешка при изтриване на папка"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Грешка при изтриване на файл"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "В папката не може да се пише"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Не може да се задели новият файл, към който да се добавя"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Не може да се прочете файлът, към който да се добавя"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Не могат да се получат данните на файла, към който да се добавя"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Грешка при запис във файл"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Не се поддържа (не е същата папка)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Не се поддържа (изходът е папка, целта също)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Не се поддържа (изходът е папка, целта — съществуващ файл)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Не се поддържа (изходът е файл, целта — папка)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Клиентска грешка в HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (неправилно кодиране)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Известяването за папки не се поддържа"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Мрежа на Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Локална мрежа"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Датчик за местоположения по мрежата"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s на %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Връзката с устройството е прекъсната"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Устройството изисква обновяване на софтуера"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "Програмата за ssh неочаквано преустанови действие"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Неизвестно име на хост"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Няма маршрут до хост"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Сървърът отказа връзката"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Неуспешно потвърждаване на ключа на хоста"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Неуспех при пораждане на програма за ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Неуспех при пораждане на програма за ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Изтече времето за влизане в системата"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Въведете парола за ключа"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Въведете парола"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Паролата не може да бъде изпратена"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Влизане въпреки всичко"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Отмяна на влизането"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Идентичността на отдалечения компютър (%s) е непозната.\n"
-"Това се случва при първото свързване към отдалечен компютър.\n"
-"\n"
-"Той изпрати идентичността %s. Ако искате да сте напълно сигурни, че е "
-"безопасно да продължите, се свържете със системния администратор."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Диалоговият прозорец за влизане е отменен"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Информацията за идентичността на хоста не може да бъде изпратена"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Грешка в протокола"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp към %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Не е открита поддържана команда за ssh"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Неуспех"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Получен е неправилен отговор"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Грешка при създаване на резервно копие: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Неуспех при създаване на временен файл"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Папка не може да бъде преместена върху папка"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Необходима е парола за споделения ресурс %s на %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Вътрешна грешка (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Неуспех при монтирането на споделен ресурс на Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Неподдържан вид търсене"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Неуспех при създаване на резервен файл: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Грешка при изтриване на файл: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Грешка при преместване на файл: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Грешка при премахване на целевия файл: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Папка не може да бъде преместена рекурсивно върху папка"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Услуга за файлови системи на споделени ресурси на Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Споделени ресурси на Windows на %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Целевият файл не може да се монтира"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Не е обикновен файл"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Услуга за мрежова файлова система на Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Кошче"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (в кошчето)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Кошчето не може да бъде изтрито"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Уведомяване за папката на кошчето не се поддържа"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Неправилен вид модул"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Грешка при изпращане на файловия дескриптор: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Символни връзки не се поддържат от модула"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Неправилно съобщение на D-BUS"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Замяна на стария демон."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Fuse да не се стартира"
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Демон GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Основен демон за GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "За повече информация използвайте „%s --help“."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Неправилни аргументи от породения дъщерен процес"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Неуспешно автоматично монтиране: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Указаното местоположение не е монтирано"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Указаното местоположение не се поддържа"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Местоположението вече е монтирано"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Местоположението не може да се монтира"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HD DVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HD DVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HD DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Устройство %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Устройство %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Флопи устройство"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Устройство със софтуерен RAID"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Устройство с USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Устройство с ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Устройство със SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Устройство с FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Лентово устройство"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Устройство CompactFlash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Устройство MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Устройство SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Устройство SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Устройство Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Устройство Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Устройство Thumb"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Устройство с огромен обем"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Неуспех при изваждането на носител. Поне един от томовете на носителя са "
-"заети."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "Диск с аудио и данни"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "Носител с обем %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "Шифровани данни с обем %s"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Диск CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Празен диск CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Диск CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Празен диск CD-R"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Диск CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Празен диск CD-RW"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Диск DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Празен диск DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Празен диск DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Празен диск DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Диск DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Празен диск DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Диск DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Празен диск DVD+R"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Диск DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Празен диск DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Диск DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Празен диск DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Диск Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Празен диск Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Диск Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Празен диск Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Диск Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Празен диск Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Диск HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Празен диск HD DVD"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Диск HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Празен диск HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Диск HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Празен диск HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Диск MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Празен диск MO"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Диск"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Празен диск"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: грешка при отваряне на файл: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s: грешка при запис към стандартния изход"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: грешка при четене: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: грешка при затваряне: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr ""
-"МЕСТОПОЛОЖЕНИЕ… — сливане на съдържанието на МЕСТОПОЛОЖЕНИЯТА към "
-"стандартния изход."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Сливане на файловете на местоположенията и отпечатване на стандартния изход. "
-"Работи подобно на стандартния инструмент „cat“, но се използват "
-"местоположения на gvfs вместо локални файлове, напр. можете да използвате "
-"местоположение като smb://сървър/ресурс/файл.txt за извеждане."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Бележка: подайте изхода от командата към „cat“, за да ползвате опциите на "
-"стандартния инструмент, напр. „-n“, „-T“ или др."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: не е дадено местоположение"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: грешка при отваряне на местоположение: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: грешка при стартиране на приложение: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "ФАЙЛОВЕ… — отваряне на файлове с регистрираното за това приложение."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Отваряне на файла/овете със стандартното приложение регистрирано за този вид "
-"файлове."
diff --git a/po/bn_IN.po b/po/bn_IN.po
deleted file mode 100644
index 6dd98513..00000000
--- a/po/bn_IN.po
+++ /dev/null
@@ -1,1362 +0,0 @@
-# translation of gvfs.po to Bengali INDIA
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Sankarshan Mukhopadhyay <sankarshan.mukhopadhyay@gmail.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-05 14:14+0000\n"
-"PO-Revision-Date: 2008-03-08 12:06+0530\n"
-"Last-Translator: Sankarshan Mukhopadhyay <sankarshan.mukhopadhyay@gmail.com>\n"
-"Language-Team: Bengali INDIA <discuss@ankur.co.in>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: ../client/gdaemonfile.c:464 ../client/gdaemonfile.c:1867
-msgid "Operation not supported, files on different mounts"
-msgstr "এই কর্ম অসমর্থিত, ফাইলগুলি আলাদা মাউন্টে অবস্থিত"
-
-#: ../client/gdaemonfile.c:758
-msgid "Invalid return value from get_info"
-msgstr "get_info থেকে প্রাপ্ত মান সঠিক নয়"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from query_info"
-msgstr "query_info থেকে প্রাপ্ত মান সঠিক নয়"
-
-#: ../client/gdaemonfile.c:865
-msgid "Couldn't get stream file descriptor"
-msgstr "স্ট্রিম ফাইলের ডেস্ক্রিপ্টার পাওয়া সম্ভব হয়নি"
-
-#: ../client/gdaemonfile.c:897 ../client/gdaemonfile.c:967
-#: ../client/gdaemonfile.c:1026 ../client/gdaemonfile.c:1085
-#: ../client/gdaemonfile.c:1147
-msgid "Invalid return value from open"
-msgstr "open থেকে প্রাপ্ত মান সঠিক নয়"
-
-#: ../client/gdaemonfile.c:977 ../client/gdaemonfile.c:1036
-#: ../client/gdaemonfile.c:1095 ../client/gdaemonfile.c:1157
-msgid "Didn't get stream file descriptor"
-msgstr "স্ট্রিম ফাইলের ডেস্ক্রিপ্টার পাওয়া সম্ভব হয়নি"
-
-#: ../client/gdaemonfile.c:1209 ../client/gdaemonfile.c:1226
-msgid "Invalid return value from call"
-msgstr "call থেকে প্রাপ্ত মান সঠিক নয়"
-
-#: ../client/gdaemonfile.c:1505
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info থেকে প্রাপ্ত মান সঠিক নয়"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1549
-msgid "Could not find enclosing mount"
-msgstr "এনক্লোজিং মাউন্ট খুঁজে পাওয়া যায়নি"
-
-#: ../client/gdaemonfile.c:1579
-#, c-format
-msgid "Invalid filename %s"
-msgstr "ফাইলের নাম %s সঠিক নয়"
-
-#: ../client/gdaemonfile.c:1621
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info থেকে প্রাপ্ত মান সঠিক নয়"
-
-#: ../client/gdaemonfile.c:2012
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir থেকে প্রাপ্ত মান সঠিক নয়"
-
-#: ../client/gdaemonfile.c:2061
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file থেকে প্রাপ্ত মান সঠিক নয়"
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "স্ট্রিম প্রটোকল-এ ত্রুটি ঘটেছে: %s"
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr "স্ট্রিমের শেষাংশ"
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendobexftp.c:774
-#: ../daemon/gvfsbackendobexftp.c:795 ../daemon/gvfsbackendobexftp.c:914
-#: ../daemon/gvfsbackendobexftp.c:1051 ../daemon/gvfsbackendobexftp.c:1115
-#: ../daemon/gvfsbackendobexftp.c:1252 ../daemon/gvfsbackendobexftp.c:1279
-#: ../daemon/gvfsbackendobexftp.c:1338 ../daemon/gvfsbackendobexftp.c:1360
-#: ../daemon/gvfsbackendobexftp.c:1420 ../daemon/gvfsbackendobexftp.c:1439
-#: ../daemon/gvfsbackendsmb.c:1015 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:297
-msgid "Operation was cancelled"
-msgstr "কর্ম বাতিল করা হয়েছে"
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr "স্ট্রিমের ক্ষেত্রে seek কমান্ড সহযোগে খোঁজা সমর্থিত নয়"
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr "Query info কর্ম সমর্থিত নয়"
-
-#: ../client/gdaemonvfs.c:731
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "মাউন্টের বর্ণনা প্রাপ্তিতে ত্রুটি: %s"
-
-#: ../client/gvfsdaemondbus.c:559 ../client/gvfsdaemondbus.c:946
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "daemon-র সাথে সংযোগে ত্রুটি:%s"
-
-#: ../common/gsysutils.c:127
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "socket তৈরি করতে ত্রুটি: %s"
-
-#: ../common/gsysutils.c:165
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "socket-এ সংযোগ করতে ত্রুটি: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "ফাইলের বর্ণনার বিন্যাস সঠিক নয়"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "info list content বৈশিষ্ট্য সঠিক নয়"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "D-Bus-এ সংযোগ করতে ত্রুটি: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s ফাইল-সিস্টেম পরিসেবা"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "ত্রুটি: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "ব্যবহারের নিয়ম: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "ব্যবহারের নিয়ম: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "মাউন্ট করতে ব্যবহৃত ধরন চিহ্নিত করা হয়নি"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s-র মাউন্টপয়েন্ট বর্তমানে সক্রিয়"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "মাউন্ট daemon চালু করতে ত্রুটি ঘটেছে"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr "বার্ন করুন"
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr "অস্থায়ী ডিরেক্টরি প্রস্তুত করতে অক্ষম"
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr "এই নামে কোনো ফাইল বা ডিরেক্টরি নেই"
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1749
-msgid "Directory not empty"
-msgstr "ডিরেক্টরি খালি নয়"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr "ডিরেক্টরির উপর ফাইল কপি করা সম্ভব নয়"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "CD/DVD নির্মাণ ব্যবস্থা"
-
-#: ../daemon/gvfsbackendburn.c:681 ../daemon/gvfsbackendcomputer.c:652
-#: ../daemon/gvfsbackenddnssd.c:393 ../daemon/gvfsbackendftp.c:778
-#: ../daemon/gvfsbackendnetwork.c:637
-#, c-format
-msgid "The file is not a directory"
-msgstr "এই ফাইলটি একটি ডিরেক্টরি নয়"
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "ফাইল উপস্থিত রয়েছে"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr "উদ্দিষ্ট পাথে এই নামে ফাইল বা ডিরেক্টরি উপস্থিত নেই"
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr "একটি ডিরেক্টরির উপরে অন্য ডিরেক্টরি কপি করা সম্ভব নয়"
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr "উদ্দিষ্ট ফাইল উপস্থিত"
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr "ডিরেক্টরিকে রিকার্সিভ পদ্ধতিতে কপি করা সম্ভব নয়"
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr "সমর্থিত নয়"
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr "কোনো ড্রাইভ চিহ্নিত করা হয়নি"
-
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "ড্রাইভ খুঁজে পাওয়া যায়নি: %s"
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "ড্রাইভ %s-র মধ্যে কোনো অডিও ফাইল নেই"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr "%s-র উপর cdda মাউন্ট"
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:492 ../hal/ghalvolume.c:298 ../hal/ghalvolume.c:319
-#, c-format
-msgid "Audio Disc"
-msgstr "অডিও ডিস্ক"
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "ফাইল সিস্টেম ব্যস্ত: %d-টি ফাইল খোলা"
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "%s নামক কোনো ফাইল, %s ড্রাইভের মধ্যে উপস্থিত নেই"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "ড্রাইভ %s এ 'paranoia' থেকে উৎপন্ন ত্রুটি"
-
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "ড্রাইভ %s-এ স্ট্রিম খুঁজতে ত্রুটি"
-
-#: ../daemon/gvfsbackendcdda.c:818 ../daemon/gvfsbackendgphoto2.c:1695
-#, c-format
-msgid "No such file"
-msgstr "এই নামে ফাইল অনুপস্থিত"
-
-#: ../daemon/gvfsbackendcdda.c:825 ../daemon/gvfsbackendcomputer.c:573
-#: ../daemon/gvfsbackenddnssd.c:345 ../daemon/gvfsbackendftp.c:1852
-#: ../daemon/gvfsbackendnetwork.c:590 ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:866 ../daemon/gvfsbackendsmbbrowse.c:1037
-#: ../daemon/gvfsbackendsmbbrowse.c:1111
-#, c-format
-msgid "File doesn't exist"
-msgstr "ফাইল অনুপস্থিত"
-
-#: ../daemon/gvfsbackendcdda.c:832
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "এই নামের ফাইলটি হয় অনুপস্থিত অথবা অডিও ট্র্যাক নয়"
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr "অডিও CD ফাইল-সিস্টেম পরিসেবা"
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr "কম্পিউটার"
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr "ফাইল-সিস্টেম"
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendgphoto2.c:1687
-#: ../daemon/gvfsbackendobexftp.c:760 ../daemon/gvfsbackendtrash.c:637
-msgid "Can't open directory"
-msgstr "ডিরেক্টরি খোলা সম্ভব হয়নি"
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr "মাউন্টযোগ্য ফাইল খোলা সম্ভব হয়নি"
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr "অভ্যন্তরীণ ত্রুটি: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:930
-msgid "Can't mount file"
-msgstr "ফাইল মাউন্ট করা সম্ভব হয়নি"
-
-#: ../daemon/gvfsbackendcomputer.c:825
-msgid "No media in the drive"
-msgstr "ড্রাইভে কোনো মিডিয়া নেই"
-
-#: ../daemon/gvfsbackendcomputer.c:882 ../daemon/gvfsbackendcomputer.c:973
-#: ../daemon/gvfsbackendcomputer.c:1073
-msgid "Not a mountable file"
-msgstr "ফাইলটি মাউন্টযোগ্য নয়"
-
-#: ../daemon/gvfsbackendcomputer.c:988
-msgid "Can't unmount file"
-msgstr "ফাইলটি আন-মাউন্ট করা সম্ভব হয়নি"
-
-#: ../daemon/gvfsbackendcomputer.c:1104
-msgid "Can't eject file"
-msgstr "ফাইলটি বের করা সম্ভব নয়"
-
-#: ../daemon/gvfsbackenddav.c:271 ../daemon/gvfsbackenddav.c:1244
-#: ../daemon/gvfsbackendhttp.c:220
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP ত্রুটি: %s"
-
-#: ../daemon/gvfsbackenddav.c:287
-msgid "Could not parse response"
-msgstr "প্রাপ্ত উত্তর পার্স করা যায়নি"
-
-#: ../daemon/gvfsbackenddav.c:296
-msgid "Empty response"
-msgstr "প্রাপ্ত উত্তর ফাঁকা"
-
-#: ../daemon/gvfsbackenddav.c:303
-msgid "Unexpected reply from server"
-msgstr "সার্ভার থেকে প্রাপ্ত উত্তর প্রত্যাশিত হয়"
-
-#: ../daemon/gvfsbackenddav.c:903 ../daemon/gvfsbackenddav.c:1363
-#, c-format
-msgid "Response invalid"
-msgstr "প্রাপ্ত উত্তর বৈধ নয়"
-
-#: ../daemon/gvfsbackenddav.c:1046
-msgid "WebDAV share"
-msgstr "WebDAV শেয়ার"
-
-#: ../daemon/gvfsbackenddav.c:1048
-#, c-format
-msgid "Enter password for %s"
-msgstr "%s-র জন্য পাসওয়ার্ড লিখুন"
-
-#: ../daemon/gvfsbackenddav.c:1051
-msgid "Please enter proxy password"
-msgstr "প্রক্সি-র জন্য পাসওয়ার্ড লিখুন"
-
-#: ../daemon/gvfsbackenddav.c:1161 ../daemon/gvfsbackendhttp.c:273
-#: ../daemon/gvfsbackendobexftp.c:605 ../daemon/gvfsbackendobexftp.c:616
-#: ../daemon/gvfsbackendsmb.c:595
-msgid "Invalid mount spec"
-msgstr "মাউন্ট বর্ণনা সঠিক নয়"
-
-#: ../daemon/gvfsbackenddav.c:1248 ../daemon/gvfsbackenddav.c:1252
-msgid "Not a WebDAV enabled share"
-msgstr "WebDAV সমর্থিত শেয়ার নয়"
-
-#: ../daemon/gvfsbackenddav.c:1319 ../daemon/gvfsbackenddav.c:1392
-msgid "Could not create request"
-msgstr "অনুরোধ তৈরি করা সম্ভব হয়নি"
-
-#: ../daemon/gvfsbackenddav.c:1458 ../daemon/gvfsbackenddav.c:1707
-#: ../daemon/gvfsbackendsmb.c:1727
-msgid "Target file already exists"
-msgstr "উল্লিখিত ফাইল বর্তমানে উপস্থিত"
-
-#: ../daemon/gvfsbackenddav.c:1528 ../daemon/gvfsbackendsftp.c:2690
-#: ../daemon/gvfsbackendsmb.c:983
-msgid "The file was externally modified"
-msgstr "ফাইলটি স্বতন্ত্ররূপে পরিবর্তন করা হয়েছে"
-
-#: ../daemon/gvfsbackenddav.c:1559 ../daemon/gvfsbackendsmb.c:1021
-#: ../daemon/gvfsbackendsmb.c:1744
-msgid "Backup file creation failed"
-msgstr "ব্যাকআপ ফাইল তৈরি করা সম্ভব হয়নি"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "ফাইল বা ডিরেক্টরি নিরীক্ষণ করা সম্ভব হয়নি"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "নেটওয়ার্ক"
-
-#: ../daemon/gvfsbackendftp.c:188
-msgid "Accounts are unsupported"
-msgstr "অ্যাকাউন্ট সমর্থিত নয়"
-
-#: ../daemon/gvfsbackendftp.c:192
-msgid "Host closed connection"
-msgstr "হোস্ট সংযোগ বন্ধ করেছে"
-
-#: ../daemon/gvfsbackendftp.c:196
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "তথ্য সংযোগ তৈরি সম্ভব হয়নি। সম্ভবত ফায়ারওয়াল দ্বারা এটি প্রতিরোধ করা হচ্ছে?"
-
-#: ../daemon/gvfsbackendftp.c:200
-msgid "Data connection closed"
-msgstr "তথ্য সংযোগ বন্ধ করা হয়েছে"
-
-#: ../daemon/gvfsbackendftp.c:206
-msgid "File unavailable"
-msgstr "ফাইল অনুপস্থিত"
-
-#: ../daemon/gvfsbackendftp.c:210
-msgid "Operation failed"
-msgstr "কর্ম বিফল"
-
-#: ../daemon/gvfsbackendftp.c:215
-msgid "No space left on server"
-msgstr "সার্ভারে কোনো অবশিষ্ট স্থান নেই"
-
-#: ../daemon/gvfsbackendftp.c:223
-msgid "Operation unsupported"
-msgstr "এই কর্মটি অসমর্থিত"
-
-#: ../daemon/gvfsbackendftp.c:227 ../daemon/gvfsbackendsftp.c:261
-msgid "Permission denied"
-msgstr "অনুমতি প্রাপ্ত হয়নি"
-
-#: ../daemon/gvfsbackendftp.c:231
-msgid "Page type unknown"
-msgstr "অজানা পেজ প্রকার"
-
-#: ../daemon/gvfsbackendftp.c:235 ../daemon/gvfsbackendftp.c:1927
-#, c-format
-msgid "Invalid filename"
-msgstr "ফাইলের নাম বৈধ নয়"
-
-#: ../daemon/gvfsbackendftp.c:239 ../daemon/gvfsbackendftp.c:313
-#: ../daemon/gvfsbackendftp.c:342 ../daemon/gvfsbackendftp.c:361
-#: ../daemon/gvfsbackendftp.c:374 ../daemon/gvfsbackendftp.c:683
-#, c-format
-msgid "Invalid reply"
-msgstr "উত্তর বৈধ নয়"
-
-#: ../daemon/gvfsbackendftp.c:481
-#, c-format
-msgid "broken transmission"
-msgstr "বিচ্ছিন্ন সংযোগ"
-
-#: ../daemon/gvfsbackendftp.c:574 ../daemon/gvfsbackendftp.c:702
-#, c-format
-msgid "Could not connect to host"
-msgstr "হোস্টের সাথে সংযোগ স্থাপনে ব্যর্থ"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:975
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "%s-র উপর ftp-র জন্য পাসওয়ার্ড লিখুন"
-
-#: ../daemon/gvfsbackendftp.c:995 ../daemon/gvfsbackendsftp.c:835
-msgid "Password dialog cancelled"
-msgstr "পাসওয়ার্ড ডায়লগ বন্ধ করা হয়েছে"
-
-#: ../daemon/gvfsbackendftp.c:1062
-#, c-format
-msgid "ftp on %s"
-msgstr "%s-র উপর ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1068
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "%s নামে %s-তে ftp করুন"
-
-#: ../daemon/gvfsbackendftp.c:1102 ../daemon/gvfsbackendsftp.c:1412
-msgid "No hostname specified"
-msgstr "কোনো হোস্ট-র নাম উল্লেখ করা হয়নি"
-
-#: ../daemon/gvfsbackendftp.c:1308 ../daemon/gvfsbackendftp.c:2018
-msgid "backups not supported yet"
-msgstr "ব্যাক আপের জন্য সমর্থন অনুপস্থিত"
-
-#: ../daemon/gvfsbackendftp.c:1523 ../daemon/gvfsbackendftp.c:1723
-#, c-format
-msgid "filename too long"
-msgstr "ফাইলের নাম অত্যাধিক লম্বা"
-
-#: ../daemon/gvfsbackendftp.c:2037
-#, c-format
-msgid "Invalid destination filename"
-msgstr "উদ্দিষ্ট ফাইলের নাম সঠিক নয়"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:697
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "ডিজিটাল ক্যামেরা (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:843 ../hal/ghalvolume.c:398
-#, c-format
-msgid "%s Camera"
-msgstr "%s ক্যামেরা"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:846 ../hal/ghalvolume.c:393
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s অডিও প্লেয়ার"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../hal/ghalvolume.c:407
-msgid "Camera"
-msgstr "ক্যামেরা"
-
-#: ../daemon/gvfsbackendgphoto2.c:857 ../hal/ghalvolume.c:405
-msgid "Audio Player"
-msgstr "অডিও প্লেয়ার"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1539
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "%s-তে gphoto2 মাউন্ট করা হয়েছে"
-
-#: ../daemon/gvfsbackendhttp.c:216
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP Client ত্রুটি: %s"
-
-#: ../daemon/gvfsbackendhttp.c:534 ../daemon/gvfsbackendsftp.c:1752
-#: ../daemon/gvfsbackendsmb.c:1230 ../daemon/gvfsbackendtrash.c:962
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (এনকোডিং সঠিক নয়)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "ডিরেক্টরি সংক্রান্ত সুচনাপ্রদান ব্যবস্থা বর্তমানে সমর্থিত নয়"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:694
-msgid "Windows Network"
-msgstr "Windows Network"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "স্থানীয় নেটওয়ার্ক"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Network Location Monitor"
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:444 ../daemon/gvfsbackendsmb.c:514
-#: ../daemon/gvfsbackendsmb.c:1223
-#, c-format
-msgid "%s on %s"
-msgstr "%s, %s-র উপর"
-
-#: ../daemon/gvfsbackendsftp.c:253
-msgid "ssh program unexpectedly exited"
-msgstr "ssh প্রোগ্রাম অপ্রত্যাশিতভাবে বন্ধ হয়ে গেছে"
-
-#: ../daemon/gvfsbackendsftp.c:268
-msgid "Hostname not known"
-msgstr "হোস্টের নাম অজ্ঞাত"
-
-#: ../daemon/gvfsbackendsftp.c:275
-msgid "No route to host"
-msgstr "হোস্টের সাথে সংযোগের পথ পাওয়া যায়নি"
-
-#: ../daemon/gvfsbackendsftp.c:282
-msgid "Connection refused by server"
-msgstr "সার্ভার সংযোগ প্রত্যাখ্যান করেছে"
-
-#: ../daemon/gvfsbackendsftp.c:289
-msgid "Host key verification failed"
-msgstr "হোস্ট-কি যাচাই করা সম্ভব হয়নি"
-
-#: ../daemon/gvfsbackendsftp.c:372
-msgid "Unable to spawn ssh program"
-msgstr "ssh প্রোগ্রাম তৈরি করা যায়নি"
-
-#: ../daemon/gvfsbackendsftp.c:388
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ssh প্রোগ্রাম তৈরি করা যায়নি: %s"
-
-#: ../daemon/gvfsbackendsftp.c:491 ../daemon/gvfsbackendsftp.c:743
-msgid "Timed out when logging in"
-msgstr "লগ-ইন করার সময়সীমার মেয়াদ উত্তীর্ণ হয়েছে"
-
-#: ../daemon/gvfsbackendsftp.c:819
-msgid "Enter passphrase for key"
-msgstr "কি-র জন্য পাসফ্রেজ লিখুন"
-
-#: ../daemon/gvfsbackendsftp.c:821
-msgid "Enter password"
-msgstr "পাসওয়ার্ড লিখুন"
-
-#: ../daemon/gvfsbackendsftp.c:882
-msgid "Can't send password"
-msgstr "পাসওয়ার্ড পাঠানো সম্ভব হয়নি"
-
-#: ../daemon/gvfsbackendsftp.c:890
-msgid "Log In Anyway"
-msgstr "তথাপি লগ-ইন করা হবে"
-
-#: ../daemon/gvfsbackendsftp.c:890
-msgid "Cancel Login"
-msgstr "লগ-ইন বাতিল করুন"
-
-#: ../daemon/gvfsbackendsftp.c:900
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"দূরবর্তী কম্পিউটার (%s) এর পরিচয় অজানা।\n"
-"কম্পিউটারে প্রথমবার লগ-ইন করলে এটি স্বাভাবিক।\n"
-"\n"
-"%s-টি দূরবর্তী কম্পিউটারের পরিচিতি। আপনি যদি নিশ্চিত হতে চান তাহলে সিস্টেম অ্যাডমিনিস্ট্রেটারের সাথে যোগাযোগ করুন।"
-
-#: ../daemon/gvfsbackendsftp.c:920
-msgid "Login dialog cancelled"
-msgstr "লগ-ইন ডায়লগ বন্ধ করা হয়েছে"
-
-#: ../daemon/gvfsbackendsftp.c:940
-msgid "Can't send host identity confirmation"
-msgstr "হোস্টের পরিচয়পত্র প্রদান করা সম্ভব হয়নি"
-
-#: ../daemon/gvfsbackendsftp.c:1331 ../daemon/gvfsbackendsftp.c:1354
-msgid "Protocol error"
-msgstr "প্রোটোকল সংক্রান্ত ত্রুটি"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1378
-#, c-format
-msgid "sftp on %s"
-msgstr "%s-র উপর sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1402
-msgid "Unable to find supported ssh command"
-msgstr "সমর্থিত ssh কম্যান্ড খুঁজে পাওয়া যায়নি"
-
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1764
-#, c-format
-msgid "/ on %s"
-msgstr "%s-র উপর / (root)"
-
-#: ../daemon/gvfsbackendsftp.c:1828
-msgid "File is directory"
-msgstr "চিহ্নিত ফাইলটি ডিরেক্টরি"
-
-#: ../daemon/gvfsbackendsftp.c:1837
-msgid "Failure"
-msgstr "বিফলতা"
-
-#: ../daemon/gvfsbackendsftp.c:1902 ../daemon/gvfsbackendsftp.c:1964
-#: ../daemon/gvfsbackendsftp.c:1975 ../daemon/gvfsbackendsftp.c:2033
-#: ../daemon/gvfsbackendsftp.c:2123 ../daemon/gvfsbackendsftp.c:2152
-#: ../daemon/gvfsbackendsftp.c:2200 ../daemon/gvfsbackendsftp.c:2279
-#: ../daemon/gvfsbackendsftp.c:2390 ../daemon/gvfsbackendsftp.c:2431
-#: ../daemon/gvfsbackendsftp.c:2483 ../daemon/gvfsbackendsftp.c:2554
-#: ../daemon/gvfsbackendsftp.c:2574 ../daemon/gvfsbackendsftp.c:2728
-#: ../daemon/gvfsbackendsftp.c:2754 ../daemon/gvfsbackendsftp.c:2811
-#: ../daemon/gvfsbackendsftp.c:2870 ../daemon/gvfsbackendsftp.c:3150
-#: ../daemon/gvfsbackendsftp.c:3279 ../daemon/gvfsbackendsftp.c:3312
-#: ../daemon/gvfsbackendsftp.c:3413 ../daemon/gvfsbackendsftp.c:3454
-#: ../daemon/gvfsbackendsftp.c:3510 ../daemon/gvfsbackendsftp.c:3546
-#: ../daemon/gvfsbackendsftp.c:3580 ../daemon/gvfsbackendsftp.c:3595
-#: ../daemon/gvfsbackendsftp.c:3614
-msgid "Invalid reply received"
-msgstr "প্রাপ্ত উত্তর সঠিক নয়"
-
-#: ../daemon/gvfsbackendsftp.c:2221
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "ব্যাক-আপ ফাইল তৈরি করতে ত্রুটি: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2636
-msgid "Unable to create temporary file"
-msgstr "অস্থায়ী ফাইল প্রস্তুত করতে অক্ষম"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:214
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "%s শেয়ার %s-র উপর স্থাপিত এবং এই শেয়ারটির জন্য পাসওয়ার্ড প্রয়োজন"
-
-#: ../daemon/gvfsbackendsmb.c:466 ../daemon/gvfsbackendsmb.c:506
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "অভ্যন্তরীণ ত্রুটি (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:561
-msgid "Failed to mount Windows share"
-msgstr "Windows শেয়ার মাউন্ট করতে অক্ষম"
-
-#: ../daemon/gvfsbackendsmb.c:686 ../daemon/gvfsbackendsmb.c:1117
-msgid "Unsupported seek type"
-msgstr "seek-র ধরন সমর্থিত নয়"
-
-#: ../daemon/gvfsbackendsmb.c:1171
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "ব্যাক-আপ ফাইল প্রস্তুত করা যায়নি: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1628
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "ফাইল মুছে ফেলতে ত্রুটি: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1692
-#, c-format
-msgid "Error moving file: %s"
-msgstr "ফাইল সরাতে ত্রুটি: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1716
-msgid "Can't move directory over directory"
-msgstr "একটি ডিরেক্টরির উপর অন্য ডিরেক্টরি সরিয়ে ফেলা যাবে না"
-
-#: ../daemon/gvfsbackendsmb.c:1764
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "উদ্দিষ্ট ফাইল সরিয়ে ফেলতে ত্রুটি: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1788
-msgid "Can't recursively move directory"
-msgstr "রিকার্সিভ রূপে ডিরেক্টরটি স্থানান্তর করা সম্ভব নয়"
-
-#: ../daemon/gvfsbackendsmb.c:1851
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows Shares Filesystem Service"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:702
-#, c-format
-msgid "Windows shares on %s"
-msgstr "%s-এ Windows শেয়ারসমূহ"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:794 ../daemon/gvfsbackendsmbbrowse.c:840
-msgid "The file is not a mountable"
-msgstr "এই ফাইলটি মাউন্ট করা সম্ভব নয়"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:862
-msgid "Not a regular file"
-msgstr "এটি স্বাভাবিক ফাইল নয়"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1107
-msgid "Not a directory"
-msgstr "এটি একটি ডিরেক্টরি নয়"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1219
-msgid "Windows Network Filesystem Service"
-msgstr "Windows Network Filesystem Service"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:600 ../daemon/gvfsbackendtrash.c:1190
-msgid "Trash"
-msgstr "আবর্জনা"
-
-#: ../daemon/gvfsbackendtrash.c:972
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (আবর্জনার মধ্যে)"
-
-#: ../daemon/gvfsbackendtrash.c:1291
-msgid "Can't delete trash"
-msgstr "আবর্জনা সরানো যায়নি"
-
-#: ../daemon/gvfsbackendtrash.c:1638 ../daemon/gvfsbackendtrash.c:1713
-msgid "Trash directory notification not supported"
-msgstr "আবর্জনার ডিরেক্টরি সংক্রান্ত সূচনাপ্রদান ব্যবস্থা সমর্থিত নয়"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "চিহ্নিত ব্যাক-এন্ড প্রকার অসমর্থিত"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "fd প্রদানে ত্রুটি: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:119
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:169 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "এই কর্মটি ব্যাক-এন্ড দ্বারা সমর্থিত নয়"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "ব্যাক-এন্ড symlink সমর্থন করে না"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "dbus সংবাদ সঠিক নয়"
-
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr "পুরানো daemon-কে পরিবর্তন করুন"
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr "fuse চালু করা হবে না।"
-
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "GVFS Daemon"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr "GVFS-র প্রধান daemon"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:74
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:76 ../programs/gvfs-cat.c:167 ../programs/gvfs-open.c:135
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "অধিক তথ্যের জন্য \"%s --help\" ব্যবহার করুন"
-
-#: ../daemon/mount.c:432
-msgid "Invalid arguments from spawned child"
-msgstr "spawn করা চাইল্ড থেকে প্রাপ্ত আর্গুমেন্টগুলি বৈধ নয়"
-
-#: ../daemon/mount.c:731
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automount করা যায়নি: %s"
-
-#: ../daemon/mount.c:776
-msgid "The specified location is not mounted"
-msgstr "নির্দিষ্ট স্থান মাউন্ট করা হয়নি"
-
-#: ../daemon/mount.c:781
-msgid "The specified location is not supported"
-msgstr "নির্দিষ্ট স্থানটি সমর্থিত নয়"
-
-#: ../daemon/mount.c:944
-msgid "Location is already mounted"
-msgstr "স্থানটি বর্তমানে মাউন্ট করা হয়েছে"
-
-#: ../daemon/mount.c:952
-msgid "Location is not mountable"
-msgstr "স্থানটি মাউন্ট করা যাবে না"
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:148
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:162
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:165
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:168
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../hal/ghaldrive.c:174
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../hal/ghaldrive.c:180
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:186
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s ড্রাইভ"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:192
-#, c-format
-msgid "%s Drive"
-msgstr "%s ড্রাইভ"
-
-#: ../hal/ghaldrive.c:196
-msgid "Floppy Drive"
-msgstr "ফ্লপি ড্রাইভ"
-
-#: ../hal/ghaldrive.c:202
-msgid "Software RAID Drive"
-msgstr "সফ্টওয়্যার RAID ড্রাইভ"
-
-#: ../hal/ghaldrive.c:204
-msgid "USB Drive"
-msgstr "USB ড্রাইভ"
-
-#: ../hal/ghaldrive.c:206
-msgid "ATA Drive"
-msgstr "ATA ড্রাইভ"
-
-#: ../hal/ghaldrive.c:208
-msgid "SCSI Drive"
-msgstr "SCSI ড্রাইভ"
-
-#: ../hal/ghaldrive.c:210
-msgid "FireWire Drive"
-msgstr "FireWire ড্রাইভ"
-
-#: ../hal/ghaldrive.c:214
-msgid "Tape Drive"
-msgstr "টেপ ড্রাইভ"
-
-#: ../hal/ghaldrive.c:216
-msgid "CompactFlash Drive"
-msgstr "CompactFlash ড্রাইভ"
-
-#: ../hal/ghaldrive.c:218
-msgid "MemoryStick Drive"
-msgstr "MemoryStick ড্রাইভ"
-
-#: ../hal/ghaldrive.c:220
-msgid "SmartMedia Drive"
-msgstr "SmartMedia ড্রাইভ"
-
-#: ../hal/ghaldrive.c:222
-msgid "SD/MMC Drive"
-msgstr "SD/MMC ড্রাইভ"
-
-#: ../hal/ghaldrive.c:224
-msgid "Zip Drive"
-msgstr "Zip ড্রাইভ"
-
-#: ../hal/ghaldrive.c:226
-msgid "Jaz Drive"
-msgstr "Jaz ড্রাইভ"
-
-#: ../hal/ghaldrive.c:228
-msgid "Thumb Drive"
-msgstr "Thumb ড্রাইভ"
-
-#: ../hal/ghaldrive.c:231
-msgid "Mass Storage Drive"
-msgstr "বৃহৎ মাপে সংরক্ষণের ড্রাইভ"
-
-#: ../hal/ghaldrive.c:730
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "মিডিয়াতে একাধিক ভলিউম ব্যস্ত; মিডিয়া বের করা যায়নি"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "CD-ROM Disc"
-msgstr "CD-ROM ডিস্ক"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "Blank CD-ROM Disc"
-msgstr "ফাঁকা CD-ROM ডিস্ক"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "CD-R Disc"
-msgstr "CD-R ডিস্ক"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "Blank CD-R Disc"
-msgstr "ফাঁকা CD-R ডিস্ক"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "CD-RW Disc"
-msgstr "CD-RW ডিস্ক"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "Blank CD-RW Disc"
-msgstr "ফাঁকা CD-RW ডিস্ক"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM ডিস্ক"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "Blank DVD-ROM Disc"
-msgstr "ফাঁকা DVD-ROM ডিস্ক"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM ডিস্ক"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "Blank DVD-RAM Disc"
-msgstr "ফাঁকা DVD-RAM ডিস্ক"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "DVD-RW Disc"
-msgstr "DVD-RW ডিস্ক"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "Blank DVD-RW Disc"
-msgstr "ফাঁকা DVD-RW ডিস্ক"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "DVD+R Disc"
-msgstr "DVD+R ডিস্ক"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "Blank DVD+R Disc"
-msgstr "ফাঁকা DVD+R ডিস্ক"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "DVD+RW Disc"
-msgstr "DVD+RW ডিস্ক"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "Blank DVD+RW Disc"
-msgstr "ফাঁকা DVD+RW ডিস্ক"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL ডিস্ক"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "Blank DVD+R DL Disc"
-msgstr "ফাঁকা DVD+R DL ডিস্ক"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray ডিস্ক"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blank Blu-Ray Disc"
-msgstr "ফাঁকা Blu-Ray ডিস্ক"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R ডিস্ক"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blank Blu-Ray R Disc"
-msgstr "ফাঁকা Blu-Ray R ডিস্ক"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW ডিস্ক"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blank Blu-Ray RW Disc"
-msgstr "ফাঁকা Blu-Ray RW ডিস্ক"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "HD DVD Disc"
-msgstr "HD DVD ডিস্ক"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "Blank HD DVD Disc"
-msgstr "ফাঁকা HD DVD ডিস্ক"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R ডিস্ক"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "Blank HD DVD-R Disc"
-msgstr "ফাঁকা HD DVD-R ডিস্ক"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW ডিস্ক"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "Blank HD DVD-RW Disc"
-msgstr "ফাঁকা HD DVD-RW ডিস্ক"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "MO Disc"
-msgstr "MO ডিস্ক"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "Blank MO Disc"
-msgstr "ফাঁকা MO ডিস্ক"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Disc"
-msgstr "ডিস্ক"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Blank Disc"
-msgstr "ফাঁকা ডিস্ক"
-
-#: ../hal/ghalmount.c:368
-#, c-format
-msgid "%.1f kB Media"
-msgstr "%.1f kB মিডিয়া"
-
-#: ../hal/ghalmount.c:373
-#, c-format
-msgid "%.1f MB Media"
-msgstr "%.1f MB মিডিয়া"
-
-#: ../hal/ghalmount.c:378
-#, c-format
-msgid "%.1f GB Media"
-msgstr "%.1f GB মিডিয়া"
-
-#: ../hal/ghalmount.c:490 ../hal/ghalvolume.c:317
-msgid "Mixed Audio/Data Disc"
-msgstr "অডিও/তথ্য সংমিশ্রিত ডিস্ক"
-
-#: ../hal/ghalvolume.c:206
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../hal/ghalvolume.c:211
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f মেগাবাইট"
-
-#: ../hal/ghalvolume.c:216
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f গিগাবাইট"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:305
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s এনক্রিপ্ট করা তথ্য"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:328
-#, c-format
-msgid "%s Media"
-msgstr "%s মিডিয়া"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: ফাইল খুলতে ত্রুটি: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, stdout এ লিখতে ত্রুটি"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: পাঠ করতে ত্রুটি: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:বন্ধ করতে ত্রুটি: %s\n"
-
-# this looks like an option from the command line, hence not translating
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATION... - concatenate LOCATIONS to standard output."
-
-# this looks like an option from the command line, hence not translating
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-
-# this looks like an option from the command line, hence not translating
-#: ../programs/gvfs-cat.c:150
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:165 ../programs/gvfs-open.c:133
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: অবস্থান অনুপস্থিত"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: চিহ্নিত অবস্থান খুলতে ত্রুটি: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: অ্যাপ্লিকেশন আরম্ভ করতে ত্রুটি: %s\n"
-
-# this looks like an option from the command line, hence not translating
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - open FILES with registered application."
-
-# this looks like an option from the command line, hence not translating
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-
diff --git a/po/ca.po b/po/ca.po
deleted file mode 100644
index 3a9b1750..00000000
--- a/po/ca.po
+++ /dev/null
@@ -1,1623 +0,0 @@
-# Catalan translation of gvfs.
-# Copyright (C) 2008, Free Software Foundation Inc.
-# This file is distributed under the same license as the gvfs package.
-# Gil Forcada <gilforcada@guifi.net>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-15 16:41+0200\n"
-"PO-Revision-Date: 2008-09-15 16:34+0200\n"
-"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
-"Language-Team: Catalan <tradgnome@softcatala.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-"L'operació no està implementada. Els fitxers estan en diferents punts de "
-"muntatge"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "«get_info» ha retornat un valor no vàlid"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "«query_info» ha retornat un valor no vàlid"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "No s'ha pogut obtenir el descriptor de fitxer del flux"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "«open» ha retornat un valor no vàlid"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "No s'ha obtingut el descriptor de fitxer del flux"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "«call» ha retornat un valor no vàlid"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "«get_filesystem_info» ha retornat un valor no vàlid"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "No s'ha pogut trobar el punt de muntatge de tancament"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "El nom de fitxer %s no és vàlid"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "«query_filesystem_info» ha retornat un valor no vàlid"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir» ha retornat un valor no vàlid"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "«monitor_file» ha retornat un valor no vàlid"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Error en el protocol del flux: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Final del flux"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "S'ha cancel·lat l'operació"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "No està implementada la cerca en el flux"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "No està implementada l'operació de consulta d'informació"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "No està implementada la consulta d'informació en el flux"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr ""
-"S'ha produït un error en obtenir la informació del punt de muntatge: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "S'ha produït un error en connectar-se al dimoni: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "S'ha produït un error en crear el sòcol: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "S'ha produït un error en connectar-se al sòcol: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "El format d'informació del fitxer no és vàlid"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "El contingut de la llista d'informació dels atributs no és vàlid"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "S'ha produït un error en connectar-se al D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Sistema de fitxers %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Error: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Ús: %s --spawner identificador_dbus camí_a_l'objecte"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Ús: %s clau=valor clau=valor ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "No s'ha especificat el tipus de muntatge"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "ja s'està fent servir el punt de muntatge %s"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "s'ha produït un error en iniciar el dimoni de muntatge"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ a %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "No s'ha especificat el nom de la màquina"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Especificació de muntatge no vàlida"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "No existeix el fitxer"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "El fitxer no és un directori"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Grava"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "No s'ha pogut crear un directori temporal"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "No existeix el fitxer o directori"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "El directori no és buit"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "No es pot copiar el fitxer al directori"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Creador de CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Existeix el fitxer"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "El rerefons no ha implementat l'operació"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "No existeix el fitxer o directori en el camí objectiu"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "No es pot copiar el directori al directori"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "Ja existeix el fitxer de destinació"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "No es pot copiar el directori de forma recursiva"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "No és implementat"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "No s'ha pogut connectar al bus del sistema"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "No s'ha pogut crear el context libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "No s'ha pogut inicialitzar la libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "No s'ha especificat la unitat"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "No s'ha pogut trobar la unitat %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "La unitat %s no conté fitxers d'àudio"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "CDDA muntat a %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Disc d'àudio"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "El sistema de fitxers està ocupat: %d fitxer obert"
-msgstr[1] "El sistema de fitxers està ocupat: %d fitxers oberts"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "No hi ha el fitxer %s en la unitat %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "S'ha produït un error del «paranoia» en la unitat %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "S'ha produït un error en cercar en el flux de la unitat %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "No hi ha cap fitxer"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "No existeix el fitxer, o bé, no és una pista d'àudio"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Servei de sistema de fitxers de CD d'àudio"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Ordinador"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Sistema de fitxers"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "No es pot obrir el directori"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "No es pot obrir el fitxer muntable"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Error intern: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "No es pot muntar el fitxer"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "No hi ha cap suport en la unitat"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "No és un fitxer muntable"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "No es pot desmuntar el fitxer"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "No es pot expulsar el fitxer"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Error HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "No s'ha pogut analitzar la resposta"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Resposta buida"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Resposta inesperada del servidor"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Resposta no vàlida"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "Recurs compartit de WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Introduïu la contrasenya per a %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Introduïu la contrasenya del servidor intermediari"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "No és un recurs compartit habilitat per a WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV a %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "No s'ha pogut crear la sol·licitud"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Ja existeix el fitxer de destinació"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "S'ha modificat el fitxer des d'un altre programa"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "No s'ha pogut crear el fitxer de còpia de seguretat"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "No es pot fer un seguiment del fitxer o directori."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Xarxa"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "No es poden utilitzar comptes"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "L'ordinador remot ha tancat la connexió"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"No s'ha pogut obrir una connexió de dades. Potser el tallafocs no ho permet?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "S'ha tancat la connexió de dades"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Ha fallat l'operació"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "No hi ha espai lliure en el servidor"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Operació no implementada"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Permís denegat"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Tipus de pàgina desconeguda"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Nom de fitxer no vàlid"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "S'ha rebut una resposta no vàlida"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "transmissió trencada"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "No s'ha pogut connectar amb l'ordinador"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Introduïu la contrasenya per a l'FTP a %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "S'ha cancel·lat el diàleg de contrasenya"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "FTP a %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "FTP com a %s a %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "El fitxer és un directori"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "encara no es poden utilitzar còpies de seguretat"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "el nom de fitxer és massa llarg"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Nom de fitxer de destinació no vàlid"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: ja existeix el directori o el fitxer"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: no existeix el fitxer o directori"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: nom de fitxer no vàlid"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: no és implementat"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Càmera digital (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Càmera %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Reproductor de música de %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Càmera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Reproductor de música"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "No s'ha pogut obtenir el llistat del directori"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "No s'ha especificat el dispositiu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "No s'ha pogut crear el context gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "S'ha produït un error en crear la càmera"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "S'ha produït un error en carregar la informació del dispositiu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "S'ha produït un error en consultar la informació del dispositiu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "S'ha produït un error en obtenir la informació del dispositiu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr ""
-"S'ha produït un error en configurar el port de comunicacions de la càmera"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "S'ha produït un error en inicialitzar la càmera"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gPhoto2 muntat a %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "No s'ha especificat cap càmera"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "S'ha produït un error en crear l'objecte de fitxer"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "S'ha produït un error en obtenir el fitxer"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "S'ha produït un error obtenir dades del fitxer"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "S'ha produït un error en cercar en el flux de la càmera %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "No és un directori"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "No s'ha pogut obtenir el llistat de fitxers"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "S'ha produït un error en crear el directori"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Ja existeix el nom"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "El nom nou és massa llarg"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "S'ha produït un error en canviar el nom del directori"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "S'ha produït un error en canviar el nom del fitxer"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "El directori «%s» no és buit"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "S'ha produït un error en suprimir el directori"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "S'ha produït un error en suprimir el fitxer"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "No es pot escriure en el directori"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "No s'ha pogut ubicar el fitxer nou al que afegir"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "No s'ha pogut llegir el fitxer al que afegir"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "No s'ha pogut obtenir dades del fitxer al que afegir"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "S'ha produït un error en escriure el fitxer"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "No està implementat (no són en el mateix directori)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "No està implementat (l'orgien i la destinació són directoris)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr ""
-"No està implementat (l'orgien és un directori i la destinació un fitxer "
-"existent)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr ""
-"No està implementat (l'origen és un fitxer i la destinació un directori)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Error en el client HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (codificació incorrecta)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "No està implementada la notificació del directori"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Xarxa de Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Xarxa local"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Orinadors de la xarxa"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s a %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "S'ha perdut la connexió amb el dispositiu"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "El dispositiu necessita una actualització de programari"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "el programa SSH ha sortit inesperadament"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Es desconeix el nom de l'ordinador"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "No hi ha cap ruta fins a l'ordinador"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "El servidor ha rebutjat la connexió"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Ha fallat la verificació de la clau de l'ordinador"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "No s'ha pogut engendrar el programa SSH"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "No s'ha pogut engendrar el programa SSH: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Ha expirat el temps d'identificació"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Introduïu la contrasenya per a la clau"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Introduïu la contrasenya"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "No s'ha pogut enviar la contrasenya"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Entra igualment"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Cancel·la l'entrada"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Es desconeix la identitat de l'ordinador remot (%s).\n"
-"Això passa quan entreu a un ordinador per primera vegada.\n"
-"\n"
-"La identitat que ha enviat l'ordinador remot és %s. Si voleu estar "
-"completament segur, contacteu amb l'administrador del sistema."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "S'ha cancel·lat el diàleg d'entrada"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "No s'ha pogut enviar la confirmació de la identitat de l'ordinador"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Error en el protocol"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp a %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "No s'ha pogut trobar l'ordre de SSH implementada"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Fallada"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "S'ha rebut una resposta no vàlida"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "S'ha produït un error en crear el fitxer de còpia de seguretat: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "No s'ha pogut crear un fitxer temporal"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "No es pot moure el directori al directori"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Es requereix contrasenya per al recurs compartit %s a %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Error intern (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "No s'ha pogut muntar el recurs compartit de Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Tipus de cerca no implementada"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "No s'ha pogut crear el fitxer de còpia de seguretat: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "S'ha produït un error en suprimir el fitxer: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "S'ha produït un error en moure el fitxer: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "S'ha produït un error en suprimir el fitxer objectiu: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "No es pot moure el directori de forma recursiva"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Servei de sistema de fitxers compartits de Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Recursos compartits de Windows a %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "El fitxer no es pot muntar"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "No és un fitxer normal"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Servei de sistema de fitxers en xarxa de Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Paperera"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (a la paperera)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "No es pot suprimir la paperera"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "No està implementada la notificació del directori de la paperera"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Tipus de rerefons no vàlid"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "S'ha produït un error en enviar el descriptor de fitxer: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "El rerefons no ha implementat els enllaços simbòlics"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "El missatge del D-Bus no és vàlid"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Substitueix el dimoni anterior."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "No iniciïs el FUSE."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Dimoni del GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Dimoni principal del GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Per a més informació proveu «%s --help»."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Arguments no vàlids del fill engendrat"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Ha fallat el muntatge automàtic: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "No està muntada la ubicació especificada"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "No se sap gestionar la ubicació especificada"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Ja està muntada la ubicació"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "La ubicació no és pot muntar"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Unitat %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Unitat %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Unitat de disquet"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Unitat de RAID per programari"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Unitat USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Unitat ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Unitat SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Unitat FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Unitat de cinta"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Unitat CompactFlash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Unitat MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Unitat SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Unitat SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Unitat Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Unitat Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Unitat Thumb"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Unitat de memòria de massa"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"No s'ha pogut expulsar el suport. Alguns dels volums del suport estan "
-"ocupats."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "Disc mesclat d'àudio i dades"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "Suport %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s dades xifrades"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Disc CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Disc CD-ROM en blanc"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Disc CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Disc CD-R en blanc"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Disc CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Disc CD-RW en blanc"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Disc DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Disc DVD-ROM en blanc"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Disc DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Disc DVD-RAM en blanc"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Disc DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Disc DVD-RW en blanc"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Disc DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Disc DVD+R en blanc"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Disc DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Disc DVD+RW en blanc"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Disc DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Disc DVD+R DL en blanc"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Disc Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Disc Blu-Ray en blanc"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Disc Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Disc Blu-Ray R en blanc"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Disc Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Disc Blu-Ray RW en blanc"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Disc HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Disc HD DVD en blanc"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Disc HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Disc HD DVD-R en blanc"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Disc HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Disc HD DVD-RW en blanc"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Disc MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Disc MO en blanc"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Disc"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Disc en blanc"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: s'ha produït un error en obrir el fitxer: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, s'ha produït un error en escriure a la sortida estàndard"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: s'ha produït un error en llegir: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:error en tancar: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "UBICACIÓ... - concatena UBICACIONS a la sortida estàndard."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Concatena fitxers a les ubicacions i imprimeix a la sortida estàndard. "
-"Funciona de la mateixa manera que l'eina «cat» de sempre, però utilitza "
-"l'ubicació del gvfs enlloc de fitxers locals: per exemple, podeu fer servir "
-"com a ubicació per a concatenar coses com smb://servidor/recurs/fitxer.txt."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Nota: utilitzeu un conducte a través del «cat» si necessiteu les seves "
-"opcions de formatació com -n, -T o d'altres."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: manquen les ubicacions"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: s'ha produït un error en obrir la ubicació: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: s'ha produït un error en executar l'aplicació: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FITXERS... - obre els FITXERS amb l'aplicació registrada."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Obre els fitxers amb l'aplicació registrada predeterminada per a gestionar "
-"aquest tipus de fitxer."
-
-#, fuzzy
-#~ msgid "Error creating port info list"
-#~ msgstr "S'ha produït un error en crear el sòcol: %s"
-
-#, fuzzy
-#~ msgid "Error getting port info from port info list"
-#~ msgstr ""
-#~ "S'ha produït un error en obtenir la informació del punt de muntatge: %s"
-
-#, fuzzy
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "El sistema de fitxers està ocupat: %d fitxer obert"
-
-#, fuzzy
-#~ msgid "Error listing folders"
-#~ msgstr "S'ha produït un error en suprimir el fitxer: %s"
-
-#, fuzzy
-#~ msgid "Error listing files in folder"
-#~ msgstr "S'ha produït un error en suprimir el fitxer: %s"
-
-#~ msgid "File unavailable"
-#~ msgstr "El fitxer no està disponible"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "Suport de %.1f kB"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "Suport de %.1f MB"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "Suport de %.1f GB"
-
-#~ msgid "Invalid reply from server."
-#~ msgstr "El servidor ha enviat una resposta no vàlida."
-
-#~ msgid "Operation cancelled"
-#~ msgstr "S'ha cancel·lat l'operació"
-
-#~ msgid "Invalid username"
-#~ msgstr "Nom d'usuari no vàlid"
-
-#~ msgid "Invalid password"
-#~ msgstr "Contrasenya no vàlida"
-
-#~ msgid "FTP on %s"
-#~ msgstr "FTP a %s"
-
-#~ msgid "FTP on %s:%u"
-#~ msgstr "FTP a %s:%u"
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "Disc d'àudio a %s"
-
-#~ msgid "The file does not exist"
-#~ msgstr "No existeix el fitxer"
-
-#~ msgid "CD Burner"
-#~ msgstr "Gravadora de CD"
-
-#~ msgid "No fd passing socket available"
-#~ msgstr "No hi ha cap sòcol de passada de descriptor de fitxer disponible"
-
-#~ msgid "Containing mount does not exist"
-#~ msgstr "No existeix el punt de muntatge contenidor"
-
-#~ msgid "Failed to allocate smb context"
-#~ msgstr "No s'ha pogut ubicar el context de SMB"
-
-#~ msgid "Failed to initialize smb context"
-#~ msgstr "No s'ha pogut inicialitzar el context de SMB"
-
-#~ msgid "accept of extra fd failed"
-#~ msgstr "ha fallat l'acceptació d'un descriptor de fitxer extra"
-
-#~ msgid "object registration failed"
-#~ msgstr "ha fallat el registre de l'objecte"
diff --git a/po/cs.po b/po/cs.po
deleted file mode 100644
index ee7f0b6b..00000000
--- a/po/cs.po
+++ /dev/null
@@ -1,1537 +0,0 @@
-# Czech translation of gvfs.
-# Copyright (C) 2008 the author(s) of gvfs.
-# This file is distributed under the same license as the gvfs package.
-# Petr Kovar <pknbe@volny.cz>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-08 01:05+0200\n"
-"PO-Revision-Date: 2008-09-08 01:01+0200\n"
-"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
-"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "Operace není podporována, soubory na rozdílných připojeních"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Neplatná návratová hodnota od get_info"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Neplatná návratová hodnota od query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Nelze získat deskriptor proudového souboru"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "Neplatná návratová hodnota od open"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "Nezískán deskriptor proudového souboru"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Neplatná návratová hodnota od call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Neplatná návratová hodnota od get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Nelze nalézt viditelné připojení"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Neplatný název souboru %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Neplatná návratová hodnota od query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "Neplatná návratová hodnota od monitor_dir"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "Neplatná návratová hodnota od monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Chyba v proudovém protokolu: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Konec proudu"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Operace byla zrušena"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Hledání v proudu nepodporováno"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Operace informace o dotazování není podporována"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Informace hledání v proudu nepodporovány"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Chyba při získávání informace o připojení: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Chyba při spojování s démonem: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Chyba při vytváření socketu: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Chyba při spojování se socketem: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Neplatný formát informace o souboru"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Neplatný obsah seznamu informací o atributech"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Chyba při spojování s D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Služba systému souborů %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Chyba: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Použití: %s --spawner dbus-id cesta_objektu"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Použití: %s klíč=hodnota klíč=hodnota ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Nezadán žádný typ připojení"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "bod připojení %s již běží"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "chyba při spouštění démona mount"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ na %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Nebyl zadán název hostitele"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Neplatné určení připojení"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Soubor neexistuje"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Soubor není adresářem"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Zápis"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Nezdařilo se vytvoření dočasného adresáře"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Neexistuje žádný takový soubor nebo adresář"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Adresář není prázdný"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "Nelze kopírovat nad adresář"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Tvůrce CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Soubor existuje"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Operace není podpůrnou vrstvou podporována"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "V cílové cestě neexistuje žádný takový soubor nebo adresář"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "Nelze kopírovat adresář nad adresář"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "Cílový soubor existuje"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "Nelze rekurzivně kopírovat adresář"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Nepodporováno"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Nezdařilo se připojit k systémové sběrnici"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Nelze vytvořit kontext libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Nelze spustit libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Nezadána žádná mechanika"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Nelze najít mechaniku %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Mechanika %s neobsahuje zvukové soubory"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "připojení cdda na %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Zvukový disk"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Systém souborů je zaneprázdněn: %d otevřený soubor"
-msgstr[1] "Systém souborů je zaneprázdněn: %d otevřené soubory"
-msgstr[2] "Systém souborů je zaneprázdněn: %d otevřených souborů"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Žádný takový soubor %s na mechanice %s neexistuje"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Chyba knihovny paranoia na mechanice %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Chyba při hledání v proudu na mechanice %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Žádný takový soubor neexistuje"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Soubor neexistuje nebo není zvukovou stopou"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Služba systému souborů zvukového CD"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Počítač"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Systém souborů"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "Nelze otevřít adresář"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Nelze otevřít připojitelný soubor"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Vnitřní chyba: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Nelze připojit soubor"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "V mechanice není médium"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Není připojitelným souborem"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Nelze odpojit soubor"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Nelze vysunout soubor"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Chyba HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Nelze analyzovat odpověď"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Prázdná odpověď"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Neočekávaná odpověď od serveru"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Neplatná odpověď"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "Sdílení WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Zadejte heslo k %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Zadejte prosím heslo proxy"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Není sdílením s povoleným WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV na %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Nelze vytvořit požadavek"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Cílový soubor už existuje"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Soubor byl upraven externě"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Selhala tvorba záložního souboru"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Nelze sledovat soubor nebo adresář."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Síť"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Účty nejsou podporovány"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Hostitel ukončil spojení"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Nelze otevřít datové spojení. Možná to znemožňuje firewall?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Datové spojení ukončeno"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Operace selhala"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Na serveru není volné místo"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Operace nepodporována"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Přístup odepřen"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Neznámý typ strany"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Neplatný název souboru"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Neplatná odpověď"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "chybný přenos"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Nezdařilo se připojit k hostiteli"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Zadejte heslo k ftp na %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Dialog zadání hesla zrušen"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp na %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp jako %s na %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Soubor je adresářem"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "zálohy zatím nejsou podporovány"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "název souboru je příliš dlouhý"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Neplatný název cílového souboru"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Adresář nebo soubor existuje"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Neexistuje žádný takový soubor nebo adresář"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Neplatný název souboru"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Nepodporováno"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digitální fotoaparát (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Fotoaparát %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Zvukový přehrávač %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Fotoaparát"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Zvukový přehrávač"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Nezdařilo se získání seznamu složek"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Nezadáno žádné zařízení"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Nelze vytvořit kontext gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Chyba při vytváření prvku fotoaparátu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Chyba při nahrávání informací o zařízení"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Chyba při vyhledávání informací o zařízení"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Chyba při získávání informací o zařízení"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Chyba při nastavování komunikačního portu fotoaparátu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Chyba při spouštění fotoaparátu"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "připojení gphoto2 na %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Nebyl zadán žádný fotoaparát"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Chyba při vytváření objektu souboru"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Chyba při získávání souboru"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Chyba při získávání dat ze souboru"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Chyba při hledání v proudu ve fotoaparátu %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Není adresářem"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Nezdařilo se získání seznamu souborů"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Chyba při vytváření adresáře"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Název již existuje"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Nový název je příliš dlouhý"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Chyba při přejmenovávání adresáře"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Chyba při přejmenovávání souboru"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Adresář \"%s\" není prázdný"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Chyba při mazání adresáře"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Chyba při mazání souboru"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "Nelze zapisovat do adresáře"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Nelze alokovat nový soubor, ke kterému má proběhnout přidání"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Nelze přečíst soubor, ke kterému má proběhnout přidání"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Nelze získat data souboru, ke kterému má proběhnout přidání"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Chyba při zápisu souboru"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Nepodporováno (nejedná se o stejný adresář)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Nepodporováno (zdroj je adresář, cíl je adresář)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Nepodporováno (zdroj je adresář, cíl je existující soubor)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Nepodporováno (zdroj je soubor, cíl je adresář)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Klientská chyba HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (neplatné kódování)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Adresářové upozornění nepodporováno"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Síť Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Místní síť"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Sledování síťových umístění"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s na %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Ztraceno spojení se zařízením"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Zařízení vyžaduje softwarovou aktualizaci"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "program ssh neočekávaně skončil"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Název hostitele není znám"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "K hostiteli neexistuje cesta"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Spojení odmítnuto serverem"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Ověření klíče hostitele selhalo"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Nelze spustit program ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Nelze spustit program ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Při přihlašování vypršel časový limit"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Zadejte heslo ke klíči"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Zadejte heslo"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Nelze odeslat heslo"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Přesto se přihlásit"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Zrušit přihlášení"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Identita vzdáleného počítače (%s) je neznámá.\n"
-"K tomuto dochází v případě prvního přihlášení k počítači.\n"
-"\n"
-"Identita zaslaná vzdáleným počítačem má podobu %s. Chcete-li mít jistotu, že "
-"je bezpečné pokračovat, kontaktujte prosím správce systému."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Přihlašovací dialog zrušen"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Nelze odeslat potvrzení identity hostitele"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Chyba protokolu"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp na %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Nezdařilo se nalézt podporovaný příkaz ssh"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Selhání"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Přijata neplatná odpověď"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Chyba při vytváření záložního souboru: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Nelze vytvořit dočasný soubor"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Nelze přesunout adresář nad adresář"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Ke sdílení %s na %s je vyžadováno heslo"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Vnitřní chyba (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Selhalo připojení sdílení Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Nepodporovaný typ hledání"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Tvorba záložního souboru selhala: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Chyba při mazání souboru: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Chyba při přesouvání souboru: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Chyba při odstraňování cílového souboru: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Nelze rekurzivně přesunout adresář"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Služba systému souborů sdílení prostředků Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Sdílení Windows na %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Soubor není připojitelný"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Není obyčejným souborem"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Služba systému souborů sítě Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Koš"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (v koši)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Nelze smazat koš"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Upozornění adresáře koše není podporováno"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Neplatný typ podpůrné vrstvy"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Chyba při odesílání fd: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Symbolické odkazy nejsou podpůrnou vrstvou podporovány"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Neplatná zpráva dbus"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Nahradit starého démona."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Nespouštět fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Démon GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Hlavní démon GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Více informací viz \"%s --help\"."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Neplatné argumenty od spouštěného potomka"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automatické připojení selhalo: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Zadané umístění není připojeno"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Zadané umístění není podporováno"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Umístění je již připojeno"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Umístění není připojitelné"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-R"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Mechanika %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Mechanika %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Disketová mechanika"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Softwarové zařízení RAID"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Mechanika USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Mechanika ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Mechanika SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Mechanika FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Pásková mechanika"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Mechanika CompactFlash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Mechanika MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Mechanika SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Mechanika SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Mechanika Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Mechanika Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Přenosná mechanika"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Velkokapacitní mechanika"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Nezdařilo se vysunutí média, jeden nebo více svazků na médiu je zaneprázdněn."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "Smíšené zvukové a datové CD"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "Médium %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s - šifrovaná data"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Disk CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Prázdný disk CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Disk CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Prázdný disk CD-R"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Disk CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Prázdný disk CD-RW"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Disk DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Prázdný disk DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Disk DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Prázdný disk DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Disk DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Prázdný disk DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Disk DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Prázdný disk DVD+R"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Disk DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Prázdný disk DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Disk DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Prázdný disk DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Disk Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Prázdný disk Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Disk Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Prázdný disk Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Disk Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Prázdný disk Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Disk HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Prázdný disk HD DVD"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Disk HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Prázdný disk HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Disk HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Prázdný disk HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Disk MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Prázdný disk MO"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Disk"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Prázdný disk"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: chyba při otevírání souboru: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, chyba při zápisu do stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: chyba při čtení: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: chyba při zavírání: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "UMÍSTĚNÍ... - spojit UMÍSTĚNÍ do standardního výstupu."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Spojit soubory v umístěních a vypsat na standardní výstup. Pracuje přesně "
-"jako obvyklý nástroj cat, ale namísto místních souborů používá umístění "
-"gvfs: například je ke spojení možné jako umístění použít smb://server/"
-"prostredek/soubor.txt."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Poznámka: je-li třeba formátovací volby typu -n, -T apod., stačí použít "
-"rouru pomocí cat."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: scházejí umístění"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: chyba při otevírání umístění: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: chyba při spouštění aplikace: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "SOUBORY... - otevřít SOUBORY s registrovanými aplikacemi."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Otevře soubor(y) s výchozí aplikací registrovanou k obsluze typu daného "
-"souboru."
diff --git a/po/da.po b/po/da.po
deleted file mode 100644
index d7df2475..00000000
--- a/po/da.po
+++ /dev/null
@@ -1,1367 +0,0 @@
-# Danish translation of gvfs
-# Copyright (C) 2008 Free Software Foundation
-# This file is distributed under the same license as the gvfs package.
-#
-# Ask Hjorth Larsen <asklarsen@gmail.com>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-08 13:49+0000\n"
-"PO-Revision-Date: 2008-03-09 18:29+0100\n"
-"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
-"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:464 ../client/gdaemonfile.c:1867
-msgid "Operation not supported, files on different mounts"
-msgstr "Operationen er ikke tilladt, filer er på forskellige monteringspunkter"
-
-#: ../client/gdaemonfile.c:758
-msgid "Invalid return value from get_info"
-msgstr "Ugyldig returværdi fra get_info"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from query_info"
-msgstr "Ugyldig returværdi fra query_info"
-
-#: ../client/gdaemonfile.c:865
-msgid "Couldn't get stream file descriptor"
-msgstr "Kunne ikke hente fildeskriptor for strømmen"
-
-#: ../client/gdaemonfile.c:897 ../client/gdaemonfile.c:967
-#: ../client/gdaemonfile.c:1026 ../client/gdaemonfile.c:1085
-#: ../client/gdaemonfile.c:1147
-msgid "Invalid return value from open"
-msgstr "Ugyldig returværdi fra open"
-
-#: ../client/gdaemonfile.c:977 ../client/gdaemonfile.c:1036
-#: ../client/gdaemonfile.c:1095 ../client/gdaemonfile.c:1157
-msgid "Didn't get stream file descriptor"
-msgstr "Hentede ikke fildeskriptor for strømmen"
-
-#: ../client/gdaemonfile.c:1209 ../client/gdaemonfile.c:1226
-msgid "Invalid return value from call"
-msgstr "Ugyldig returværdi fra call"
-
-#: ../client/gdaemonfile.c:1505
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Ugyldig returværdi fra get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1549
-msgid "Could not find enclosing mount"
-msgstr "Kunne ikke finde det omsluttende monteringsobjekt"
-
-#: ../client/gdaemonfile.c:1579
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Ugyldigt filnavn %s"
-
-#: ../client/gdaemonfile.c:1621
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Ugyldig returværdi fra query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2012
-msgid "Invalid return value from monitor_dir"
-msgstr "Ugyldig returværdi fra monitor_dir"
-
-#: ../client/gdaemonfile.c:2061
-msgid "Invalid return value from monitor_file"
-msgstr "Ugyldig returværdi fra monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Fejl i strømprotokol: %s"
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr "Slutning af strøm"
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendobexftp.c:774
-#: ../daemon/gvfsbackendobexftp.c:795 ../daemon/gvfsbackendobexftp.c:914
-#: ../daemon/gvfsbackendobexftp.c:1051 ../daemon/gvfsbackendobexftp.c:1115
-#: ../daemon/gvfsbackendobexftp.c:1252 ../daemon/gvfsbackendobexftp.c:1279
-#: ../daemon/gvfsbackendobexftp.c:1338 ../daemon/gvfsbackendobexftp.c:1360
-#: ../daemon/gvfsbackendobexftp.c:1420 ../daemon/gvfsbackendobexftp.c:1439
-#: ../daemon/gvfsbackendsmb.c:1015 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:297
-msgid "Operation was cancelled"
-msgstr "Operationen blev annulleret"
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr "Søgning understøttes ikke for denne strøm"
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr "Query-info-operationen understøttes ikke"
-
-#: ../client/gdaemonvfs.c:731
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Fejl under indhentning af monteringsinformation: %s"
-
-#: ../client/gvfsdaemondbus.c:559 ../client/gvfsdaemondbus.c:946
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Fejl ved forbindelse til dæmon: %s"
-
-#: ../common/gsysutils.c:133
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Fejl ved oprettelse af sokkel: %s"
-
-#: ../common/gsysutils.c:171
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Fejl ved forbindelse til sokkel: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Ugyldig filinformationsformat"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Ugyldigt indhold af attribut-infoliste"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Fejl ved forbindelse til D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s-filsystemstjeneste"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Fejl: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Brug: %s --spawner dbus-id objektsti"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Brug: %s nøgle=værdi nøgle=værdi ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Ingen monteringstype angivet"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "monteringspunkt for %s kører allerede"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "fejl ved opstart af monteringsdæmon"
-
-# name of the backend? Så må vi hellere være forsigtige
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr "Burn"
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr "Kan ikke oprette midlertidig mappe"
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr "Filen eller mappen findes ikke"
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1804
-msgid "Directory not empty"
-msgstr "Mappen er ikke tom"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr "Kan ikke kopiere fil over mappe"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "CD/DVD Creator"
-
-#: ../daemon/gvfsbackendburn.c:681 ../daemon/gvfsbackendcomputer.c:652
-#: ../daemon/gvfsbackenddnssd.c:393 ../daemon/gvfsbackendftp.c:846
-#: ../daemon/gvfsbackendnetwork.c:637
-#, c-format
-msgid "The file is not a directory"
-msgstr "Filen er ikke en mappe"
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "Filen findes"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr "Filen eller mappen findes ikke i destinationsstien"
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr "Kan ikke kopiere mappe over mappen"
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr "Destinationsfilen findes"
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr "Kan ikke kopiere mappen rekursivt"
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr "Ikke understøttet"
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr "Intet drev angivet"
-
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Kan ikke finde drevet %s"
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Drevet %s indeholder ikke lydfiler"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda-montering på %s"
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:492 ../hal/ghalvolume.c:298 ../hal/ghalvolume.c:319
-#, c-format
-msgid "Audio Disc"
-msgstr "Audio-disk"
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Filsystemet er optaget: %d åben fil"
-msgstr[1] "Filsystemet er optaget: %d åbne filer"
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Filen %s findes ikke på drevet %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Fejl fra \"paranoia\" på drevet %s"
-
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Fejl ved søgning i strøm på drevet %s"
-
-#: ../daemon/gvfsbackendcdda.c:818 ../daemon/gvfsbackendgphoto2.c:1695
-#, c-format
-msgid "No such file"
-msgstr "Filen findes ikke"
-
-#: ../daemon/gvfsbackendcdda.c:825 ../daemon/gvfsbackendcomputer.c:573
-#: ../daemon/gvfsbackenddnssd.c:345 ../daemon/gvfsbackendftp.c:1955
-#: ../daemon/gvfsbackendnetwork.c:590 ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:866 ../daemon/gvfsbackendsmbbrowse.c:1037
-#: ../daemon/gvfsbackendsmbbrowse.c:1111
-#, c-format
-msgid "File doesn't exist"
-msgstr "Filen findes ikke"
-
-#: ../daemon/gvfsbackendcdda.c:832
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Filen findes ikke eller er ikke et lydspor"
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr "Filsystemstjeneste for Audio-CD"
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr "Computer"
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr "Filsystem"
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendgphoto2.c:1687
-#: ../daemon/gvfsbackendobexftp.c:760 ../daemon/gvfsbackendtrash.c:637
-msgid "Can't open directory"
-msgstr "Kan ikke åbne mappe"
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr "Kan ikke åbne monterbar fil"
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr "Intern fejl: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:930
-msgid "Can't mount file"
-msgstr "Kan ikke montere fil"
-
-#: ../daemon/gvfsbackendcomputer.c:825
-msgid "No media in the drive"
-msgstr "Intet medie i drevet"
-
-#: ../daemon/gvfsbackendcomputer.c:882 ../daemon/gvfsbackendcomputer.c:973
-#: ../daemon/gvfsbackendcomputer.c:1073
-msgid "Not a mountable file"
-msgstr "Ikke en monterbar fil"
-
-#: ../daemon/gvfsbackendcomputer.c:988
-msgid "Can't unmount file"
-msgstr "Kan ikke afmontere fil"
-
-# ??
-#: ../daemon/gvfsbackendcomputer.c:1104
-msgid "Can't eject file"
-msgstr "Kan ikke skubbe filen ud"
-
-#: ../daemon/gvfsbackenddav.c:269 ../daemon/gvfsbackenddav.c:1289
-#: ../daemon/gvfsbackendhttp.c:220
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP-fejl: %s"
-
-#: ../daemon/gvfsbackenddav.c:285
-msgid "Could not parse response"
-msgstr "Kunne ikke fortolke svaret"
-
-#: ../daemon/gvfsbackenddav.c:294
-msgid "Empty response"
-msgstr "Tomt svar"
-
-#: ../daemon/gvfsbackenddav.c:301
-msgid "Unexpected reply from server"
-msgstr "Uventet svar fra server"
-
-#: ../daemon/gvfsbackenddav.c:944 ../daemon/gvfsbackenddav.c:1421
-#, c-format
-msgid "Response invalid"
-msgstr "Ugyldigt svar"
-
-#: ../daemon/gvfsbackenddav.c:1087
-msgid "WebDAV share"
-msgstr "WebDAV-tjeneste"
-
-#: ../daemon/gvfsbackenddav.c:1089
-#, c-format
-msgid "Enter password for %s"
-msgstr "Indtast kodeord for %s"
-
-# proxy? Nå, vi skriver det bare...
-#: ../daemon/gvfsbackenddav.c:1092
-msgid "Please enter proxy password"
-msgstr "Indtast venligst et proxy-kodeord"
-
-#: ../daemon/gvfsbackenddav.c:1206 ../daemon/gvfsbackendhttp.c:273
-#: ../daemon/gvfsbackendobexftp.c:605 ../daemon/gvfsbackendobexftp.c:616
-#: ../daemon/gvfsbackendsmb.c:595
-msgid "Invalid mount spec"
-msgstr "Ugyldig monteringsspecifikation"
-
-#: ../daemon/gvfsbackenddav.c:1293 ../daemon/gvfsbackenddav.c:1297
-msgid "Not a WebDAV enabled share"
-msgstr "Ikke en WebDAV-aktiveret deling"
-
-#: ../daemon/gvfsbackenddav.c:1319
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV på %s"
-
-#: ../daemon/gvfsbackenddav.c:1377 ../daemon/gvfsbackenddav.c:1448
-msgid "Could not create request"
-msgstr "Kunne ikke oprette forespørgsel"
-
-#: ../daemon/gvfsbackenddav.c:1511 ../daemon/gvfsbackenddav.c:1764
-#: ../daemon/gvfsbackendftp.c:1558 ../daemon/gvfsbackendftp.c:2189
-#: ../daemon/gvfsbackendsmb.c:1701
-#, c-format
-msgid "Target file already exists"
-msgstr "Destinationsfilen findes allerede"
-
-#: ../daemon/gvfsbackenddav.c:1584 ../daemon/gvfsbackendsftp.c:2662
-#: ../daemon/gvfsbackendsmb.c:983
-msgid "The file was externally modified"
-msgstr "Filen blev modificeret udefra"
-
-#: ../daemon/gvfsbackenddav.c:1615 ../daemon/gvfsbackendsmb.c:1021
-#: ../daemon/gvfsbackendsmb.c:1718
-msgid "Backup file creation failed"
-msgstr "Oprettelse af sikkerhedskopi af filen slog fejl"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dsn-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Kan ikke overvåge fil eller mappe."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Netværk"
-
-#: ../daemon/gvfsbackendftp.c:224
-msgid "Accounts are unsupported"
-msgstr "Kontoerne understøttes ikke"
-
-#: ../daemon/gvfsbackendftp.c:228
-msgid "Host closed connection"
-msgstr "Værten lukkede forbindelsen"
-
-#: ../daemon/gvfsbackendftp.c:232
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Kan ikke åbne dataforbindelse. Bliver det forhindret af din brandmur?"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Data connection closed"
-msgstr "Dataforbindelse lukket"
-
-#: ../daemon/gvfsbackendftp.c:242
-msgid "File unavailable"
-msgstr "Filen utilgængelig"
-
-#: ../daemon/gvfsbackendftp.c:246
-msgid "Operation failed"
-msgstr "Operationen slog fejl"
-
-#: ../daemon/gvfsbackendftp.c:251
-msgid "No space left on server"
-msgstr "Ikke mere plads på serveren"
-
-#: ../daemon/gvfsbackendftp.c:259 ../daemon/gvfsbackendsftp.c:3684
-msgid "Operation unsupported"
-msgstr "Operationen understøttes ikke"
-
-#: ../daemon/gvfsbackendftp.c:263 ../daemon/gvfsbackendsftp.c:259
-msgid "Permission denied"
-msgstr "Adgang nægtet"
-
-#: ../daemon/gvfsbackendftp.c:267
-msgid "Page type unknown"
-msgstr "Ukendt sidetype"
-
-#: ../daemon/gvfsbackendftp.c:271 ../daemon/gvfsbackendftp.c:2059
-#, c-format
-msgid "Invalid filename"
-msgstr "Ugyldigt filnavn"
-
-#: ../daemon/gvfsbackendftp.c:275 ../daemon/gvfsbackendftp.c:349
-#: ../daemon/gvfsbackendftp.c:378 ../daemon/gvfsbackendftp.c:397
-#: ../daemon/gvfsbackendftp.c:410 ../daemon/gvfsbackendftp.c:751
-#, c-format
-msgid "Invalid reply"
-msgstr "Ugyldigt svar"
-
-#: ../daemon/gvfsbackendftp.c:517
-#, c-format
-msgid "broken transmission"
-msgstr "transmission afbrudt"
-
-#: ../daemon/gvfsbackendftp.c:611 ../daemon/gvfsbackendftp.c:771
-#, c-format
-msgid "Could not connect to host"
-msgstr "Kunne ikke forbinde til værten"
-
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendftp.c:897 ../daemon/gvfsbackendsftp.c:1736
-#, c-format
-msgid "/ on %s"
-msgstr "/ på %s"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1259
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Indtast kodeord for ftp på %s"
-
-#: ../daemon/gvfsbackendftp.c:1279 ../daemon/gvfsbackendsftp.c:833
-msgid "Password dialog cancelled"
-msgstr "Kodeordsdialog afbrudt"
-
-#: ../daemon/gvfsbackendftp.c:1345
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp på %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1351
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp som %s på %s"
-
-#: ../daemon/gvfsbackendftp.c:1385 ../daemon/gvfsbackendsftp.c:1410
-msgid "No hostname specified"
-msgstr "Intet værtsnavn angivet"
-
-#: ../daemon/gvfsbackendftp.c:1608 ../daemon/gvfsbackendftp.c:2150
-msgid "backups not supported yet"
-msgstr "sikkerhedskopier understøttes endnu ikke"
-
-#: ../daemon/gvfsbackendftp.c:1684
-#, c-format
-msgid "filename too long"
-msgstr "filnavnet er for langt"
-
-#: ../daemon/gvfsbackendftp.c:2169
-#, c-format
-msgid "Invalid destination filename"
-msgstr "Ugyldigt destinationsfilnavn"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:697
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digitalkamera (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:843 ../hal/ghalvolume.c:398
-#, c-format
-msgid "%s Camera"
-msgstr "%s-kamera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:846 ../hal/ghalvolume.c:393
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s-lydafspiller"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../hal/ghalvolume.c:407
-msgid "Camera"
-msgstr "Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:857 ../hal/ghalvolume.c:405
-msgid "Audio Player"
-msgstr "Lydafspiller"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1539
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2-montering på %s"
-
-#: ../daemon/gvfsbackendhttp.c:216
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP-klientfejl: %s"
-
-#: ../daemon/gvfsbackendhttp.c:534 ../daemon/gvfsbackendsftp.c:1724
-#: ../daemon/gvfsbackendsmb.c:1230 ../daemon/gvfsbackendtrash.c:962
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (ugyldig kodning)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Mappeunderrettelse understøttes ikke"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:694
-msgid "Windows Network"
-msgstr "Windows-netværk"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Lokalt netværk"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Netværksstedsovervåger"
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:444 ../daemon/gvfsbackendsmb.c:514
-#: ../daemon/gvfsbackendsmb.c:1223
-#, c-format
-msgid "%s on %s"
-msgstr "%s på %s"
-
-#: ../daemon/gvfsbackendsftp.c:251
-msgid "ssh program unexpectedly exited"
-msgstr "ssh-programmet afsluttede uventet"
-
-#: ../daemon/gvfsbackendsftp.c:266
-msgid "Hostname not known"
-msgstr "Ukendt værtsnavn"
-
-#: ../daemon/gvfsbackendsftp.c:273
-msgid "No route to host"
-msgstr "Ingen rute til vært"
-
-#: ../daemon/gvfsbackendsftp.c:280
-msgid "Connection refused by server"
-msgstr "Forbindelse nægtet af server"
-
-#: ../daemon/gvfsbackendsftp.c:287
-msgid "Host key verification failed"
-msgstr "Godkendelse af værtsnøgle slog fejl"
-
-#: ../daemon/gvfsbackendsftp.c:370
-msgid "Unable to spawn ssh program"
-msgstr "Kunne ikke starte ny instans af ssh-program"
-
-#: ../daemon/gvfsbackendsftp.c:386
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Kunne ikke starte ny instans af ssh-program: %s"
-
-#: ../daemon/gvfsbackendsftp.c:489 ../daemon/gvfsbackendsftp.c:741
-msgid "Timed out when logging in"
-msgstr "Tidsudløb ved indlogning"
-
-#: ../daemon/gvfsbackendsftp.c:817
-msgid "Enter passphrase for key"
-msgstr "Indtast adgangskode for nøgle"
-
-#: ../daemon/gvfsbackendsftp.c:819
-msgid "Enter password"
-msgstr "Indtast kodeord"
-
-#: ../daemon/gvfsbackendsftp.c:880
-msgid "Can't send password"
-msgstr "Kan ikke sende kodeord"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Log In Anyway"
-msgstr "Log ind alligevel"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Cancel Login"
-msgstr "Afbryd indlogning"
-
-#: ../daemon/gvfsbackendsftp.c:898
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Identiteten af den fjerne computer (%s) er ukendt.\n"
-"Dette sker når du logger ind på en computer første gang.\n"
-"\n"
-"Identiteten som sendes af den fjerne computer er %s. Hvis du vil være fuldstændig sikker på at det er sikkert at fortsætte, så kontakt systemadministratoren."
-
-#: ../daemon/gvfsbackendsftp.c:918
-msgid "Login dialog cancelled"
-msgstr "Logind-dialog afbrudt"
-
-#: ../daemon/gvfsbackendsftp.c:938
-msgid "Can't send host identity confirmation"
-msgstr "Kan ikke sende bekræftelse af værtsidentitet"
-
-#: ../daemon/gvfsbackendsftp.c:1329 ../daemon/gvfsbackendsftp.c:1352
-msgid "Protocol error"
-msgstr "Protokolfejl"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1376
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp på %s"
-
-#: ../daemon/gvfsbackendsftp.c:1400
-msgid "Unable to find supported ssh command"
-msgstr "Kunne ikke finde en understøttet ssh-kommando"
-
-#: ../daemon/gvfsbackendsftp.c:1800
-msgid "File is directory"
-msgstr "Filen er en mappe"
-
-#: ../daemon/gvfsbackendsftp.c:1809
-msgid "Failure"
-msgstr "Mislykkedes"
-
-#: ../daemon/gvfsbackendsftp.c:1874 ../daemon/gvfsbackendsftp.c:1936
-#: ../daemon/gvfsbackendsftp.c:1947 ../daemon/gvfsbackendsftp.c:2005
-#: ../daemon/gvfsbackendsftp.c:2095 ../daemon/gvfsbackendsftp.c:2124
-#: ../daemon/gvfsbackendsftp.c:2172 ../daemon/gvfsbackendsftp.c:2251
-#: ../daemon/gvfsbackendsftp.c:2362 ../daemon/gvfsbackendsftp.c:2403
-#: ../daemon/gvfsbackendsftp.c:2455 ../daemon/gvfsbackendsftp.c:2526
-#: ../daemon/gvfsbackendsftp.c:2546 ../daemon/gvfsbackendsftp.c:2700
-#: ../daemon/gvfsbackendsftp.c:2726 ../daemon/gvfsbackendsftp.c:2783
-#: ../daemon/gvfsbackendsftp.c:2842 ../daemon/gvfsbackendsftp.c:3122
-#: ../daemon/gvfsbackendsftp.c:3251 ../daemon/gvfsbackendsftp.c:3284
-#: ../daemon/gvfsbackendsftp.c:3385 ../daemon/gvfsbackendsftp.c:3426
-#: ../daemon/gvfsbackendsftp.c:3482 ../daemon/gvfsbackendsftp.c:3518
-#: ../daemon/gvfsbackendsftp.c:3552 ../daemon/gvfsbackendsftp.c:3567
-#: ../daemon/gvfsbackendsftp.c:3586 ../daemon/gvfsbackendsftp.c:3664
-msgid "Invalid reply received"
-msgstr "Ugyldigt svar modtaget"
-
-#: ../daemon/gvfsbackendsftp.c:2193
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Fejl ved oprettelse af sikkerhedskopi af fil: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2608
-msgid "Unable to create temporary file"
-msgstr "Kunne ikke oprette midlertidig fil"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:214
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Delingen %s på %s kræver et kodeord"
-
-#: ../daemon/gvfsbackendsmb.c:466 ../daemon/gvfsbackendsmb.c:506
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Intern fejl (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:561
-msgid "Failed to mount Windows share"
-msgstr "Kunne ikke montere Windows-deling"
-
-#: ../daemon/gvfsbackendsmb.c:686 ../daemon/gvfsbackendsmb.c:1117
-msgid "Unsupported seek type"
-msgstr "Uunderstøttet søgningstype"
-
-#: ../daemon/gvfsbackendsmb.c:1171
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Oprettelse af sikkerhedskopifil mislykkedes: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1602
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Fejl ved sletning af fil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1666
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Fejl ved flytning af fil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1690
-msgid "Can't move directory over directory"
-msgstr "Kan ikke flytte mappe over mappe"
-
-#: ../daemon/gvfsbackendsmb.c:1738
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Fejl ved fjernelse af destinationsfil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1762
-msgid "Can't recursively move directory"
-msgstr "Kan ikke flytte mappen rekursivt"
-
-#: ../daemon/gvfsbackendsmb.c:1825
-msgid "Windows Shares Filesystem Service"
-msgstr "Filsystemstjeneste for Windows-delinger"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:702
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windows-delinger på %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:794 ../daemon/gvfsbackendsmbbrowse.c:840
-msgid "The file is not a mountable"
-msgstr "Denne fil kan ikke monteres"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:862
-msgid "Not a regular file"
-msgstr "Ikke en regulær fil"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1107
-msgid "Not a directory"
-msgstr "Ikke en mappe"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1219
-msgid "Windows Network Filesystem Service"
-msgstr "Filsystemstjeneste til Windows-netværk"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:600 ../daemon/gvfsbackendtrash.c:1190
-msgid "Trash"
-msgstr "Papirkurv"
-
-#: ../daemon/gvfsbackendtrash.c:972
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (i papirkurv)"
-
-#: ../daemon/gvfsbackendtrash.c:1291
-msgid "Can't delete trash"
-msgstr "Kan ikke slette affald"
-
-#: ../daemon/gvfsbackendtrash.c:1638 ../daemon/gvfsbackendtrash.c:1713
-msgid "Trash directory notification not supported"
-msgstr "Underrettelse om papirkurvsmappe understøttes ikke"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Ugyldig backend-type"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Fejl ved afsending af fildeskriptor: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:119
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:169 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Operationen understøttes ikke af backend"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Backend understøtter ikke symbolske links"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Ugyldig dbus-meddelelse"
-
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr "Erstat gammel dæmon."
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr "Undlad at starte fuse."
-
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "GVFS-dæmon"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr "Hoveddæmon for GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:74
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:76 ../programs/gvfs-cat.c:165 ../programs/gvfs-cat.c:178
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:388 ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:133 ../programs/gvfs-open.c:146
-#: ../programs/gvfs-save.c:165 ../programs/gvfs-tree.c:253
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Prøv \"%s --help\" for mere information."
-
-# spawn? Det er sådan et halv-reserveret ord, en specifik OS-funktion
-#: ../daemon/mount.c:432
-msgid "Invalid arguments from spawned child"
-msgstr "Ugyldige argumenter fra spawnet underproces"
-
-#: ../daemon/mount.c:731
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automontering mislykkedes: %s"
-
-#: ../daemon/mount.c:776
-msgid "The specified location is not mounted"
-msgstr "Den angivne placering er ikke monteret"
-
-#: ../daemon/mount.c:781
-msgid "The specified location is not supported"
-msgstr "Den angivne placering understøttes ikke"
-
-#: ../daemon/mount.c:944
-msgid "Location is already mounted"
-msgstr "Placeringen er allerede monteret"
-
-#: ../daemon/mount.c:952
-msgid "Location is not mountable"
-msgstr "Placeringen kan ikke monteres"
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:148
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:162
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:165
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:168
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../hal/ghaldrive.c:174
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../hal/ghaldrive.c:180
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:186
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s-drev"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:192
-#, c-format
-msgid "%s Drive"
-msgstr "%s-drev"
-
-#: ../hal/ghaldrive.c:196
-msgid "Floppy Drive"
-msgstr "Diskettedrev"
-
-#: ../hal/ghaldrive.c:202
-msgid "Software RAID Drive"
-msgstr "Sofware-RAID-drev"
-
-#: ../hal/ghaldrive.c:204
-msgid "USB Drive"
-msgstr "USB-drev"
-
-#: ../hal/ghaldrive.c:206
-msgid "ATA Drive"
-msgstr "ATA-drev"
-
-#: ../hal/ghaldrive.c:208
-msgid "SCSI Drive"
-msgstr "SCSI-drev"
-
-#: ../hal/ghaldrive.c:210
-msgid "FireWire Drive"
-msgstr "FireWire-drev"
-
-#: ../hal/ghaldrive.c:214
-msgid "Tape Drive"
-msgstr "Bånddrev"
-
-#: ../hal/ghaldrive.c:216
-msgid "CompactFlash Drive"
-msgstr "CompactFlash-drev"
-
-# MemoryStick bør nok ikke oversættes da det refererer til en bestemt teknologi
-#: ../hal/ghaldrive.c:218
-msgid "MemoryStick Drive"
-msgstr "MemoryStick-drev"
-
-#: ../hal/ghaldrive.c:220
-msgid "SmartMedia Drive"
-msgstr "SmartMedia-drev"
-
-#: ../hal/ghaldrive.c:222
-msgid "SD/MMC Drive"
-msgstr "SD/MMC-drev"
-
-#: ../hal/ghaldrive.c:224
-msgid "Zip Drive"
-msgstr "Zip-drev"
-
-#: ../hal/ghaldrive.c:226
-msgid "Jaz Drive"
-msgstr "Jaz-drev"
-
-#: ../hal/ghaldrive.c:228
-msgid "Thumb Drive"
-msgstr "Thumb-drev"
-
-# wiki: "Devices which support this standard are referred to as MSC (Mass Storage Class) devices. Blahblah..."
-#: ../hal/ghaldrive.c:231
-msgid "Mass Storage Drive"
-msgstr "Mass Storage-drev"
-
-#: ../hal/ghaldrive.c:730
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Kunne ikke skubbe mediet ud; et eller flere drev på mediet er optaget."
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "CD-ROM Disc"
-msgstr "CD-ROM-disk"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "Blank CD-ROM Disc"
-msgstr "Tom CD-ROM-disk"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "CD-R Disc"
-msgstr "CD-R-disk"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "Blank CD-R Disc"
-msgstr "Tom CD-R-disk"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "CD-RW Disc"
-msgstr "CD-RW-disk"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "Blank CD-RW Disc"
-msgstr "Tom CD-RW-disk"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM-disk"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "Blank DVD-ROM Disc"
-msgstr "Tom DVD-ROM-disk"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM-disk"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "Blank DVD-RAM Disc"
-msgstr "Blank DVD-RAM-disk"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "DVD-RW Disc"
-msgstr "DVD-RW-disk"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "Blank DVD-RW Disc"
-msgstr "Tom DVD-RW-disk"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "DVD+R Disc"
-msgstr "DVD+R-disk"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "Blank DVD+R Disc"
-msgstr "Tom DVD+R-disk"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "DVD+RW Disc"
-msgstr "DVD+RW-disk"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "Blank DVD+RW Disc"
-msgstr "Tom DVD+RW-disk"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL-disk"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "Blank DVD+R DL Disc"
-msgstr "Tom DVD+R DL-disk"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray-disk"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blank Blu-Ray Disc"
-msgstr "Tom Blu-Ray-disk"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R-disk"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blank Blu-Ray R Disc"
-msgstr "Tom Blu-Ray R-disk"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW-disk"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Tom Blu-Ray RW-disk"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "HD DVD Disc"
-msgstr "HD DVD-disk"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "Blank HD DVD Disc"
-msgstr "Tom HD DVD-disk"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R-disk"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "Blank HD DVD-R Disc"
-msgstr "Tom HD DVD-R-disk"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW-disk"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "Blank HD DVD-RW Disc"
-msgstr "Tom HD DVD-RW-disk"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "MO Disc"
-msgstr "MO-disk"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "Blank MO Disc"
-msgstr "Tom MO-disk"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Disc"
-msgstr "Disk"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Blank Disc"
-msgstr "Tom disk"
-
-#: ../hal/ghalmount.c:368
-#, c-format
-msgid "%.1f kB Media"
-msgstr "%.1f kB-medie"
-
-#: ../hal/ghalmount.c:373
-#, c-format
-msgid "%.1f MB Media"
-msgstr "%.1f MB-medie"
-
-#: ../hal/ghalmount.c:378
-#, c-format
-msgid "%.1f GB Media"
-msgstr "%.1f GB-medie"
-
-#: ../hal/ghalmount.c:490 ../hal/ghalvolume.c:317
-msgid "Mixed Audio/Data Disc"
-msgstr "Blandet lyd-/datadisk"
-
-#: ../hal/ghalvolume.c:206
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../hal/ghalvolume.c:211
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../hal/ghalvolume.c:216
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:305
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s krypteret data"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:328
-#, c-format
-msgid "%s Media"
-msgstr "%s-medie"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: fejl ved åbning af fil: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, skrivefejl til standard-uddata"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: læsefejl: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: fejl ved lukning: %s\n"
-
-# ??? det er nok en identifier (som det er ok at oversætte)
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "PLACERING... - sammenføj PLACERINGER til standard-uddata."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr "Sammenføj filer på forskellige placeringer og udskriv til standard-uddata. Virker præcis som det traditionelle cat-værktøj, men bruger gvfs-placeringer i stedet for lokale filer: for eksempel kan du skrive smb://server/resource/file.txt som placeringen der skal sammenføjes."
-
-#: ../programs/gvfs-cat.c:150
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr "NB: send dette (pipe) gennem cat hvis du skal bruge cats formatteringstilvalg såsom -n og -T."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:176 ../programs/gvfs-open.c:144
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: mangler placeringer"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: fejl ved åbning af placering: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: fejl ved programopstart: %s\n"
-
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr "FILER... - åbn FILER med registreret program."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr "Åbner filen eller filerne med det forvalgte program for den pågældende filtype."
diff --git a/po/de.po b/po/de.po
deleted file mode 100644
index 198381fd..00000000
--- a/po/de.po
+++ /dev/null
@@ -1,1558 +0,0 @@
-# German gvfs translation
-# Copyright (C) 2007 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gvfs package.
-# Andre Klapper <ak-47@gmx.net>, 2008.
-# Hendrik Brandt <heb@gnome-de.org>, 2008.
-# Hendrik Richter <hendrikr@gnome.org>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs trunk\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-28 08:20+0200\n"
-"PO-Revision-Date: 2008-08-28 08:20+0200\n"
-"Last-Translator: Hendrik Richter <hendrikr@gnome.org>\n"
-"Language-Team: German <gnome-de@gnome.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-"Vorgang wird nicht unterstützt, die Dateien liegen an verschiedenen "
-"Speicherorten"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Ungültiger Rückgabewert von get_info"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Ungültiger Rückgabewert von query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Beschreibung des Datenstroms konnte nicht geholt werden"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "Ungültiger Rückgabewert von open"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Beschreibung des Datenstroms konnte nicht geholt werden"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Ungültiger Rückgabewert von call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Ungültiger Rückgabewert von get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Es wurde kein gültiger Speicherort gefunden"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Ungültiger Dateiname %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Ungültiger Rückgabewert von query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "Ungültiger Rückgabewert von monitor_dir"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "Ungültiger Rückgabewert von monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Fehler im Datenstromprotokoll: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Ende des Datenstroms"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Vorgang wurde abgebrochen"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Durchsuchen im Datenstrom wird nicht unterstützt"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Das Abfragen von Informationen wird nicht unterstützt"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Das Abfragen von Informationen im Datenstrom wird nicht unterstützt"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Fehler beim Abfragen von Informationen zum Speicherort: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Fehler beim Verbinden zum Dienst: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Fehler beim Erstellen des Socket: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Fehler beim Verbinden zum Socket: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Ungültiges Dateiinfo-Format"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Ungültiger Inhalt der Attributinfoliste"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Fehler beim Verbinden zu D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s-Dateisystem-Dienst"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Fehler: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Aufruf: %s --spawner DBus-ID object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Aufruf: %s Schlüssel=Wert Schlüssel=Wert …"
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Kein Mount-Typ angegeben"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "Speicherort für %s wird bereits verwendet"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "Fehler beim Starten des Einhänge-Dienstes"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ auf %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Kein Server-Name angegeben"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Ungültige Mount-Spezifikation"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Datei existiert nicht"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Die Datei ist kein Ordner"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Brennen"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Temporärer Ordner konnte nicht erzeugt werden"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Unbekannte Datei oder unbekannter Ordner"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Ordner ist nicht leer"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "Datei kann nicht über einen Ordner kopiert werden"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD-Ersteller"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Datei existiert bereits"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "Keine solche Datei und kein solcher Ordner im Zielpfad"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "Ordner kann nicht über einen Ordner kopiert werden"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "Zieldatei existiert bereits"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "Ordner kann nicht rekursiv kopiert werden"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Nicht unterstützt"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Keine Verbindung zum System-Bus möglich"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "libhal-Kontext konnte nicht erstellt werden"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "libhal konnte nicht initialisiert werden"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Kein Laufwerk angegeben"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Laufwerk %s konnte nicht gefunden werden"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Laufwerk %s enthält keine Audiodateien"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "CDDA-Medium in %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Audio-CD"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Dateisystem ist beschäftigt: %d geöffnete Datei"
-msgstr[1] "Dateisystem ist beschäftigt: %d geöffnete Dateien"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Keine Datei %s auf Laufwerk %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Fehler von »paranoia« auf Laufwerk %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Fehler beim Durchlaufen des Datenstroms auf Laufwerk %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Unbekannte Datei"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Die Datei existiert nicht oder ist kein Audiotitel"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Audio-CD-Dateisystem-Dienst"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Rechner"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Dateisystem"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "Ordner konnte nicht geöffnet werden"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Einhängbare Datei konnte nicht geöffnet werden"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Interner Fehler: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Datei konnte nicht eingehängt werden"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Kein Medium im Laufwerk"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Keine einhängbare Datei"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Datei konnte nicht ausgehängt werden"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Datei konnte nicht ausgeworfen werden"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP-Fehler: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Antwort konnte nicht verarbeitet werden"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Leere Antwort"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Unerwartete Antwort vom Server"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Antwort ungültig"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV-Speicher"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Bitte Passwort für %s eingeben"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Bitte geben Sie das Proxy-Passwort ein"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Kein WebDAV-fähiger Speicher"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV auf %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Anfrage konnte nicht erstellt werden"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Zieldatei existiert bereits"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Die Datei wurde extern verändert"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Anlegen der Sicherheitskopie fehlgeschlagen"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Datei oder Ordner kann nicht überwacht werden."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Netzwerk"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Konten werden nicht unterstützt"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Verbindung wurde von Gegenstelle getrennt"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Es konnte keine Datenverbindung hergestellt werden. Wird dies eventuell von "
-"Ihrer Firewall unterbunden?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Datenverbindung geschlossen"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Vorgang fehlgeschlagen"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Der Speicherplatz auf dem Server ist aufgebraucht"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Vorgang wird nicht unterstützt"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Zugriff verweigert"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Unbekannter Seitentyp"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Ungültiger Dateiname"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Ungültige Antwort"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "beschädigte Übertragung"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Keine Verbindung zum Zielrechner möglich"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Bitte Passwort für FTP auf %s eingeben"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Passwortdialog abgebrochen"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "FTP auf %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "FTP als %s auf %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Datei ist ein Ordner"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "Sicherheitskopien werden derzeit nicht unterstützt"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "Dateiname ist zu lang"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Ungültiger Zieldateiname"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Ordner oder Datei existiert bereits"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Unbekannte Datei oder unbekannter Ordner"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Ungültiger Dateiname"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Nicht unterstützt"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digitalkamera (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s Kamera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s Musik-Player"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Musik-Player"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Ordnerliste konnte nicht abgerufen werden"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Kein Gerät angegeben"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "gphoto2-Kontext konnte nicht erstellt werden"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Fehler beim Erstellen der Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Fehler beim Laden der Geräteinformationen"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Fehler beim Nachschlagen der Geräteinformationen"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Fehler beim Abrufen der Geräteinformationen"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Fehler beim Einrichten des Kamera-Kommunikationsports"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Fehler beim Initialisieren der Kamera"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2-Medium auf %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Keine Kamera angegeben"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Fehler beim Anlegen des Dateiobjekts"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Fehler beim Abrufen der Datei"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Fehler beim Auslesen der Datei"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Fehler beim Durchlaufen des Datenstroms auf Kamera %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Kein Ordner"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Dateiliste konnte nicht abgerufen werden"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Fehler beim Erstellen des Ordners"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Name existiert bereits"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Neuer Dateiname ist zu lang"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Fehler beim Umbenennen des Ordners"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Fehler beim Umbenennen der Datei"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Ordner »%s« ist nicht leer"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Fehler beim Löschen des Ordners"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Fehler beim Löschen der Datei"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "In Ordner konnte nicht geschrieben werden"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Zu schreibende Datei konnte nicht reserviert werden"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Zu schreibende Datei konnte nicht gelesen werden"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Zu schreibende Datei konnte nicht ausgelesen werden"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Fehler beim Schreiben der Datei"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Nicht unterstützt (nicht der selbe Ordner)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Nicht unterstützt (Quelle und Ziel sind Ordner)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr ""
-"Nicht unterstützt (Quelle ist Ordner, Ziel ist bereits existierende Datei)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Nicht unterstützt (Quelle ist Datei, Ziel ist Ordner)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP-Client-Fehler: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (ungültige Kodierung)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Ordnerbenachrichtigung wird nicht unterstützt"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows-Netzwerk"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Lokales Netzwerk"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Rechner im Netzwerk"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s auf %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Verbindung zum Gerät getrennt"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Gerät benötigt eine Aktualisierung der Software"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "Das SSH-Programm wurde unerwartet beendet"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Unbekannter Server-Name"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Keine Verbindung zum Server"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Verbindung wurde vom Server verweigert"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Überprüfung des Server-Schlüssels fehlgeschlagen"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Das SSH-Programm konnte nicht gestartet werden"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Das SSH-Programm konnte nicht gestartet werden: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Zeitüberschreitung beim Anmelden"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Bitte geben Sie das Passwort für den Schlüssel ein"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Passwort eingeben"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Passwort kann nicht gesendet werden"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Dennoch anmelden"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Anmelden abbrechen"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Die Identität des entfernten Rechners (%s) ist unbekannt.\n"
-"Dies ist der Fall, wenn Sie sich das erste Mal an einem Rechner anmelden.\n"
-"\n"
-"Die vom entfernten Rechner übermittelte Identität ist %s. Wenn Sie vor dem "
-"Fortfahren absolut sicher gehen wollen, dann kontaktieren Sie Ihren "
-"Systemadministrator."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Anmeldedialog abgebrochen"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Identitätsbestätigung konnte nicht gesendet werden"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Protokollfehler"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "SFTP auf %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Es konnte kein unterstütztes SSH-Programm gefunden werden"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Fehler"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Ungültige Antwort erhalten"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Fehler beim Anlegen der Sicherheitskopie: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Temporäre Datei konnte nicht erzeugt werden"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Ordner kann nicht über einen Ordner verschoben werden"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Für den Speicherort %s auf %s wird ein Passwort benötigt"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Interner Fehler (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Einhängen des Windows-Speichers fehlgeschlagen"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Nicht unterstützter Suchtyp"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Anlegen der Sicherheitskopie fehlgeschlagen: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Fehler beim Löschen der Datei: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Fehler beim Verschieben der Datei: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Fehler beim Löschen der Zieldatei: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Ordner kann nicht rekursiv verschoben werden"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows-Speicher-Dateisystem-Dienst"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windows-Speicher auf %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Die Datei ist nicht einhängbar"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Keine gültige Datei"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windows-Netzwerk-Dateisystem-Dienst"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Müll"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (im Müll)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Der Müll kann nicht gelöscht werden"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Benachrichtigung des Müllordners wird nicht unterstützt"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Ungültiger Backend-Typ"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Fehler beim Senden von fd: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:150
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Vorgang wird vom Backend nicht unterstützt"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Verknüpfungen werden vom Backend nicht unterstützt"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Ungültige DBus-Nachricht"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Alten Dienst ersetzen."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "FUSE nicht starten."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS-Dienst"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Hauptdienst für GVFS."
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Versuchen Sie »%s --help« für mehr Informationen"
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Ungültige Argumente vom erzeugten Kindprozess"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automatisches Einhängen gescheitert: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Der angegebene Ort ist nicht eingehängt"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Der angegebene Ort wird nicht unterstützt"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Ort ist bereits eingehängt"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Ort kann nicht eingehängt werden"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s-/%s-Laufwerk"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Diskettenlaufwerk"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Software-RAID-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Bandlaufwerk"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "USB-Stick"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Massenspeicher-Laufwerk"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Medium konnte nicht ausgeworfen werden. Ein oder mehr Speicherorte auf dem "
-"Medium sind noch aktiv."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f KB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Gemischtes Audio- und Daten-Medium"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "%s Medium"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s Verschlüsselte Daten"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Leere CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Leere CD-R"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Leere CD-RW"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Leere DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Leere DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Leere DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Leere DVD+R"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Leere DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Leere DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray-Disc"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Leere Blu-Ray-Disc"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray-R-Disc"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Leere Blu-Ray-R-Disc"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray-RW-Disc"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Leere Blu-Ray-RW-Disc"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD-DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Leere HD-DVD"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD-DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Leere HD-DVD-R"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Leere HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO-Medium"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Leeres MO-Medium"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Medium"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Leeres Medium"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: Fehler beim Öffnen der Datei: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s: Fehler beim Schreiben auf die Standardausgabe"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: Fehler beim Lesen: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:Fehler beim Schließen: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "ORT … ‒ aneinanderhängen der ORTE auf der Standardausgabe."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Verbindet die über ihre Orte angegebenen Dateien und gibt sie auf der "
-"Standardausgabe aus. Die Funktionsweise ist vergleichbar mit der des "
-"herkömmlichen cat-Programms, jedoch werden gvfs-Orte statt lokaler Dateien "
-"verwendet; z.B. können Sie als Ort etwas wie »smb://server/ressource/datei."
-"txt« angeben."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Hinweis: Verwenden Sie »cat«, falls Sie dessen Formatierungsoptionen wie z.B. "
-"»-n«, »-T« oder andere benötigen."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: keine Orte angegeben"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: Fehler beim Öffnen des Ortes: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: Fehler beim Starten der Anwendung: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "DATEIEN … ‒ DATEIEN mit der empfohlenen Anwendung öffnen."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Öffnet die Dateien mit der Anwendung, die als Standard für diesen Dateityp "
-"eingestellt ist."
-
-#~ msgid "File unavailable"
-#~ msgstr "Datei nicht verfügbar"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "%.1fKB-Medium"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "%.1fMB-Medium"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "%.1fGB-Medium"
diff --git a/po/el.po b/po/el.po
deleted file mode 100644
index 13f79f49..00000000
--- a/po/el.po
+++ /dev/null
@@ -1,1408 +0,0 @@
-# translation of el.po to Greek
-# Simos Xenitellis <simos@gnome.org>, 2008.
-# Kostas Papadimas <pkst@gnome.org>, 2008.
-# translation of gvfs to Greek
-msgid ""
-msgstr ""
-"Project-Id-Version: el\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-10 18:32+0200\n"
-"PO-Revision-Date: 2008-03-10 18:34+0200\n"
-"Last-Translator: Kostas Papadimas <pkst@gnome.org>\n"
-"Language-Team: Greek <team@gnome.gr>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: ../client/gdaemonfile.c:464 ../client/gdaemonfile.c:1867
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-"Δεν υποστηρίζεται η λειτουργία διότι τα αρχεία βρίσκονται σε διαφορετικές "
-"προσαρτήσεις"
-
-#: ../client/gdaemonfile.c:758
-msgid "Invalid return value from get_info"
-msgstr "Μη έγκυρη απάντηση από get_info"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from query_info"
-msgstr "Μη έγκυρη απάντηση από query_info"
-
-#: ../client/gdaemonfile.c:865
-msgid "Couldn't get stream file descriptor"
-msgstr "Αδύνατη η λήψη περιγραφέα αρχείου stream"
-
-#: ../client/gdaemonfile.c:897 ../client/gdaemonfile.c:967
-#: ../client/gdaemonfile.c:1026 ../client/gdaemonfile.c:1085
-#: ../client/gdaemonfile.c:1147
-msgid "Invalid return value from open"
-msgstr "Μη έγκυρη απάντηση από open"
-
-#
-#: ../client/gdaemonfile.c:977 ../client/gdaemonfile.c:1036
-#: ../client/gdaemonfile.c:1095 ../client/gdaemonfile.c:1157
-msgid "Didn't get stream file descriptor"
-msgstr "Αδύνατη η λήψη περιγραφέα αρχείου stream"
-
-#: ../client/gdaemonfile.c:1209 ../client/gdaemonfile.c:1226
-msgid "Invalid return value from call"
-msgstr "Μη έγκυρη τιμή επιστροφής από call"
-
-#: ../client/gdaemonfile.c:1505
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Μη έγκυρη τιμή επιστροφής από get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1549
-msgid "Could not find enclosing mount"
-msgstr "Αδυναμία εύρεσης εσώκλειστης προσάρτησης"
-
-#: ../client/gdaemonfile.c:1579
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Ακατάλληλο όνομα αρχείου %s"
-
-#: ../client/gdaemonfile.c:1621
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Μη έγκυρη τιμή επιστροφής από query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2012
-msgid "Invalid return value from monitor_dir"
-msgstr "Μη έγκυρη τιμή επιστροφής απόmonitor_dir"
-
-#: ../client/gdaemonfile.c:2061
-msgid "Invalid return value from monitor_file"
-msgstr "Μη έγκυρη τιμή επιστροφής από monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Σφάλμα στο πρωτόκολλο stream: %s"
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr "Τέλος stream"
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendobexftp.c:774
-#: ../daemon/gvfsbackendobexftp.c:795 ../daemon/gvfsbackendobexftp.c:914
-#: ../daemon/gvfsbackendobexftp.c:1051 ../daemon/gvfsbackendobexftp.c:1115
-#: ../daemon/gvfsbackendobexftp.c:1252 ../daemon/gvfsbackendobexftp.c:1279
-#: ../daemon/gvfsbackendobexftp.c:1338 ../daemon/gvfsbackendobexftp.c:1360
-#: ../daemon/gvfsbackendobexftp.c:1420 ../daemon/gvfsbackendobexftp.c:1439
-#: ../daemon/gvfsbackendsmb.c:1015 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:297
-msgid "Operation was cancelled"
-msgstr "Η λειτουργία ακυρώθηκε"
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr "Η αναζήτηση δεν υποστηρίζεται στο stream"
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr "Η λειτουργία ερωτήματος πληροφοριών δεν υποστηρίζεται"
-
-# gconf/gconftool.c:964 gconf/gconftool.c:1070
-#: ../client/gdaemonvfs.c:731
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Σφάλμα στην λήψη mount info: %s"
-
-#: ../client/gvfsdaemondbus.c:559 ../client/gvfsdaemondbus.c:946
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Σφάλμα κατά τη σύνδεση με την υπηρεσία: %s"
-
-# gconf/gconfd.c:1676
-#: ../common/gsysutils.c:133
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Σφάλμα δημιουργίας υποδοχέα: %s"
-
-#: ../common/gsysutils.c:171
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Σφάλμα κατά τη σύνδεση με υποδοχέα: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Μη έγκυρος τύπος πληροφοριών αρχείου"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Μη έγκυρο γνώρισμα περιεχόμενου λίστας πληροφοριών"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Σφάλμα κατά τη σύνδεση με το D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Υπηρεσία συστήματος αρχείων %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Σφάλμα: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Χρήση: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Χρήση: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Δεν έχει οριστεί είδος προσάρτησης"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "το σημείο προσάρτησης για το %s εκτελείται ήδη"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "Σφάλμα εκκίνησης mount daemon"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr "Γράψιμο"
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr "Αποτυχία δημιουργίας προσωρινού καταλόγου"
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr "Δεν υπάρχει τέτοιο αρχείο ή κατάλογος"
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1804
-msgid "Directory not empty"
-msgstr "Ο κατάλογος δεν είναι άδειος"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr "Αδυναμία αντιγραφής αρχείου πάνω σε κατάλογο"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "CD/DVD Creator"
-
-#: ../daemon/gvfsbackendburn.c:681 ../daemon/gvfsbackendcomputer.c:652
-#: ../daemon/gvfsbackenddnssd.c:393 ../daemon/gvfsbackendftp.c:846
-#: ../daemon/gvfsbackendnetwork.c:637
-#, c-format
-msgid "The file is not a directory"
-msgstr "Το αρχείο δεν είναι κατάλογος"
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "Το αρχείο υπάρχει"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr "Δεν υπάρχει τέτοιο αρχείο ή κατάλογος στη διαδρομή προορισμού"
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr "Δεν είναι δυνατή η αντιγραφή καταλόγου πάνω σε κατάλογο"
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr "Το τελικό αρχείο υπάρχει ήδη"
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr "Δεν είναι δυνατή η αντιγραφή καταλόγου recursive"
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr "Δεν υποστηρίζεται"
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr "Δεν έχει καθορισθεί συσκευή"
-
-# backends/xml-backend.c:315
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Αδυναμία εύρεσης συσκευής %s"
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Η συσκευή '%s' δεν περιέχει αρχεία ήχου"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr "προσάρτηση cdda σε %s"
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:492 ../hal/ghalvolume.c:298 ../hal/ghalvolume.c:319
-#, c-format
-msgid "Audio Disc"
-msgstr "Δίσκος Audio"
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Το σύστημα αρχείων είναι απασχολημένο: %d ανοικτό αρχείο"
-msgstr[1] "Το σύστημα αρχείων είναι απασχολημένο: %d ανοικτά αρχεία"
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Δεν υπάρχει αρχείο %s στον οδηγό %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Σφάλμα από 'paranoia' στο δίσκο %s"
-
-#
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Σφάλμα ανάγνωσης στο δίσκο %s"
-
-#: ../daemon/gvfsbackendcdda.c:818 ../daemon/gvfsbackendgphoto2.c:1695
-#, c-format
-msgid "No such file"
-msgstr "Δεν υπάρχει τέτοιο αρχείο"
-
-#
-#: ../daemon/gvfsbackendcdda.c:825 ../daemon/gvfsbackendcomputer.c:573
-#: ../daemon/gvfsbackenddnssd.c:345 ../daemon/gvfsbackendftp.c:1955
-#: ../daemon/gvfsbackendnetwork.c:590 ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:866 ../daemon/gvfsbackendsmbbrowse.c:1037
-#: ../daemon/gvfsbackendsmbbrowse.c:1111
-#, c-format
-msgid "File doesn't exist"
-msgstr "Το αρχείο δεν υπάρχει"
-
-#: ../daemon/gvfsbackendcdda.c:832
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Το αρχείο δεν υπάρχει ή δεν είναι ένα ηχητικό κομμάτι"
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr "Υπηρεσία συστήματος αρχείων Audio CD "
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr "Υπολογιστής"
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr "Σύστημα αρχείων"
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendgphoto2.c:1687
-#: ../daemon/gvfsbackendobexftp.c:760 ../daemon/gvfsbackendtrash.c:637
-msgid "Can't open directory"
-msgstr "Αδυναμία ανοίγματος καταλόγου"
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr "Αδυναμία ανοίγματος του προσαρτημένου αρχείου "
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr "Εσωτερικό σφάλμα: %s"
-
-# gconf/gconf-internals.c:2404
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:930
-msgid "Can't mount file"
-msgstr "Αδυναμία προσάρτησης αρχείου"
-
-#: ../daemon/gvfsbackendcomputer.c:825
-msgid "No media in the drive"
-msgstr "Δεν υπάρχει μέσο στη συσσκευή"
-
-#: ../daemon/gvfsbackendcomputer.c:882 ../daemon/gvfsbackendcomputer.c:973
-#: ../daemon/gvfsbackendcomputer.c:1073
-msgid "Not a mountable file"
-msgstr "Δεν είναι προσαρτήσιμο αρχείο"
-
-# gconf/gconf-internals.c:2404
-#: ../daemon/gvfsbackendcomputer.c:988
-msgid "Can't unmount file"
-msgstr "Αδυναμία αποπροσάρτησης αρχείου"
-
-#: ../daemon/gvfsbackendcomputer.c:1104
-msgid "Can't eject file"
-msgstr "Αδυναμία αποβολής αρχείου"
-
-#: ../daemon/gvfsbackenddav.c:269 ../daemon/gvfsbackenddav.c:1289
-#: ../daemon/gvfsbackendhttp.c:220
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Σφάλμα HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:285
-msgid "Could not parse response"
-msgstr "Αδύνατη η συντακτική ανάλυση απόκρισης"
-
-#: ../daemon/gvfsbackenddav.c:294
-msgid "Empty response"
-msgstr "Κενή απόκριση"
-
-#: ../daemon/gvfsbackenddav.c:301
-msgid "Unexpected reply from server"
-msgstr "Απροσδόκητη απάντηση από διακομιστή"
-
-#: ../daemon/gvfsbackenddav.c:944 ../daemon/gvfsbackenddav.c:1421
-#, c-format
-msgid "Response invalid"
-msgstr "Μη έγκυρη απόκριση"
-
-#
-#: ../daemon/gvfsbackenddav.c:1087
-msgid "WebDAV share"
-msgstr "Διαμοίρασμα WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1089
-#, c-format
-msgid "Enter password for %s"
-msgstr "Εισάγετε κωδικό για %s"
-
-#
-#: ../daemon/gvfsbackenddav.c:1092
-msgid "Please enter proxy password"
-msgstr "Παρακαλώ εισάγετε τον κωδικό διαμεσολαβητή"
-
-#: ../daemon/gvfsbackenddav.c:1206 ../daemon/gvfsbackendhttp.c:273
-#: ../daemon/gvfsbackendobexftp.c:605 ../daemon/gvfsbackendobexftp.c:616
-#: ../daemon/gvfsbackendsmb.c:595
-msgid "Invalid mount spec"
-msgstr "Μη έγκυρη προδιαγραφή προσάρτησης"
-
-#: ../daemon/gvfsbackenddav.c:1293 ../daemon/gvfsbackenddav.c:1297
-msgid "Not a WebDAV enabled share"
-msgstr "Δεν είναι μια ενεργοποιημένη WebDAV share"
-
-#
-#: ../daemon/gvfsbackenddav.c:1319
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV στο %s"
-
-#: ../daemon/gvfsbackenddav.c:1377 ../daemon/gvfsbackenddav.c:1448
-msgid "Could not create request"
-msgstr "Δεν ήταν δυνατή η δημιουργία αίτησης"
-
-#: ../daemon/gvfsbackenddav.c:1511 ../daemon/gvfsbackenddav.c:1764
-#: ../daemon/gvfsbackendftp.c:1558 ../daemon/gvfsbackendftp.c:2189
-#: ../daemon/gvfsbackendsmb.c:1701
-#, c-format
-msgid "Target file already exists"
-msgstr "Το αρχείο προορισμού υπάρχει ήδη"
-
-#: ../daemon/gvfsbackenddav.c:1584 ../daemon/gvfsbackendsftp.c:2662
-#: ../daemon/gvfsbackendsmb.c:983
-msgid "The file was externally modified"
-msgstr "Το αρχείο τροποποιήθηκε εξωτερικά"
-
-#: ../daemon/gvfsbackenddav.c:1615 ../daemon/gvfsbackendsmb.c:1021
-#: ../daemon/gvfsbackendsmb.c:1718
-msgid "Backup file creation failed"
-msgstr "Απέτυχε η δημιουργία αντιγράφου ασφαλείας"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Αδυναμία παρακολούθησης αρχείου ή καταλόγου"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Δίκτυο"
-
-#: ../daemon/gvfsbackendftp.c:224
-msgid "Accounts are unsupported"
-msgstr "Δεν υποστηρίζονται λογαριασμοί"
-
-#: ../daemon/gvfsbackendftp.c:228
-msgid "Host closed connection"
-msgstr "Το σύστημα έκλεισε τη σύνδεση"
-
-#: ../daemon/gvfsbackendftp.c:232
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Αδυναμία ανοίγματος σύνδεσης δεδομένων. Μήπως ο firewall σας την εμποδίζει;"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Data connection closed"
-msgstr "Η σύνδεση δεδομένων έκλεισε"
-
-#: ../daemon/gvfsbackendftp.c:242
-msgid "File unavailable"
-msgstr "Μη διαθέσιμο αρχείο"
-
-#: ../daemon/gvfsbackendftp.c:246
-msgid "Operation failed"
-msgstr "Αποτυχία λειτουργίας"
-
-#: ../daemon/gvfsbackendftp.c:251
-msgid "No space left on server"
-msgstr "Δεν απέμεινε ελεύθερος χώρος στον εξυπηρετητή"
-
-#: ../daemon/gvfsbackendftp.c:259 ../daemon/gvfsbackendsftp.c:3684
-msgid "Operation unsupported"
-msgstr "Δεν υποστηρίζεται η λειτουργία"
-
-#: ../daemon/gvfsbackendftp.c:263 ../daemon/gvfsbackendsftp.c:259
-msgid "Permission denied"
-msgstr "Δεν επιτρέπεται η πρόσβαση"
-
-#: ../daemon/gvfsbackendftp.c:267
-msgid "Page type unknown"
-msgstr "Άγνωστος τύπος σελίδας"
-
-#: ../daemon/gvfsbackendftp.c:271 ../daemon/gvfsbackendftp.c:2059
-#, c-format
-msgid "Invalid filename"
-msgstr "Μη έγκυρο όνομα αρχείου"
-
-#: ../daemon/gvfsbackendftp.c:275 ../daemon/gvfsbackendftp.c:349
-#: ../daemon/gvfsbackendftp.c:378 ../daemon/gvfsbackendftp.c:397
-#: ../daemon/gvfsbackendftp.c:410 ../daemon/gvfsbackendftp.c:751
-#, c-format
-msgid "Invalid reply"
-msgstr "Μη έγκυρη απάντηση"
-
-#: ../daemon/gvfsbackendftp.c:517
-#, c-format
-msgid "broken transmission"
-msgstr "προβληματική μετάδοση"
-
-#: ../daemon/gvfsbackendftp.c:611 ../daemon/gvfsbackendftp.c:771
-#, c-format
-msgid "Could not connect to host"
-msgstr "Δεν ήταν δυνατή η σύνδεση στο σύστημα"
-
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendftp.c:897 ../daemon/gvfsbackendsftp.c:1736
-#, c-format
-msgid "/ on %s"
-msgstr "/ στο %s"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1259
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Εισάγετε κωδικό για ftp σε %s"
-
-# #-#-#-#-# gdm.gnome-2-20.el.po (el) #-#-#-#-#
-#
-#: ../daemon/gvfsbackendftp.c:1279 ../daemon/gvfsbackendsftp.c:833
-msgid "Password dialog cancelled"
-msgstr "Ο διάλογος κωδικού ακυρώθηκε"
-
-#: ../daemon/gvfsbackendftp.c:1345
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp στο %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1351
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp ως %s στο %s"
-
-#: ../daemon/gvfsbackendftp.c:1385 ../daemon/gvfsbackendsftp.c:1410
-msgid "No hostname specified"
-msgstr "Δεν έχει οριστεί όνομα συστήματος"
-
-#: ../daemon/gvfsbackendftp.c:1608 ../daemon/gvfsbackendftp.c:2150
-msgid "backups not supported yet"
-msgstr "τα αντίγραφα ασφαλείας δεν υποστηρίζονται ακόμα"
-
-#: ../daemon/gvfsbackendftp.c:1684
-#, c-format
-msgid "filename too long"
-msgstr "το όνομα αρχείου είναι πολύ μεγάλο"
-
-#: ../daemon/gvfsbackendftp.c:2169
-#, c-format
-msgid "Invalid destination filename"
-msgstr "Ακατάλληλο όνομα αρχείου προορισμού"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:697
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Ψηφιακή κάμερα (%s)"
-
-# #-#-#-#-# gnome-icon-theme.HEAD.el.po (el) #-#-#-#-#
-# 48x48/emblems/emblem-camera.icon.in.h:1
-# 48x48/emblems/emblem-camera.icon.in.h:1
-# 48x48/emblems/emblem-camera.icon.in.h:1
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:843 ../hal/ghalvolume.c:398
-#, c-format
-msgid "%s Camera"
-msgstr "Φωτογραφική μηχανή %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:846 ../hal/ghalvolume.c:393
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s Audio Player"
-
-# #-#-#-#-# gnome-icon-theme.HEAD.el.po (el) #-#-#-#-#
-# 48x48/emblems/emblem-camera.icon.in.h:1
-# 48x48/emblems/emblem-camera.icon.in.h:1
-# 48x48/emblems/emblem-camera.icon.in.h:1
-#: ../daemon/gvfsbackendgphoto2.c:855 ../hal/ghalvolume.c:407
-msgid "Camera"
-msgstr "Φωτογραφική μηχανή"
-
-#: ../daemon/gvfsbackendgphoto2.c:857 ../hal/ghalvolume.c:405
-msgid "Audio Player"
-msgstr "Audio Player"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1539
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "προσάρτηση gphoto2 σε %s"
-
-# gconf/gconftool.c:951
-#: ../daemon/gvfsbackendhttp.c:216
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Σφάλμα πελάτη HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:534 ../daemon/gvfsbackendsftp.c:1724
-#: ../daemon/gvfsbackendsmb.c:1230 ../daemon/gvfsbackendtrash.c:962
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (μη έγκυρη κωδικοποίηση)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Η ειδοποίηση καταλόγου δεν υποστηρίζεται"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:694
-msgid "Windows Network"
-msgstr "Δίκτυο Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Τοπικό δίκτυο"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Παρακολούθηση τοποθεσίας δικτύου"
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:444 ../daemon/gvfsbackendsmb.c:514
-#: ../daemon/gvfsbackendsmb.c:1223
-#, c-format
-msgid "%s on %s"
-msgstr "%s σε %s"
-
-#: ../daemon/gvfsbackendsftp.c:251
-msgid "ssh program unexpectedly exited"
-msgstr "απρόσμενη έξοδος προγράμματος ssh"
-
-#: ../daemon/gvfsbackendsftp.c:266
-msgid "Hostname not known"
-msgstr "Άγνωστο όνομα συστήματος"
-
-#: ../daemon/gvfsbackendsftp.c:273
-msgid "No route to host"
-msgstr "Δεν υπάρχει διαδρομή προς το σύστημα"
-
-#: ../daemon/gvfsbackendsftp.c:280
-msgid "Connection refused by server"
-msgstr "Έγινε άρνηση σύνδεσης από τον εξυπηρετητή"
-
-#: ../daemon/gvfsbackendsftp.c:287
-msgid "Host key verification failed"
-msgstr "Αποτυχία πιστοποίησης κλειδιού host"
-
-#: ../daemon/gvfsbackendsftp.c:370
-msgid "Unable to spawn ssh program"
-msgstr "Αδυναμία spawn προγράμματος ssh"
-
-#: ../daemon/gvfsbackendsftp.c:386
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Αδυναμία spawn προγράμματος ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:489 ../daemon/gvfsbackendsftp.c:741
-msgid "Timed out when logging in"
-msgstr "Λήξη χρόνου στην είσοδο"
-
-#: ../daemon/gvfsbackendsftp.c:817
-msgid "Enter passphrase for key"
-msgstr "Εισαγωγή συνθηματικού για κλειδί"
-
-#: ../daemon/gvfsbackendsftp.c:819
-msgid "Enter password"
-msgstr "Εισαγωγή κωδικού"
-
-#: ../daemon/gvfsbackendsftp.c:880
-msgid "Can't send password"
-msgstr "Αδυναμία αποστολής κωδικού"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Log In Anyway"
-msgstr "Είσοδος οπωσδήποτε"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Cancel Login"
-msgstr "Ακύρωση εισόδου"
-
-#: ../daemon/gvfsbackendsftp.c:898
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Η ταυτότητα του απομακρυσμένου υπολογιστή (%s) είναι άγνωστη.\n"
-"Αυτό συμβαίνει όταν συνδέεστε για πρώτη φορά σε έναν υπολογιστή.\n"
-"\n"
-"Η ταυτότητα που στάλθηκε από τον απομακρυσμένο υπολογιστή είναι %s.Αν είστε "
-"απόλυτα σίγουροι ότι είναι ασφαλές να συνεχίσετε, επικοινωνήστε με τον "
-"διαχειριστή του συστήματος."
-
-# #-#-#-#-# gdm.gnome-2-20.el.po (el) #-#-#-#-#
-#
-#: ../daemon/gvfsbackendsftp.c:918
-msgid "Login dialog cancelled"
-msgstr "Ο διάλογος εισόδου ακυρώθηκε"
-
-#: ../daemon/gvfsbackendsftp.c:938
-msgid "Can't send host identity confirmation"
-msgstr "Αδυναμία αποστολής επιβεβαίωσης ταυτότητας συστήματος"
-
-#: ../daemon/gvfsbackendsftp.c:1329 ../daemon/gvfsbackendsftp.c:1352
-msgid "Protocol error"
-msgstr "Σφάλμα πρωτοκόλου"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1376
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp στο %s"
-
-#: ../daemon/gvfsbackendsftp.c:1400
-msgid "Unable to find supported ssh command"
-msgstr "Αδυναμία εύρεσης υποστηριζόμενης εντολής ssh"
-
-#: ../daemon/gvfsbackendsftp.c:1800
-msgid "File is directory"
-msgstr "Το αρχείο είναι κατάλογος"
-
-#: ../daemon/gvfsbackendsftp.c:1809
-msgid "Failure"
-msgstr "Αποτυχία"
-
-#: ../daemon/gvfsbackendsftp.c:1874 ../daemon/gvfsbackendsftp.c:1936
-#: ../daemon/gvfsbackendsftp.c:1947 ../daemon/gvfsbackendsftp.c:2005
-#: ../daemon/gvfsbackendsftp.c:2095 ../daemon/gvfsbackendsftp.c:2124
-#: ../daemon/gvfsbackendsftp.c:2172 ../daemon/gvfsbackendsftp.c:2251
-#: ../daemon/gvfsbackendsftp.c:2362 ../daemon/gvfsbackendsftp.c:2403
-#: ../daemon/gvfsbackendsftp.c:2455 ../daemon/gvfsbackendsftp.c:2526
-#: ../daemon/gvfsbackendsftp.c:2546 ../daemon/gvfsbackendsftp.c:2700
-#: ../daemon/gvfsbackendsftp.c:2726 ../daemon/gvfsbackendsftp.c:2783
-#: ../daemon/gvfsbackendsftp.c:2842 ../daemon/gvfsbackendsftp.c:3122
-#: ../daemon/gvfsbackendsftp.c:3251 ../daemon/gvfsbackendsftp.c:3284
-#: ../daemon/gvfsbackendsftp.c:3385 ../daemon/gvfsbackendsftp.c:3426
-#: ../daemon/gvfsbackendsftp.c:3482 ../daemon/gvfsbackendsftp.c:3518
-#: ../daemon/gvfsbackendsftp.c:3552 ../daemon/gvfsbackendsftp.c:3567
-#: ../daemon/gvfsbackendsftp.c:3586 ../daemon/gvfsbackendsftp.c:3664
-msgid "Invalid reply received"
-msgstr "Λήφθηκε μη έγκυρη απάντηση"
-
-# gconf/gconftool.c:1181
-#: ../daemon/gvfsbackendsftp.c:2193
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Σφάλμα δημιουργίας αντιγράφου ασφαλείας: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2608
-msgid "Unable to create temporary file"
-msgstr "Αδυναμία δημιουργίας προσωρινού φακέλου"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:214
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Απαιτείται κωδικός για το κοινόχρηστο %s σε %s"
-
-#: ../daemon/gvfsbackendsmb.c:466 ../daemon/gvfsbackendsmb.c:506
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Εσωτερικό σφάλμα (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:561
-msgid "Failed to mount Windows share"
-msgstr "Αποτυχία προσάρτησης διαμεραζόμενου Windows"
-
-#: ../daemon/gvfsbackendsmb.c:686 ../daemon/gvfsbackendsmb.c:1117
-msgid "Unsupported seek type"
-msgstr "Μη υποστηριζόμενος τύπος seek"
-
-#: ../daemon/gvfsbackendsmb.c:1171
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Αποτυχία δημιουργίας αρχείου αντιγράφου ασφαλείας: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1602
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Σφάλμα διαγραφής αρχείου: %s"
-
-#
-#: ../daemon/gvfsbackendsmb.c:1666
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Σφάλμα μετακίνησης αρχείου: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1690
-msgid "Can't move directory over directory"
-msgstr "Δεν είναι δυνατή η μετακίνηση καταλόγου σε κατάλογο"
-
-#
-#: ../daemon/gvfsbackendsmb.c:1738
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Σφάλμα απομάκρυνσης αρχείου προορισμού: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1762
-msgid "Can't recursively move directory"
-msgstr "Δεν είναι δυνατή η recursive μετακίνηση καταλόγου"
-
-#: ../daemon/gvfsbackendsmb.c:1825
-msgid "Windows Shares Filesystem Service"
-msgstr "Υπηρεσία συστήματος αρχείων Windows Shares"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:702
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Διαμεραζόμενοι πόροι Windows στο %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:794 ../daemon/gvfsbackendsmbbrowse.c:840
-msgid "The file is not a mountable"
-msgstr "Το αρχείο δε μπορεί να προσαρτηθεί"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:862
-msgid "Not a regular file"
-msgstr "Δεν είναι τυπικό αρχείο"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1107
-msgid "Not a directory"
-msgstr "Δεν είναι κατάλογος"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1219
-msgid "Windows Network Filesystem Service"
-msgstr "Υπηρεσία συστήματος αρχείων δκτύου Windows"
-
-# #-#-#-#-# nautilus.HEAD.el.po (el) #-#-#-#-#
-# #-#-#-#-# user-guide.HEAD.el.po (user-guide.docs) #-#-#-#-#
-# #-#-#-#-# nautilus.HEAD.el.po (el) #-#-#-#-#
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:600 ../daemon/gvfsbackendtrash.c:1190
-msgid "Trash"
-msgstr "Απορρίμματα"
-
-#: ../daemon/gvfsbackendtrash.c:972
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (στα απορρίμματα)"
-
-#: ../daemon/gvfsbackendtrash.c:1291
-msgid "Can't delete trash"
-msgstr "Αδυναμία διαγραφής των απορριμμάτων"
-
-#: ../daemon/gvfsbackendtrash.c:1638 ../daemon/gvfsbackendtrash.c:1713
-msgid "Trash directory notification not supported"
-msgstr "Η ειδοποίηση κατάλογου απορριμμάτων δεν υποστηρίζεται"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Μη έγκυρος τύπος backend"
-
-# gconf/gconftool.c:982 gconf/gconftool.c:1084
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Σφάλμα αποστολής fd: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:119
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:169 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Δεν υποστηρίζεται η λειτουργία από το backend"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Οι συμβολικοί δεσμοί δεν υποστηρίζονται από το backend"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Μη έγκυρο μήνυμα dbus"
-
-#
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr "Αντικατάσταση παλιάς υπηρεσίας."
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr "Να μην γίνει εκκίνηση της υπηρεσίας fuse."
-
-#
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "Υπηρεσία GVFS"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr "Κύρια υπηρεσία για GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:74
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:76 ../programs/gvfs-cat.c:165 ../programs/gvfs-cat.c:178
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:388 ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:133 ../programs/gvfs-open.c:146
-#: ../programs/gvfs-save.c:165 ../programs/gvfs-tree.c:253
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Εκτελέστε \"%s --help\" για περισσότερες πληροφορίες."
-
-#: ../daemon/mount.c:432
-msgid "Invalid arguments from spawned child"
-msgstr "Μη έγκυρες παράμετροι από spawned child"
-
-#: ../daemon/mount.c:731
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Αποτυχία αυτόματης προσάρτησης: %s"
-
-#: ../daemon/mount.c:776
-msgid "The specified location is not mounted"
-msgstr "Η καθορισμένη τοποθεσία δεν έχει προσαρτηθεί"
-
-#: ../daemon/mount.c:781
-msgid "The specified location is not supported"
-msgstr "Η καθορισμένη τοποθεσία δεν υποστηρίζεται"
-
-#: ../daemon/mount.c:944
-msgid "Location is already mounted"
-msgstr "Η τοποθεσία είναι ήδη προσαρτημένη"
-
-#: ../daemon/mount.c:952
-msgid "Location is not mountable"
-msgstr "Η τοποθεσία δεν μπορεί να προσαρτηθεί"
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:148
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:162
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:165
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:168
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../hal/ghaldrive.c:174
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../hal/ghaldrive.c:180
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:186
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Συσκευή %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:192
-#, c-format
-msgid "%s Drive"
-msgstr "Συσκευή %s"
-
-#: ../hal/ghaldrive.c:196
-msgid "Floppy Drive"
-msgstr "Συσκευή δισκέτας"
-
-#: ../hal/ghaldrive.c:202
-msgid "Software RAID Drive"
-msgstr "Συσκευή RAID λογισμικού"
-
-#: ../hal/ghaldrive.c:204
-msgid "USB Drive"
-msgstr "Συσκευή USB"
-
-#: ../hal/ghaldrive.c:206
-msgid "ATA Drive"
-msgstr "Συσκευή ATA"
-
-#: ../hal/ghaldrive.c:208
-msgid "SCSI Drive"
-msgstr "Συσκευή SCSI"
-
-#: ../hal/ghaldrive.c:210
-msgid "FireWire Drive"
-msgstr "Συσκευή FireWire"
-
-#: ../hal/ghaldrive.c:214
-msgid "Tape Drive"
-msgstr "Συσκευή ταινίας"
-
-#: ../hal/ghaldrive.c:216
-msgid "CompactFlash Drive"
-msgstr "Συσκευή CompactFlash"
-
-#: ../hal/ghaldrive.c:218
-msgid "MemoryStick Drive"
-msgstr "Συσκευή Memory Stick"
-
-#: ../hal/ghaldrive.c:220
-msgid "SmartMedia Drive"
-msgstr "Συσκευή Smart Media"
-
-#: ../hal/ghaldrive.c:222
-msgid "SD/MMC Drive"
-msgstr "Συσκευή SD/MMC"
-
-#: ../hal/ghaldrive.c:224
-msgid "Zip Drive"
-msgstr "Συσκευή zip"
-
-#: ../hal/ghaldrive.c:226
-msgid "Jaz Drive"
-msgstr "Συσκευή Jaz"
-
-#: ../hal/ghaldrive.c:228
-msgid "Thumb Drive"
-msgstr "Συσκευή Thumb"
-
-#: ../hal/ghaldrive.c:231
-msgid "Mass Storage Drive"
-msgstr "Συσκευή μαζικής αποθύκευσης"
-
-#: ../hal/ghaldrive.c:730
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Αποτυχία αποβολής μέσου. Ένας ή περισσότεροι τόμοι είναι απασχολημένοι"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "CD-ROM Disc"
-msgstr "Δίσκος CD-ROM"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "Blank CD-ROM Disc"
-msgstr "Κενός δίσκος CD-ROM"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "CD-R Disc"
-msgstr "Δίσκος CD-R"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "Blank CD-R Disc"
-msgstr "Κενός δίσκος CD-R"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "CD-RW Disc"
-msgstr "Δίσκος CD-RW"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "Blank CD-RW Disc"
-msgstr "Κενός δίσκος CD-RW"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "DVD-ROM Disc"
-msgstr "Δίσκος DVD-ROM"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "Blank DVD-ROM Disc"
-msgstr "Κενός δίσκος DVD-ROM"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "DVD-RAM Disc"
-msgstr "Δίσκος DVD-RAM"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "Blank DVD-RAM Disc"
-msgstr "Κενός δίσκος DVD-RAM"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "DVD-RW Disc"
-msgstr "Δίσκος DVD-RW"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "Blank DVD-RW Disc"
-msgstr "Κενός δίσκος DVD-RW"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "DVD+R Disc"
-msgstr "Δίσκος DVD+R"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "Blank DVD+R Disc"
-msgstr "Κενός δίσκος DVD+R"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "DVD+RW Disc"
-msgstr "Δίσκος DVD+RW"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "Blank DVD+RW Disc"
-msgstr "Κενός δίσκος DVD+RW"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "DVD+R DL Disc"
-msgstr "Δίσκος DVD+R DL"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "Blank DVD+R DL Disc"
-msgstr "Κενός δίσκος DVD+R DL"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blu-Ray Disc"
-msgstr "Δίσκος Blu-Ray"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blank Blu-Ray Disc"
-msgstr "Κενός δίσκος Blu-Ray"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blu-Ray R Disc"
-msgstr "Δίσκος Blu-Ray R"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blank Blu-Ray R Disc"
-msgstr "Κενός δίσκος Blu-Ray R"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blu-Ray RW Disc"
-msgstr "Δίσκος Blu-Ray RW"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Κενός δίσκος Blu-Ray RW"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "HD DVD Disc"
-msgstr "Δίσκος HD DVD"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "Blank HD DVD Disc"
-msgstr "Κενός δίσκος HD DVD"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "HD DVD-R Disc"
-msgstr "Δίσκος HD DVD-R"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "Blank HD DVD-R Disc"
-msgstr "Κενός δίσκος HD DVD-R"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "HD DVD-RW Disc"
-msgstr "Δίσκος HD DVD-RW"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "Blank HD DVD-RW Disc"
-msgstr "Κενός δίσκος HD DVD-RW"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "MO Disc"
-msgstr "Δίσκος ΜΟ"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "Blank MO Disc"
-msgstr "Κενός δίσκος ΜΟ"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Disc"
-msgstr "Δίσκος"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Blank Disc"
-msgstr "Κενός δίσκος"
-
-#: ../hal/ghalmount.c:368
-#, c-format
-msgid "%.1f kB Media"
-msgstr "Δεδομένα %.1f kB"
-
-#: ../hal/ghalmount.c:373
-#, c-format
-msgid "%.1f MB Media"
-msgstr "Δεδομένα %.1f MB"
-
-#: ../hal/ghalmount.c:378
-#, c-format
-msgid "%.1f GB Media"
-msgstr "Δεδομένα %.1f GB"
-
-#: ../hal/ghalmount.c:490 ../hal/ghalvolume.c:317
-msgid "Mixed Audio/Data Disc"
-msgstr "Μικρός δίσκος ήχου/δεδομένων"
-
-#: ../hal/ghalvolume.c:206
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../hal/ghalvolume.c:211
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../hal/ghalvolume.c:216
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GΒ"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:305
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "Κρυπτογραφημένα δεδομένα %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:328
-#, c-format
-msgid "%s Media"
-msgstr "Δεδομένα %s"
-
-#
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: σφάλμα κατά το άνοιγμα αρχείου: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, σφάλμα εγγραφής στην κανονική έξοδο"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: σφάλμα κατά την ανάγνωση: %s\n"
-
-#
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:σφάλμα κλεισίματος: %s\n"
-
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATION... - σύνδεση ΤΟΠΟΘΕΣΙΩΝ στην στάνταρ έξοδο."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Σύνδεση αρχείων σε τοποθεσίες και εκτύπωση στην στάνταρ έξοδο. Λειτουργεί "
-"όπως το παραδοσιακό εργαλείο Cat, αλλά χρησιμοποιεί την τοποθεσία gvfs αντί "
-"για τα τοπικά αρχεία: Για παράδειγμα μπορείτε να χρησιμοποιήσετε κάτι σαν "
-"smb://server/resource/file.txt ως τοποθεσία για σύνδεση."
-
-#: ../programs/gvfs-cat.c:150
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:176 ../programs/gvfs-open.c:144
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: λείπουν τοποθεσίες"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: Σφάλμα ανοίγματος τοποθεσίας: %s\n"
-
-# gconf/gconftool.c:1181
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: Σφάλμα εκκίνησης εφαρμογής: %s\n"
-
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - άνοιγμα ΑΡΧΕΙΩΝ με την καθορισμένη εφαρμογή"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Ανοίγει τα αρχεία με την προεπιλεγμένη εφαρμογή που έχει ορισθεί να "
-"χειρίζεται αυτούς τους τύπους αρχείων."
-
diff --git a/po/en_GB.po b/po/en_GB.po
deleted file mode 100644
index f98d29ea..00000000
--- a/po/en_GB.po
+++ /dev/null
@@ -1,1551 +0,0 @@
-# English (British) translation.
-# Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the gvfs package.
-#
-# Philip Withnall <pwithnall@svn.gnome.org>
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-06 20:45+0100\n"
-"PO-Revision-Date: 2008-03-02 16:37+0000\n"
-"Last-Translator: Philip Withnall <pwithnall@svn.gnome.org>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "Operation not supported, files on different mounts"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Invalid return value from get_info"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Invalid return value from query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Couldn't get stream file descriptor"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "Invalid return value from open"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "Didn't get stream file descriptor"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Invalid return value from call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Invalid return value from get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Could not find enclosing mount"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Invalid filename %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Invalid return value from query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "Invalid return value from monitor_dir"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "Invalid return value from monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Error in stream protocol: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "End of stream"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Operation was cancelled"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Seek not supported on stream"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "The query info operation is not supported"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Query info not supported on stream"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Error while getting mount info: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Error connecting to daemon: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Error creating socket: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Error connecting to socket: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Invalid file info format"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Invalid attribute info list content"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Error connecting to D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s Filesystem Service"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Error: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Usage: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Usage: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "No mount type specified"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "mountpoint for %s already running"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "error starting mount daemon"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ on %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "No hostname specified"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Invalid mount spec"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "File doesn't exist"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "The file is not a directory"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Burn"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Unable to create temporary directory"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "No such file or directory"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Directory not empty"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "Can't copy file over directory"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD Creator"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "File exists"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Operation not supported by backend"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "No such file or directory in target path"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "Can't copy directory over directory"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "Target file exists"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "Can't recursively copy directory"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Not supported"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Cannot connect to the system bus"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Cannot create libhal context"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Cannot initialise libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "No drive specified"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Cannot find drive %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Drive %s does not contain audio files"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda mount on %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Audio Disc"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "File system is busy: %d open file"
-msgstr[1] "File system is busy: %d open files"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "No such file %s on drive %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Error from 'paranoia' on drive %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Error seeking in stream on drive %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "No such file"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "The file does not exist or isn't an audio track"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Audio CD Filesystem Service"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Computer"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Filesystem"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "Can't open directory"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Can't open mountable file"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Internal error: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Can't mount file"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "No media in the drive"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Not a mountable file"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Can't unmount file"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Can't eject file"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP Error: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Could not parse response"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Empty response"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Unexpected reply from server"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Response invalid"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV share"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Enter password for %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Please enter proxy password"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Not a WebDAV-enabled share"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV on %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Could not create request"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Target file already exists"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "The file was externally modified"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Backup file creation failed"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Can't monitor file or directory."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Network"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Accounts are unsupported"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Host closed connection"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Cannot open data connection. Maybe your firewall prevents this?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Data connection closed"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Operation failed"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "No space left on server"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Operation unsupported"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Permission denied"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Page type unknown"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Invalid filename"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Invalid reply"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "broken transmission"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Could not connect to host"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Enter password for ftp on %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Password dialogue cancelled"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp on %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp as %s on %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "File is directory"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "backups not supported yet"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "filename too long"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Invalid destination filename"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Directory or file exists"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: No such file or directory"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Invalid filename"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Not Supported"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digital Camera (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s Camera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s Audio Player"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Camera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Audio Player"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Failed to get folder list"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "No device specified"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Cannot create gphoto2 context"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Error creating camera"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Error loading device information"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Error looking up device information"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Error getting device information"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Error setting up camera communications port"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Error initialising camera"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 mount on %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "No camera specified"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Error creating file object"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Error getting file"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Error getting data from file"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Error seeking in stream on camera %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Not a directory"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Failed to get file list"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Error creating directory"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Name already exists"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "New name too long"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Error renaming directory"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Error renaming file"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Directory '%s' is not empty"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Error deleting directory"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Error deleting file"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "Can't write to directory"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Cannot allocate new file to append to"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Cannot read file to append to"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Cannot get data of file to append to"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Error writing file"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Not supported (not same directory)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Not supported (src is dir, dst is dir)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Not supported (src is dir, dst is existing file)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Not supported (src is file, dst is dir)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP Client Error: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (invalid encoding)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Directory notification not supported"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows Network"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Local Network"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Network Location Monitor"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s on %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Connection to the device lost"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Device requires a software update"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh program unexpectedly exited"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Hostname not known"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "No route to host"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Connection refused by server"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Host key verification failed"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Unable to spawn ssh program"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Unable to spawn ssh program: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Timed out when logging in"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Enter passphrase for key"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Enter password"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Can't send password"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Log In Anyway"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Cancel Login"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Login dialogue cancelled"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Can't send host identity confirmation"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Protocol error"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp on %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Unable to find supported ssh command"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Failure"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Invalid reply received"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Error creating backup file: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Unable to create temporary file"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Can't move directory over directory"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Password required for share %s on %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Internal Error (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Failed to mount Windows share"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Unsupported seek type"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Backup file creation failed: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Error deleting file: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Error moving file: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Error removing target file: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Can't recursively move directory"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows Shares Filesystem Service"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windows shares on %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "The file is not a mountable"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Not a regular file"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windows Network Filesystem Service"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Wastebasket"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (in wastebasket)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Can't delete wastebasket"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Wastebasket directory notification not supported"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Invalid backend type"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Error sending fd: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Symlinks not supported by backend"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Invalid dbus message"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Replace old daemon."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Don't start fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS Daemon"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Main daemon for GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Try \"%s --help\" for more information."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Invalid arguments from spawned child"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automount failed: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "The specified location is not mounted"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "The specified location is not supported"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Location is already mounted"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Location is not mountable"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s Drive"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s Drive"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Floppy Drive"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Software RAID Drive"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB Drive"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA Drive"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI Drive"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire Drive"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Tape Drive"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash Drive"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick Drive"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia Drive"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC Drive"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip Drive"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz Drive"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Thumb Drive"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Mass Storage Drive"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Failed to eject media; one or more volumes on the media are busy."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "Mixed Audio/Data Disc"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "%s Media"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s Encrypted Data"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM Disc"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Blank CD-ROM Disc"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R Disc"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Blank CD-R Disc"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW Disc"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Blank CD-RW Disc"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM Disc"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Blank DVD-ROM Disc"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM Disc"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Blank DVD-RAM Disc"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW Disc"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Blank DVD-RW Disc"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R Disc"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Blank DVD+R Disc"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW Disc"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Blank DVD+RW Disc"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL Disc"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Blank DVD+R DL Disc"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray Disc"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Blank Blu-Ray Disc"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R Disc"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Blank Blu-Ray R Disc"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW Disc"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Blank Blu-Ray RW Disc"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD Disc"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Blank HD DVD Disc"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R Disc"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Blank HD DVD-R Disc"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW Disc"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Blank HD DVD-RW Disc"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO Disc"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Blank MO Disc"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Disc"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Blank Disc"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: error opening file: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, error writing to stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: error reading: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:error closing: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATION... - concatenate LOCATIONS to standard output."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: missing locations"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: error opening location: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: error launching application: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - open FILES with registered application."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-
-#~ msgid "File unavailable"
-#~ msgstr "File unavailable"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "%.1f kB Media"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "%.1f MB Media"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "%.1f GB Media"
-
-#~ msgid "File does not exist"
-#~ msgstr "File does not exist"
diff --git a/po/es.po b/po/es.po
deleted file mode 100644
index 59957d72..00000000
--- a/po/es.po
+++ /dev/null
@@ -1,1562 +0,0 @@
-# translation of gvfs.HEAD.po to Español
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Jorge González <jorgegonz@svn.gnome.org>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs.HEAD\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-21 15:25+0000\n"
-"PO-Revision-Date: 2008-08-22 10:18+0200\n"
-"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
-"Language-Team: Español <gnome-es-list@gnome.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-"La operación no está soportada, los archivos están en diferentes puntos de "
-"montaje"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info devolvió un valor no válido"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info devolvió un valor no válido"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "No se pudo obtener el descriptor del archivo de flujo"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "open devolvió un valor no válido"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "No se obtuvo un descriptor del archivo de flujo"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "call devolvió un valor no válido"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info devolvió un valor no válido"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "No se pudo encontrar el punto de montaje adjunto"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Nombre de archivo no válido %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info devolvió un valor no válido"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "El valor devuelto por monitor_dir no es válido"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "El valor devuelto por monitor_file no es válido"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Error en el protocolo de flujo: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Final de flujo"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Se canceló la operación"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "No se permite buscar en el flujo"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "La operación de consulta de información no está soportada"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "No se soporta consulta de información en flujo"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Error al obtener la información de montaje: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Error al conectar con el demonio: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Error al crear el socket: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Error al conectar con el socket: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Formato de información del archivo no válido"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "El contenido de la lista de información del atributo no es válido"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Error al conectar con D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Sistema de archivos %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Error: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Uso: %s --spawner dbus-id ruta_del_objeto"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Uso: %s clave=valor clave=valor …"
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "No se especificó el tipo de montaje"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "el punto de montaje para %s ya se está usando"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "error al iniciar el demonio de montado"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ en %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "No se especificó un nombre de servidor"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Especificación de montaje no válida"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "El archivo no existe"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "El archivo no es un directorio"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Grabar"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "No se pudo crear el directorio temporal"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendgphoto2.c:2690
-#, c-format
-msgid "No such file or directory"
-msgstr "El archivo o directorio no existe"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "El directorio no está vacío"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "No se puede copiar un archivo sobre un directorio"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Creador de CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2763
-msgid "File exists"
-msgstr "El archivo ya existe"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "El archivo o directorio no existe en la ruta de destino"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "No se puede copiar un directorio sobre otro directorio"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "El archivo destino ya existe"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "No se puede copiar recursivamente un directorio"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2348
-#: ../daemon/gvfsbackendgphoto2.c:2556 ../daemon/gvfsbackendgphoto2.c:2651
-#: ../daemon/gvfsbackendgphoto2.c:2742
-msgid "Not supported"
-msgstr "No soportado"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "No se pudo conectar con el bus del sistema"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "No se pudo crear el contexto libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "No se puede inicializar libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "No se especificó una unidad"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "No se pudo encontrar la unidad %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "La unidad %s no contiene archivos de sonido"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "CDDA montado en %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Disco de sonido"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "El sistema de archivos está ocupado: %d archivo abierto"
-msgstr[1] "El sistema de archivos está ocupado: %d archivos abiertos"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "El archivo %s no existe en la unidad %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Error de «paranoia» en la unidad %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Error al buscar en el flujo en la unidad %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1711
-#, c-format
-msgid "No such file"
-msgstr "No existe el archivo"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "El archivo no existe o no es una pista de sonido"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Servicio de sistema de archivos de Audio CD"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Equipo"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Sistema de archivos"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1703
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "No se puede abrir el directorio"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "No se puede abrir el archivo montable"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Error interno: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "No se puede montar el archivo"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "No hay un soporte en la unidad"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "No es un archivo montable"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "No se puede desmontar el archivo"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "No se puede expulsar el archivo"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Error HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "No se pudo analizar la respuesta"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Respuesta vacía"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Respuesta inesperada del servidor"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "Respuesta no válida"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "Compartición WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "Introduzca la contraseña para %s"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "Introduzca la contraseña del proxy"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr "No es una compartición activada WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV en %s"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "No se pudo crear la petición"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "El archivo destino ya existe"
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "El archivo se modificó externamente"
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Falló la creación del archivo de respaldo"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "No se puede monitorizar el archivo o directorio."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "DNS-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Red"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Las cuentas no están soportadas"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "El servidor cerró la conexión"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"No se puede abrir la conexión de datos. ¿Quizá su cortafuegos lo esté "
-"impidiendo?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Se cerró la conexión de datos"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Falló la operación"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "No queda espacio libre en el servidor"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "La operación no está soportada"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Permiso denegado"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Tipo de página desconocido"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Nombre de archivo no válido"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Se recibió una respuesta no válida"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "transmisión rota"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "No se pudo conectar con el equipo"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Introduzca la contraseña para el ftp en %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Se canceló el diálogo de la contraseña"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp en %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "%s en el ftp de %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "El archivo es un directorio"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "aún no se soportan los respaldos"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "el nombre de archivo es demasiado largo"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Nombre de archivo de destino no válido"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: El directorio o archivo ya existe"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: El archivo o directorio no existe"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Nombre de archivo no válido"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: No soportado"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Cámara digital (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Cámara %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Reproductor de sonido %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Cámara"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Reproductor de sonido"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2008
-msgid "Failed to get folder list"
-msgstr "Falló al obtener la lista de carpetas"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "No se especificó el dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "No se puede crear el contexto gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "Error al crear la cámara"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482 ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading device information"
-msgstr "Error al cargar la información del dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up device information"
-msgstr "Error al buscar la información del dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting device information"
-msgstr "Error al obtener la información del dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting up camera communications port"
-msgstr "Error al establecer el puerto de comunicaciones de la cámara"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "Error al inicializar la cámara"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 montado en %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "No se especificó ninguna cámara"
-
-#: ../daemon/gvfsbackendgphoto2.c:1719
-msgid "Error creating file object"
-msgstr "Error al crear el archivo objeto"
-
-#: ../daemon/gvfsbackendgphoto2.c:1733
-msgid "Error getting file"
-msgstr "Error al obtener el archivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1742
-msgid "Error getting data from file"
-msgstr "Error al obtener datos del archivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1836 ../daemon/gvfsbackendgphoto2.c:3010
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Error al buscar en el flujo en la cámara %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1975 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "No es un directorio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2071
-msgid "Failed to get file list"
-msgstr "Falló al obtener la lista de archivos"
-
-#: ../daemon/gvfsbackendgphoto2.c:2360
-msgid "Error creating directory"
-msgstr "Error al crear el directorio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2568
-msgid "Name already exists"
-msgstr "El nombre ya existe"
-
-#: ../daemon/gvfsbackendgphoto2.c:2579 ../daemon/gvfsbackendgphoto2.c:3200
-msgid "New name too long"
-msgstr "El nuevo nombre es demasiado largo"
-
-#: ../daemon/gvfsbackendgphoto2.c:2589 ../daemon/gvfsbackendgphoto2.c:3211
-msgid "Error renaming dir"
-msgstr "Error al renombrar el directorio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2601 ../daemon/gvfsbackendgphoto2.c:3223
-msgid "Error renaming file"
-msgstr "Error al renombrar el archivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:2664
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "El directorio «%s» no está vacío"
-
-#: ../daemon/gvfsbackendgphoto2.c:2675
-msgid "Error deleting directory"
-msgstr "Error al borrar el directorio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2700
-msgid "Error deleting file"
-msgstr "Error al borrar el archivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:2752
-msgid "Can't write to directory"
-msgstr "No se puede escribir en el directorio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2799
-msgid "Cannot allocate new file to append to"
-msgstr "No se puede asignar el nuevo archivo en el que añadir"
-
-#: ../daemon/gvfsbackendgphoto2.c:2813
-msgid "Cannot read file to append to"
-msgstr "No se puede leer el archivo en el que añadir"
-
-#: ../daemon/gvfsbackendgphoto2.c:2823
-msgid "Cannot get data of file to append to"
-msgstr "No se puede obtener los datos del archivo en el que añadir"
-
-#: ../daemon/gvfsbackendgphoto2.c:3109
-msgid "Error writing file"
-msgstr "Error al escribir el archivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:3156
-msgid "Not supported (not same directory)"
-msgstr "No soportado (no es el mismo directorio)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3168
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "No soportado (src es un directorio, dst es un directorio)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3176
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "No soportado (src es un directorio, dst es un archivo existente)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3188
-msgid "Not supported (src is file, dst is dir)"
-msgstr "No soportado (src es un archivo, dst es un directorio)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Error HTTP en el cliente: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (codificación no válida)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "No se soporta la notificación de directorios"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Red de Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Red local"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Monitor de ubicación de red"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s en %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Se perdió la conexión con el dispositivo"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "El dispositivo requiere una actualización de software"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "el programa de ssh finalizó inesperadamente"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "El nombre de servidor desconocido"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "No hay una ruta al servidor"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "El servidor rechazó la conexión"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Falló la verificación de la clave del servidor"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "No se pudo lanzar el programa ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "No se pudo lanzar el programa ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Expiró el tiempo para iniciar la sesión"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Introduzca una frase de paso para la clave"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Introduzca la contraseña"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "No se puede enviar la contraseña"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Iniciar sesión de todas formas"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Cancelar inicio de sesión"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Se desconoce la identidad del equipo remoto (%s).\n"
-"Esto sucede cuando inicia sesión por primera vez en un equipo.\n"
-"\n"
-"La identidad enviada por el equipo remoto es %s. Contacte con el "
-"administrador del sistema si quiere estar completamente seguro de que es "
-"seguro continuar."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Se canceló el inicio de sesión"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "No se puede enviar la confirmación de identidad del equipo"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Error de protocolo"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp en %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "No se pudo encontrar el comando ssh soportado"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Fallo"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Se recibió una respuesta no válida"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Error al crear el archivo de respaldo: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "No se pudo crear el archivo temporal"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "No se puede mover un directorio sobre un directorio"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Se requiere contraseña para la compartición %s en %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Error interno (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Falló al montar la compartición Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Tipo de búsqueda no soportado"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Falló la creación del archivo de respaldo: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Error al borrar el archivo: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Error al mover el archivo: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Error al eliminar el archivo destino: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "No se puede mover recursivamente un directorio"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Servicio del sistema de archivos compartidos de Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Comparticiones Windows en %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "El archivo no se puede montar"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "No es un archivo regular"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Servicio del sistema de archivos de red de Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Papelera"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (en la papelera)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "No se puede borrar la papelera"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "No se soporta la notificación de la papelera"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Tipo de backend no válido"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Error al enviar el descriptor de archivo: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "El backend no soporta la operación"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "El backend no soporta enlaces simbólicos"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Mensaje de D-Bus no válido"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Reemplace el demonio antiguo."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "No iniciar fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Demonio GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Demonio principal para GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Intente \"%s --help\" para obtener más información."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Argumentos no válidos para el hijo lanzado"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Falló automount: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "La ubicación especificada no está montada"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "La ubicación especificada no está soportada"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "La ubicación ya está montada"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "La ubicación no es montable"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Unidad %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Unidad %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Disquete"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Unidad RAID por software"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Unidad USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Unidad ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Unidad SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Unidad FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Unidad de cinta"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Unidad CompactFlash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Unidad MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Unidad SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Unidad SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Unidad Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Unidad Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Unidad Thumb"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Unidad de almacenamiento masivo"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Falló al expulsar el medio, uno o más volúmenes están ocupados en el medio."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f KiB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MiB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GiB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Disco de sonido y datos"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "Soporte %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "Datos cifrados %s"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Disco CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Disco CD-ROM virgen"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Disco CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Disco CD-R virgen"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Disco CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Disco CD-RW virgen"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Disco DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Disco DVD-ROM virgen"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Disco DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Disco DVD-RAM virgen"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Disco DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Disco DVD-RW virgen"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Disco DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Disco DVD+R virgen"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Disco DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Disco DVD+RW virgen"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Disco DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Disco DVD+R DL virgen"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Disco Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Disco Blu-Ray virgen"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Disco Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Disco Blu-Ray R virgen"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Disco Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Disco Blu-Ray RW virgen"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Disco HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Disco DVD HD virgen"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Disco HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Disco HD DVD-R virgen"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Disco DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Disco HD DVD-RW virgen"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Disco MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Disco MO virgen"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Disco"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Disco virgen"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: error al abrir el archivo: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, error al escribir en stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: error al leer: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:error al cerrar: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "UBICACIÓN… - concatenar las UBICACIONES con una salida estándar."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Concatenar archivos en ubicaciones e imprimirlos en la salida estándar. "
-"Funciona igual que la utilidad tradicional «cat», pero usando la ubicación "
-"gvfs en lugar de los archivos locales: por ejemplo, puede usar algo como "
-"smb://servidor/recurso/archivo.txt como una ubicación para concatenar."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Nota: use una tibería a traes de «cat» si necesita las opciones de formateo "
-"tales como -n, -T u otras."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: faltan ubicaciones"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: error al abrir la ubicación: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: error al lanzar la aplicación: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "ARCHIVOS… - abre ARCHIVOS con la aplicación registrada."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Abre el/los archivo/s con la aplicación predeterminada registrada para "
-"manejar el tipo de archivo."
-
-#~ msgid "Error listing folders to figure out ignore prefix"
-#~ msgstr "Error al listar las carpetas para averiguar el prefijo de ignorado"
-
-#~ msgid "Error creating port info list"
-#~ msgstr "Error al crear la lista del puerto de información"
-
-#~ msgid "Error getting port info from port info list"
-#~ msgstr ""
-#~ "Error al obtener el puerto de información desde la lista del puerto de "
-#~ "información"
-
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "El sistema de archivos está ocupado: %d archivos abiertos"
-
-#~ msgid "Error listing folders"
-#~ msgstr "Error al listar las carpetas"
-
-#~ msgid "Error listing files in folder"
-#~ msgstr "Error al listar los archivos en la carpeta"
diff --git a/po/et.po b/po/et.po
deleted file mode 100644
index 9d2749ba..00000000
--- a/po/et.po
+++ /dev/null
@@ -1,1556 +0,0 @@
-# GVFS'i eesti keele tõlge.
-# Estonian translation of GVFS.
-#
-# Copyright (C) 2008 The GNOME Project.
-# This file is distributed under the same license as the gvfs package.
-#
-# Ivar Smolin <okul@linue.ee>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs HEAD\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-21 15:25+0000\n"
-"PO-Revision-Date: 2008-08-23 14:16+0300\n"
-"Last-Translator: Ivar Smolin <okul@linux.ee>\n"
-"Language-Team: Estonian <gnome-et@linux.ee>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "Operatsioon pole toetatud, failid asuvad eri ketastel"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info tagastas vigase väärtuse"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info tagastas vigase väärtuse"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Voo failideskriptorit pole võimalik hankida"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "open tagastas vigase väärtuse"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Ei õnnestunud voofaili deskriptiorit saada"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "call tagastas vigase väärtuse"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info tagastas vigase väärtuse"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Vigane failinimi %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info tagastas vigase väärtuse"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir tagastas vigase väärtuse"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file tagastas vigase väärtuse"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Viga vooprotokollis: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Voo lõpp"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Operatsioon katkestati"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Andmevoogude korral pole asukohale hüppamine toetatud"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Andmete pärimise operatsioon pole toetatud"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Andmevoogude korral pole andmepäring toetatud"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Viga ühendamise andmete hankimisel: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Viga deemoniga ühendumisel: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Viga sokli loomisel: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Viga sokliga ühendumisel: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Vigane failiandmete vorming"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr ""
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Viga D-Bus'iga ühendumisel: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s failisüsteemi teenus"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Viga: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Kasutamine: %s --spawner dbus-id objekti_rada"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Kasutamine: %s võti=väärtust võti=väärtust ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Ühendamise liiki pole määratud"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "ühenduspunkt %s on juba töös"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "viga ühendamisdeemoni käivitamisel"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "hosti %s /"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Hostinimi on määramata"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Vigane ühendamiskirjeldus"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Faili pole olemas"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Fail pole kataloog"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Ajutist kataloogi pole võimalik luua"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendgphoto2.c:2690
-#, c-format
-msgid "No such file or directory"
-msgstr "Sellist faili või kataloogi ei ole"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "Kataloog pole tühi"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr ""
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD-looja"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2763
-msgid "File exists"
-msgstr "Fail on olemas"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "Sihtkohas pole sellist faili ega kataloogi"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "Sihtfail on juba olemas"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "Kataloogi pole võimalik rekursiivselt kopeerida"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2348
-#: ../daemon/gvfsbackendgphoto2.c:2556 ../daemon/gvfsbackendgphoto2.c:2651
-#: ../daemon/gvfsbackendgphoto2.c:2742
-msgid "Not supported"
-msgstr "Pole toetatud"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "Süsteemse siiniga pole võimalik ühendust võtta"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "libhal-konteksti pole võimalik luua"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "libhal-i pole võimalik lähtestada"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Ketas on määramata"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Seadet %s pole võimalik leida"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Seade %s ei sisalda audiofaile"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda ühendus seadmes %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Audioplaat"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Failisüsteem on hõivatud: %d fail on avatud"
-msgstr[1] "Failisüsteem on hõivatud: %d faili on avatud"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Faili %s pole %s kettal"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "'paranoia' teegi viga seadmega %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1711
-#, c-format
-msgid "No such file"
-msgstr "Sellist faili ei ole"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Faili pole olemas või pole see audiofail"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Audio-CD failisüsteemi teenus"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Arvuti"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Failisüsteem"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1703
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "Kataloogi pole võimalik avada"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Ühendatavat faili pole võimalik avada"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Sisemine viga: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Faili pole võimalik ühendada"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Seadmes puudub meedium"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Pole ühendatav fail"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Faili pole võimalik lahti ühendada"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Faili pole võimalik väljastada"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP viga: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Vastust pole võimalik analüüsida"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Tühi vastus"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Ootamatu vastus serverilt"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "Vastus on vigane"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "WebDAV'i jagatud kataloog"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "Sisesta %s parool"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "Palun sisesta proksi parool"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr "Pole WebDAV'i jagatud kataloog"
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV hostil %s"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "Päringut pole võimalik luua"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Sihtfail on juba olemas"
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Faili on mõne teise programmi poolt muudetud"
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Tõrge varufaili loomisel"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Faili või kataloogi pole võimalik monitoorida."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Võrk"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Kontod pole toetatud"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Host sulges ühenduse"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Andmeühendust pole võimalik avada. Võibolla tulemüür takistab seda?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Andmeühendus on suletud"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Operatsioon nurjus"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Serveris pole vaba ruumi"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Operatsioon pole toetatud"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Ligipääs keelatud"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Vigane failinimi"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Vigane vastus"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "vigane ülekanne"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Hostiga pole võimalik ühendust võtta"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Sisesta hosti %s ftp-parool"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Paroolidialoog tühistati"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp hostil %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp kasutajanimega %s hostil %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Fail on kataloog"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "varukoopiad pole veel toetatud"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "failinimi on liiga pikk"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Vigane sihtfaili nimi"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Kataloog või fail on juba olemas"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Sellist faili või kataloogi ei ole"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Vigane failinimi"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Pole toetatud"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digikaamera (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s kaamera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s audioesitaja"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Kaamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Audioesitaja"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2008
-msgid "Failed to get folder list"
-msgstr "Kataloogide nimekirja pole võimalik hankida"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "Seade on määramata"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "gphoto2 konteksti pole võimalik luua"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "Viga kaamera loomisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482 ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading device information"
-msgstr "Viga seadme andmete laadimisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up device information"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting device information"
-msgstr "Viga seadme andmete hankimisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting up camera communications port"
-msgstr "Viga kaamera suhtluspordi andmete seadmisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "Viga kaamera lähtestamisel"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 ühendatud ketas %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "Kaamera on määramata"
-
-#: ../daemon/gvfsbackendgphoto2.c:1719
-msgid "Error creating file object"
-msgstr "Viga failiobjekti loomisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:1733
-msgid "Error getting file"
-msgstr "Viga faili hankimisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:1742
-msgid "Error getting data from file"
-msgstr "Viga andmete hankimisel failist"
-
-#: ../daemon/gvfsbackendgphoto2.c:1836 ../daemon/gvfsbackendgphoto2.c:3010
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1975 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Pole kataloog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2071
-msgid "Failed to get file list"
-msgstr "Failide nimekirja pole võimalik hankida"
-
-#: ../daemon/gvfsbackendgphoto2.c:2360
-msgid "Error creating directory"
-msgstr "Viga kataloogi loomisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:2568
-msgid "Name already exists"
-msgstr "Nimi on juba olemas"
-
-#: ../daemon/gvfsbackendgphoto2.c:2579 ../daemon/gvfsbackendgphoto2.c:3200
-msgid "New name too long"
-msgstr "Uus nimi on liiga pikk"
-
-#: ../daemon/gvfsbackendgphoto2.c:2589 ../daemon/gvfsbackendgphoto2.c:3211
-msgid "Error renaming dir"
-msgstr "Viga kataloogi ümbernimetamisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:2601 ../daemon/gvfsbackendgphoto2.c:3223
-msgid "Error renaming file"
-msgstr "Viga faili ümbernimetamisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:2664
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Kataloog '%s' pole tühi"
-
-#: ../daemon/gvfsbackendgphoto2.c:2675
-msgid "Error deleting directory"
-msgstr "Viga kataloogi kustutamisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:2700
-msgid "Error deleting file"
-msgstr "Viga faili kustutamisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:2752
-msgid "Can't write to directory"
-msgstr "Kataloogi pole võimalik kirjutada"
-
-#: ../daemon/gvfsbackendgphoto2.c:2799
-msgid "Cannot allocate new file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2813
-msgid "Cannot read file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2823
-msgid "Cannot get data of file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3109
-msgid "Error writing file"
-msgstr "Viga faili kirjutamisel"
-
-#: ../daemon/gvfsbackendgphoto2.c:3156
-msgid "Not supported (not same directory)"
-msgstr "Pole toetatud (pole sama kataloog)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3168
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Pole toetatud (lähtekoht on kataloog, sihtkoht on ka kataloog)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3176
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Pole toetatud (lähtekoht on kataloog, sihtkoht on olemasolev fail)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3188
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Pole toetatud (lähtekoht on fail, sihtkoht on kataloog)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP-kliendi viga: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (vigane kodeering)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Kataloogiteavitus pole toetatud"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windowsi võrk"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Kohalik võrk"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Võrguasukoha monitoorija"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "Kataloog %s serverist %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Ühendus seadmega on katkenud"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Seadmele on vaja teha tarkvarauuendus"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh-programm lõpetas ootamatult"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Hostinimi on tundmatu"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Hostini puudub töötav marsruut"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Server lükkas ühenduse tagasi"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Tõrge hostivõtme verifitseerimisel"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "ssh-programmi pole võimalik käivitada"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ssh-programmi pole võimalik käivitada: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Sisselogimine ületas ajapiirangu"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Sisesta võtme parool"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Sisesta parool"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Parooli pole võimalik saata"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Logi ikkagi sisse"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Katkesta sisselogimine"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Kaugarvuti (%s) identiteet on tundmatu.\n"
-"See olukord tekib tavaliselt arvutisse esimese sisselogimise korral.\n"
-"\n"
-"Kaugarvuti poolt saadetud identiteet on %s. Kui sa tahad turvakaalutlustel "
-"selles täiesti kindel olla, siis võta palun ühendust oma süsteemihalduriga."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Sisselogimisdialoog tühistati"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Hosti identimisandmeid pole võimalik saata"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Protokolli viga"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp hostil %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Toetatud ssh-käsku pole võimalik leida"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Tõrge"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Võeti vastu vigane vastus"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Viga varufaili loomisel: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Ajutist faili pole võimalik luua"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr ""
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Serveris %2$s asuva jagatud kataloogile %1$s on vaja parooli"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Sisemine viga (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Tõrge Windowsi jagatud kataloogi ühendamisel"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Tõrge varufaili loomisel: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Viga faili kustutamisel: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Viga faili ümbertõstmisel: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Viga sihtfaili eemaldamisel: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Kataloogi pole võimalik rekursiivselt ümber tõsta"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Windowsi jagatud failisüsteemi teenus"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windowsi jagatud kataloogid serveris %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Fail pole ühendatav"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Pole tavaline fail"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windowsi võrgufailisüsteemi teenus"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Prügikast"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (prügikastis)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Prügikasti pole võimalik kustutada"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Prügikataloogi teavitus pole toetatud"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Vigane taustaprogrammi liik"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Viga fd saatmisel: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Operatsioon pole taustaprogrammi poolt toetatud"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Nimeviidad pole taustaprogrammi poolt toetatud"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Vigane dbus-sõnum"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Vana deemoni asendamine."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Fuse't ei käivitata."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS-deemon"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GVFS-i peadeemon"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Täiendava teabe jaoks proovi \"%s --help\"."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr ""
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Tõrge automaatühendamisel: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Määratud asukoht pole ühendatud"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Määratud asukoht pole toetatud"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Asukoht on juba ühendatud"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Asukoht pole ühendatav"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s-ajam"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s-ajam"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Flopiajam"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Tarkvaraline RAID-salvesti"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB-ajam"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA-ajam"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI-ajam"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire-ajam"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Magnetlintsalvesti"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash-ajam"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick-ajam"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia-ajam"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC-ajam"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip-ajam"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz-ajam"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Mälupulk"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Massalvesti"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Tõrge meediumi väljastamisel, üks või enam meediumit on hõivatud."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Audio ja andmete segaplaat"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "%s meedium"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s krüptitud andmed"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM plaat"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Tühi CD-ROM plaat"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R plaat"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Tühi CD-R plaat"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW plaat"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Tühi CD-RW plaat"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM plaat"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Tühi DVD-ROM plaat"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM plaat"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Tühi DVD-RAM plaat"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW plaat"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Tühi DVD-RW plaat"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R plaat"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Tühi DVD+R plaat"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW plaat"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Tühi DVD+RW plaat"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL plaat"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Tühi DVD+R DL plaat"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray plaat"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Tühi Blu-Ray plaat"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R plaat"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Tühi Blu-Ray R plaat"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW plaat"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Tühi Blu-Ray RW plaat"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD plaat"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Tühi HD DVD plaat"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R plaat"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Tühi HD DVD-R plaat"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW plaat"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Tühi HD DVD-RW plaat"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO plaat"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Tühi MO plaat"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Plaat"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Tühi plaat"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: viga faili avamisel: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, viga standardväljundisse kirjutamisel"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: viga lugemisel: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: viga sulgemisel: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "ASUKOHT... - ASUKOHTADE ühteliitmine standardväljundisse."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Asukohtades asuvate failide ühteliitmine ning standardväljundisse "
-"väljastamine. Töötab nagu klassikaline utiliit cat, kuid kasutab kohalike "
-"failide asemel gvfs-i asukohti. Näiteks võib failide liitmiseks kasutada "
-"asukohta smb://server/resource/file.txt."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Märkus: vormindusvõtmete (näiteks -n, -T või mõne muu) kasutamiseks suuna "
-"väljund programmile cat."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: asukohad on puudu"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: viga asukoha avamisel: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: viga rakenduse käivitamisel: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FAILID... - FAILIDE avamine registreeritud rakenduse abil."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Faili(de) avamine selle failitüübi käsitlemiseks registreeritud vaikimisi "
-"rakendusega."
-
-#~ msgid "Error getting port info from port info list"
-#~ msgstr "Viga pordi andmete hankimisel pordi andmete nimekirjast"
-
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "Failisüsteem on hõivatud: %d faili on avatud"
-
-#~ msgid "File unavailable"
-#~ msgstr "Fail pole saadaval"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "%.1f kB meedium"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "%.1f MB meedium"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "%.1f GB meedium"
diff --git a/po/eu.po b/po/eu.po
deleted file mode 100644
index 61d43f9d..00000000
--- a/po/eu.po
+++ /dev/null
@@ -1,1538 +0,0 @@
-# translation of eu.po to Basque
-# translation of gvfs.HEAD.po to Basque
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: eu\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-23 15:46+0200\n"
-"PO-Revision-Date: 2008-08-23 15:56+0200\n"
-"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>\n"
-"Language-Team: Basque <itzulpena@euskalgnu.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "Eragiketa ez dago onartuta, fitxategiak muntai desberdinetan"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "'get_info'-k balio baliogabea itzuli du"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "'query_info'-k balio baliogabea itzuli du"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Ezin izan da korronte-fitxategiaren deskriptorea lortu"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "'open'-ek balio baliogabea itzuli du"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Ez da korronte-fitxategiaren deskriptorea lortu"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "'call'-ek balio baliogabea itzuli du"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "'get_filesystem_info'-k balio baliogabea itzuli du"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Ezin izan da muntai inguratua aurkitu"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "%s fitxategi-izen baliogabea"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "'query_filesystem_info'-k balio baliogabea itzuli du"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "'monitor_dir'-ek balio baliogabea itzuli du"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "'monitor_file'-k balio baliogabea itzuli du"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Errorea korrontearen protokoloan: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Korrontearen amaiera"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Eragiketa bertan behera utzi da"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Ez da bilaketarik onartzen korrontean"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Informazioa kontsultatzeko eragiketa ez dago onartuta"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Ez da kontsultaren informaziorik onartzen korrontean"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Errorea muntaiaren informazioa lortzean: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Errorea daemonarekin konektatzean: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Errorea socket-a sortzean: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Errorea socket-arekin konektatzean: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Fitxategiaren informazioaren formatu baliogabea"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Atributuaren informazio-zerrendaren eduki baliogabea"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Errorea 'D-Bus'ekin konektatzean: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s fitxategi-sistemaren zerbitzua"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Errorea: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Erabilera: %s --spawner dbus-id objektu-bidea"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Erabilera: %s gakoa=balioa gakoa=balioa ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Ez da muntai motarik zehaztu"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s(r)en muntatze-puntua jadanik exekutatzen ari da"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "Errorea muntatze-daemona abiaraztean"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "%s(e)ko /"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Ez da ostalari-izenik zehaztu"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Muntaiaren zehaztapen baliogabea"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Fitxategia ez da existitzen"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Fitxategia ez da direktorioa"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Grabatu"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Ezin da aldi baterako direktorioa sortu"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendgphoto2.c:2690
-#, c-format
-msgid "No such file or directory"
-msgstr "Ez dago halako fitxategi edo direktoriorik"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "Direktorioa ez dago hutsik"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "Ezin da fixtategia direktorio gainean kopiatu"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD sortzailea"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2763
-msgid "File exists"
-msgstr "Fitxategia badago lehendik ere"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "Ez dago halako fitxategi edo direktoriorik helburuko bide-izenean"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "Ezin da direktorioa direktorio gainean kopiatu"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "Helburuko fitxategia badago lehendik ere"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "Ezin da direktorioa errekurtsiboki kopiatu"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2348
-#: ../daemon/gvfsbackendgphoto2.c:2556 ../daemon/gvfsbackendgphoto2.c:2651
-#: ../daemon/gvfsbackendgphoto2.c:2742
-msgid "Not supported"
-msgstr "Ez dago onartuta"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "Ezin izan da sistemako busarekin konektatu"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "Ezin da libhal testuingurua sortu"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "Ezin da libhal hasieratu"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Ez da unitaterik zehaztu"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Ezin da %s unitatea aurkitu"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "%s unitateak ez dauka audio-fitxategirik"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda hemen muntatuta: %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Audio-diskoa"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Fitxategi-sistema lanpetuta dago: fitxategi %d irekita"
-msgstr[1] "Fitxategi-sistema lanpetuta dago: %d fitxategi irekita"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Ez dago %s fitxategia %s unitatean"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "'Paranoia' programaren errorea %s unitatean"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Errorea korrontean bilaketa egitean %s unitatean"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1711
-#, c-format
-msgid "No such file"
-msgstr "Ez dago halako fitxategirik"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Fitxategia ez da existitzen edo ez da audioko pista bat"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Audio CDaren fitxategi-sistemaren zerbitzua"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Ordenagailua"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Fitxategi-sistema"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1703
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "Ezin da direktorioa ireki"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Ezin da fitxategi muntagarria ireki"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Barneko errorea: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Ezin da fitxategia muntatu"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Ez dago euskarririk unitatean"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Ez da fitxategi muntagarria"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Ezin da fitxategia desmuntatu"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Ezin da fitxategia egotzi"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP errorea: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Ezin izan da erantzuna analizatu"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Erantzun hutsa"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Ustekabeko erantzuna zerbitzaritik"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "Erantzun baliogabea"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "WebDAV partekatzea"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "Sartu %s(r)en pasahitza"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "Sartu proxyaren pasahitza"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr "Ez da gaitutako WebDAV partekatzea"
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV %s(e)n"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "Ezin izan da eskaera sortu"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Helburuko fitxategia badago lehendik ere"
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Fitxategia kanpotik aldatu da"
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Huts egin du babeskopiaren fitxategia sortzean"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Ezin da fitxategia edo direktorioa monitorizatu."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "DNS-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Sarea"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Kontuak ez daude onartuta"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Ostalariak konexioa itxi du"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Ezin da datuen konexioa ireki. Agian suebakiak eragozten du?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Datuen konexioa itxita"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Eragiketak huts egin du"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Ez dago leku librerik zerbitzarian"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Eragiketa ez dago onartuta"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Baimena ukatuta"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Orrialde mota ezezaguna"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Fitxategi-izen baliogabea"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Erantzun baliogabea"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "transmisioa hautsita"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Ezin izan da ostalariarekin konektatu"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Sartu %s(r)en Ftp-aren pasahitza"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Pasahitzaren elkarrizketa-koadroa bertan behera utzita"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "%s(r)en ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp %s gisa %s(r)en"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Fitxategia direktorioa da"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "babeskopiak ez daude onartuta oraindik"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "fitxategi-izena luzeegia"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Helburuko fitxategi-izen baliogabea"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: direktorioa edo fitxategia badago lehendik ere"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: ez dago halako fitxategi edo direktoriorik"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: fitxategi-izen baliogabea"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: ez dago onartuta"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Kamera digitala (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s kamera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s audio-erreproduzigailua"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Audio-erreproduzigailua"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2008
-msgid "Failed to get folder list"
-msgstr "Huts egin du karpeten zerrenda lortzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "Ez da gailurik zehaztu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "Ezin da gphoto2 testuingurua sortu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "Errorea kamera sortzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482 ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading device information"
-msgstr "Errorea gailuaren informazioa kargatzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up device information"
-msgstr "Errorea gailuaren informazioa bilatzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting device information"
-msgstr "Errorea gailuaren informazioa lortzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting up camera communications port"
-msgstr "Errorea kameraren komunikazio-ataka ezartzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "Errorea kamera hasieratzean"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 hemen muntatuta: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "Ez da kamerarik zehaztu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1719
-msgid "Error creating file object"
-msgstr "Errorea fitxategi-objektua sortzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:1733
-msgid "Error getting file"
-msgstr "Errorea fitxategia lortzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:1742
-msgid "Error getting data from file"
-msgstr "Errorea fitxategitik datuak lortzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:1836 ../daemon/gvfsbackendgphoto2.c:3010
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Errorea %s kamerako korrontean bilaketa egitean"
-
-#: ../daemon/gvfsbackendgphoto2.c:1975 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Ez da direktorioa"
-
-#: ../daemon/gvfsbackendgphoto2.c:2071
-msgid "Failed to get file list"
-msgstr "Huts egin du fitxategien zerrenda lortzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:2360
-msgid "Error creating directory"
-msgstr "Errorea direktorioa sortzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:2568
-msgid "Name already exists"
-msgstr "Izen hori badago lehendik ere"
-
-#: ../daemon/gvfsbackendgphoto2.c:2579 ../daemon/gvfsbackendgphoto2.c:3200
-msgid "New name too long"
-msgstr "Izen barria luzeegia da"
-
-#: ../daemon/gvfsbackendgphoto2.c:2589 ../daemon/gvfsbackendgphoto2.c:3211
-msgid "Error renaming dir"
-msgstr "Errorea direktorioa izenez aldatzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:2601 ../daemon/gvfsbackendgphoto2.c:3223
-msgid "Error renaming file"
-msgstr "Errorea fitxategia izenez aldatzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:2664
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "'%s' direktorioa ez dago hutsik"
-
-#: ../daemon/gvfsbackendgphoto2.c:2675
-msgid "Error deleting directory"
-msgstr "Errorea direktorioa ezabatzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:2700
-msgid "Error deleting file"
-msgstr "Errorea fitxategia ezabatzean"
-
-#: ../daemon/gvfsbackendgphoto2.c:2752
-msgid "Can't write to directory"
-msgstr "Ezin da direktorioan idatzi"
-
-#: ../daemon/gvfsbackendgphoto2.c:2799
-msgid "Cannot allocate new file to append to"
-msgstr "Ezin da fitxategi berria esleitu eransteko"
-
-#: ../daemon/gvfsbackendgphoto2.c:2813
-msgid "Cannot read file to append to"
-msgstr "Ezin da fitxategia irakurri eransteko"
-
-#: ../daemon/gvfsbackendgphoto2.c:2823
-msgid "Cannot get data of file to append to"
-msgstr "Ezin da daturik lortu fitxategitik eransteko"
-
-#: ../daemon/gvfsbackendgphoto2.c:3109
-msgid "Error writing file"
-msgstr "Errorea fitxategia idaztean"
-
-#: ../daemon/gvfsbackendgphoto2.c:3156
-msgid "Not supported (not same directory)"
-msgstr "Ez dago onartuta (ez da direktorio berdina)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3168
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Ez dago onartuta (iturb. dir da, helb. dir da)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3176
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Ez dago onartuta (iturb. dir da, helb. badagoen fitxategia da)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3188
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Ez dago onartuta (iturb. fitxategia da, helb. dir da)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP bezeroaren errorea: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (kodeketa baliogabea)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Direktorioaren jakinarazpena ez dago onartuta"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows sarea"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Sare lokala"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Sarea kokatzeko monitorea"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s - %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Gailuaren konexioa galduta"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Gailuak softwarea eguneratzea eskatzen du"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "'ssh' programa ustekabean amaitu da"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Ostalari-izena ezezaguna"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Ez dago biderik ostalariraino"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Zerbitzariak konexioa ukatu du"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Ostalariaren gakoaren egiaztaketak huts egin du"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Ezin da 'ssh' programa abiarazi"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Ezin da 'ssh' programa abiarazi: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Denboraz kanpo saioa hastean"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Sartu gakoaren pasahitza"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Sartu pasahitza"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Ezin da pasahitza bidali"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Sartu saioan hala ere"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Ez sartu saioan"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Urruneko ordenagailuaren (%s) identitatea ezezaguna da.\n"
-"Ordenagailu batean aurreneko aldiz saioa hastean getatu ohi da.\n"
-"\n"
-"Urruneko ordenagailuak bidalitako identitatea %s da. Jarraitzea segurua ote "
-"den jakiteko, jar zaitez sistemako administratzailearekin harremanetan."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Saio-hasieraren elkarrizketa-koadroa bertan behera utzita"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Ezin da ostalari-identitatearen berrespena bidali"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Protokoloaren errorea"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "%s(r)en sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Ezin da onartutako 'ssh' komandoa aurkitu"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Hutsegitea"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Jasotako erantzun baliogabea"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Errorea babeskopiaren fitxategia sortzean: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Ezin da aldi baterako fitxategia sortu"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Ezin da direktorioa direktorio gainera eraman"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Pasahitza behar da %s partekatzeko %s(e)n"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Barneko errorea (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Huts egin du Windows-en partekatzea muntatzean"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Onartu gabeko bilaketa mota"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Huts egin du babeskopiaren fitxategia sortzean: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Errorea fitxategia ezabatzean: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Errorea fitxategia lekuz aldatzean: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Errorea helburuko fitxategia kentzean: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Ezin da direktorioa errekurtsiboki lekuz aldatu"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows-eko fitxategi partekatuen sistemaren zerbitzua"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windows-ek partekatua %s(e)n"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Fitxategia ez da muntagarria"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Ez da fitxategi erregularra"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windows sareko fitxategi-sistemaren zerbitzua"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Zakarrontzia"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (zakarrontzian)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Ezin da zakarrontzia hustu"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Zakarrontzia direktorioaren jakinarazpena ez dago onartuta"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Motor mota baliogabea"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Errorea fd bidaltzean: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Motorrak ez du eragiketa onartzen"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Motorrak ez du esteka sinbolikorik onartzen"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "D-BUSen mezu baliogabea"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Ordeztu daemon zaharra."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Ez hasi fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS daemona"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GVFSren daemon nagusia"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Saiatu \"%s --help\" komandoarekin informazio gehiagorako."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Abiatutako umearen argumentu baliogabeak"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Huts egin du automatikoki muntatzean: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Zehaztutako kokalekua ez da muntatu"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Zehaztutako kokalekua ez dago onartuta"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Kokalekua jadanik muntatuta dago"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Kokalekua ez da muntagarria"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROMa"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-Ra"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RWa"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROMa"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+Ra"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RWa"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-Ra"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RWa"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAMa"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±Ra"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RWa"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVDa"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-Ra"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RWa"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "'Blu-ray'a"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "'Blu-ray-R'a"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "'Blu-ray-RE'a"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s unitatea"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s unitatea"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Diskete unitatea"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Softwareko RAID unitatea"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB unitatea"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA unitatea"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI unitatea"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire unitatea"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Zinta unitatea"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash unitatea"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick unitatea"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia unitatea"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC unitatea"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "ZIP unitatea"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz unitatea"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Thumb unitatea"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Biltegiratze masiboa unitatea"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Huts egin du euskarria egoztean: euskarriko bolumen bat edo gehiago "
-"lanpetuta dago."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Nahastutako Audio/Datuen diskoa"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "%s euskarria"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s enkriptatutako datuak"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM diskoa"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "CD-RW disko garbia"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R diskoa"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "CD-R disko garbia"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW diskoa"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "CD-RW disko garbia"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM diskoa"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "DVD-ROM disko garbia"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM diskoa"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "DVD-RAM disko garbia"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW diskoa"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "DVD-RW disko garbia"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R diskoa"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "DVD+R disko garbia"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW diskoa"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "DVD+RW disko garbia"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL diskoa"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "DVD+R DL disko garbia"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray diskoa"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Blu-Ray disko garbia"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R diskoa"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Blu-Ray R disko garbia"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW diskoa"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Blu-Ray RW disko garbia"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD diskoa"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "HD DVD disko garbia"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R diskoa"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "HD DVD-R disko garbia"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW diskoa"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "HD DVD-RW disko garbia"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO diskoa"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "MO disko garbia"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Diskoa"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Disko garbia"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: errorea fitxategia irekitzean: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, errorea irteera estandarrean (stdout) idaztean"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: errorea irakurtzean: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:errorea ixtean: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "KOKALEKUAK... - kateatu KOKALEKUAK irteera estandarrean"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Kokalekuetako fitxategiak kateatu eta irteera estandarrean erakutsi. 'cat' "
-"tresna bezala funtzionatzen du, baina lokaleko kokalekuak erabili ordez gvfs "
-"kokalekuak erabiliz. Adibidez, honelako zerbait erabil dezakezu: smb://"
-"server/resource/file.txt kateatzeko kokaleku gisa."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr "Oharra: kanalizatu 'cat' bidez -n, -T edo bestelako formatua emateko."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: kokalekuak falta dira"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: errorea helbidea irekitzean: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: errorea fitxategia abiaraztean: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FITXATEGIAK... - ireki FITXATEGIAK erregistratutako aplikazioarekin."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Fitxategia(k) irekitzen d(it)u fitxategi mota kudeatzeko erregistratutako "
-"aplikazio lehenetsiarekin."
-
diff --git a/po/fi.po b/po/fi.po
deleted file mode 100644
index 92b77228..00000000
--- a/po/fi.po
+++ /dev/null
@@ -1,1589 +0,0 @@
-# Finnish messages for gvfs
-# Copyright (C) 2008 Free Software Foundation, Inc.
-# Ilkka Tuohela <hile@iki.fi> 2008.
-# Timo Jyrinki <timo.jyrinki@iki.fi>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-13 13:42+0300\n"
-"PO-Revision-Date: 2008-08-13 13:50+0300\n"
-"Last-Translator: Ilkka Tuohela <hile@iki.fi>\n"
-"Language-Team: Finnish <gnome-fi-laatu@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "Toiminto ei ole tuettu, tiedostot eri liitospisteissä"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Virheellinen kutsun get_info paluuarvo"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Virheellinen kutsun query_info paluuarvo"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Virran tiedostokuvaajaa ei saatu"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "Virheellinen kutsun open paluuarvo"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Virran tiedostokuvaajaa ei saatu"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Virheellinen kutsun paluuarvo"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Virheellinen kutsun get_filesystem_info paluuarvo"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Yllä olevaa liitospistettä ei voitu selvittää"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Virheellinen tiedostonimi %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Virheellinen kutsun query_filesystem_info paluuarvo"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "Virheellinen kutsun monitor_dir paluuarvo"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "Virheellinen kutsun monitor_file paluuarvo"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Virhe virtaprotokollassa: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Virta loppui"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Toiminto peruttiin"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Virta ei tue siirtymistä"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Tämä tietokysely ei ole tuettu"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Virta ei tue tietojen kyselyä"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Virhe haettaessa tietoja liitospisteestä: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Virhe yhdistettäessä palvelinprosessiin: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Virhe luotaessa pistoketta: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Virhe yhdistettäessä pistokkeeseen: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Virheellinen tiedoston tietojen muoto"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Virheellinen määreiden tietolistan sisältö"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Virhe D-Bus-yhteydessä: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s-tiedostojärjestelmäpalvelu"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Virhe: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Käyttö: %s --spawner dbus-tunniste kohde_polku"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Käyttö: %s avain=arvo avain=arvo"
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Liitostyyppiä ei annettu"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "liitospiste kohteelle %s on jo käynnissä"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "virhe käynnistettäessä liitospalvelinta"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ palvelimella %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Verkkonimeä ei annettu"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1448 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Virheellinen liitosmäärittely"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Tiedostoa ei ole olemassa"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Tiedosto ei ole kansio"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Polta"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Väliaikaistiedostoa ei voitu luoda"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1978 ../daemon/gvfsbackendgphoto2.c:2687
-#, c-format
-msgid "No such file or directory"
-msgstr "Tiedostoa tai kansiota ei löydy"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2035
-msgid "Directory not empty"
-msgstr "Kansio ei ole tyhjä"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "Tiedostoa ei voi kopioida kansion päälle"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD-luontityökalu"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2760
-msgid "File exists"
-msgstr "Tiedosto on jo olemassa"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "Kohdepolulla ei ole haluttua kansiota tai hakemistoa"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "Kansiota ei voi kopioida kansion päälle"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "Kohdetiedosto on jo olemassa"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "Kansiota ei voi kopioida rekursiivisesti"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2345
-#: ../daemon/gvfsbackendgphoto2.c:2553 ../daemon/gvfsbackendgphoto2.c:2648
-#: ../daemon/gvfsbackendgphoto2.c:2739
-msgid "Not supported"
-msgstr "Ei tuettu"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "Järjestelmäväylään ei saatu yhteyttä"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "Libhal-kontekstia ei voi luoda"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "Libhal-kirjastoa ei voi alustaa"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Asemaa ei annettu"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Asemaa %s ei löydy"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Asema %s ei sisällä äänitiedostoja"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda-liitos laitteella %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Äänilevy"
-
-#: ../daemon/gvfsbackendcdda.c:356
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Tiedostojärjestelmä on käytössä: %d avoin tiedosto"
-msgstr[1] "Tiedostojärjestelmä on käytössä: %d avointa tiedostoa"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Tiedostoa %s ei löydy asemasta %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "'Paranoia'-virhe asemasta %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Virhe siirryttäessä virrassa asemassa %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1708
-#, c-format
-msgid "No such file"
-msgstr "Tiedostoa ei löydy"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Tiedostoa ei ole olemassa tai se ei ole ääniraita"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Ääni-CD:n tiedostojärjestelmäpalvelu"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Tietokone"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Tiedostojärjestelmä"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1700
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "Kansiota ei voi avata"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Liitettävää tiedostoa ei löydy"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Sisäinen virhe: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Tiedostoa ei voi liittää"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Asemassa ei ole mediaa"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Ei liitettävissä oleva tiedosto"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Tiedostoa ei voi irrottaa"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Tiedostoa ei voi poistaa asemasta"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1515
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP-virhe: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Vastausta ei voitu tulkita"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Tyhjä vastaus"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Odottamaton vastaus palvelimelta"
-
-#: ../daemon/gvfsbackenddav.c:1148 ../daemon/gvfsbackenddav.c:1650
-msgid "Response invalid"
-msgstr "Virheellinen vastaus"
-
-#: ../daemon/gvfsbackenddav.c:1291
-msgid "WebDAV share"
-msgstr "WebDAV-jako"
-
-#: ../daemon/gvfsbackenddav.c:1293
-#, c-format
-msgid "Enter password for %s"
-msgstr "Anna kohteen %s salasana"
-
-#: ../daemon/gvfsbackenddav.c:1296
-msgid "Please enter proxy password"
-msgstr "Syötä välipalvelimen salasana"
-
-#: ../daemon/gvfsbackenddav.c:1519 ../daemon/gvfsbackenddav.c:1523
-msgid "Not a WebDAV enabled share"
-msgstr "Jako ei tue WebDAV:ia"
-
-#: ../daemon/gvfsbackenddav.c:1546
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV-jako palvelimella %s"
-
-#: ../daemon/gvfsbackenddav.c:1606 ../daemon/gvfsbackenddav.c:1679
-msgid "Could not create request"
-msgstr "Pyyntöä ei voitu luoda"
-
-#: ../daemon/gvfsbackenddav.c:1742 ../daemon/gvfsbackenddav.c:1995
-#: ../daemon/gvfsbackenddav.c:2106 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Kohdetiedosto on jo olemassa"
-
-#: ../daemon/gvfsbackenddav.c:1815 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Tiedostoa muokattiin muualta"
-
-#: ../daemon/gvfsbackenddav.c:1846 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Varmuuskopiotiedoston luonti epäonnistui"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Tiedostoa tai kansiota ei voi tarkkailla."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "DNS-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Verkko"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Tilejä ei ole tuettu"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Palvelin sulki yhteyden"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Datayhteyttä ei voi avata. Ehkä palomuuri estää FTP-datayhteyden?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Datayhteys on suljettu"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Toiminto epäonnistui"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Palvelimella ei ole tilaa jäljellä"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Toiminto ei tue tuettu"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Lupa evätty"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Sivun tyyppi on tuntematon"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Virheellinen tiedostonimi"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Virheellinen vastaus"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "siirto keskeytyi"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Palvelimeen ei saatu yhteyttä"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Anna palvelimen %s ftp-salasana"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Salasanakysely keskeytettiin"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp palvelimella %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp käyttäjänä %s palvelimella %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Tiedosto on kansio"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "varmuuskopioita ei vielä tueta"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "tiedostonimi liian pitkä"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Virheellinen kohteen tiedostonimi"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: kansio tai tiedosto on olemassa"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: tiedostoa tai kansiota ei ole olemassa"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: virheellinen tiedostonimi"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: ei tuettu"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digitaalikamera (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s-kamera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s-musiikkisoitin"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Musiikkisoitin"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325
-msgid "Error listing folders to figure out ignore prefix"
-msgstr "Virhe listattaessa kansioita ohitettavien etuliitteiden määrittelyä varten"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "Laitetta ei määritelty"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "Gphoto2-kontekstia ei voi luoda"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "Virhe luotaessa kameralaitetta"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482
-msgid "Error creating port info list"
-msgstr "Virhe luotaessa porttitietojen luetteloa"
-
-#: ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading info list"
-msgstr "Virhe ladattaessa tietoluetteloa"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up port info from port info list"
-msgstr "Virhe etsittäessä tietoja porttitietojen luettelosta"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting port info from port info list"
-msgstr "Virhe noudettaessa tietoja tietoja porttitietojen luettelosta"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting port info"
-msgstr "Virhe asetettaessa porttitietoja"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "Virhe alustettaessa kameraa"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2-liitos laitteella %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "Kameraa ei ole annettu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open files"
-msgstr "Tiedostojärjestelmä on käytössä: %d avointa tiedostoa"
-
-#: ../daemon/gvfsbackendgphoto2.c:1716
-msgid "Error creating file object"
-msgstr "Virhe luotaessa tiedosto-oliota"
-
-#: ../daemon/gvfsbackendgphoto2.c:1730
-msgid "Error getting file"
-msgstr "Virhe pyydettäessä tiedostoa"
-
-#: ../daemon/gvfsbackendgphoto2.c:1739
-msgid "Error getting data from file"
-msgstr "Virhe pyydettäessä tietoja tiedostosta"
-
-#: ../daemon/gvfsbackendgphoto2.c:1833 ../daemon/gvfsbackendgphoto2.c:3007
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Virhe siirryttäessä virrassa kamerassa %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1972 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Ei ole kansio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2005
-msgid "Error listing folders"
-msgstr "Virhe näytettäessä kansioita"
-
-#: ../daemon/gvfsbackendgphoto2.c:2068
-msgid "Error listing files in folder"
-msgstr "Virhe näytettäessä kansion tiedostoja"
-
-#: ../daemon/gvfsbackendgphoto2.c:2357
-msgid "Error creating directory"
-msgstr "Virhe luotaessa kansiota"
-
-#: ../daemon/gvfsbackendgphoto2.c:2565
-msgid "Name already exists"
-msgstr "Nimi on jo olemassa"
-
-#: ../daemon/gvfsbackendgphoto2.c:2576 ../daemon/gvfsbackendgphoto2.c:3197
-msgid "New name too long"
-msgstr "Uusi nimi on liian pitkä"
-
-#: ../daemon/gvfsbackendgphoto2.c:2586 ../daemon/gvfsbackendgphoto2.c:3208
-msgid "Error renaming dir"
-msgstr "Virhe nimettäessä kansiota uudestaan"
-
-#: ../daemon/gvfsbackendgphoto2.c:2598 ../daemon/gvfsbackendgphoto2.c:3220
-msgid "Error renaming file"
-msgstr "Virhe nimettäessä tiedostoa uudestaan"
-
-#: ../daemon/gvfsbackendgphoto2.c:2661
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Kansio \"%s\" ei ole tyhjä"
-
-#: ../daemon/gvfsbackendgphoto2.c:2672
-msgid "Error deleting directory"
-msgstr "Virhe poistettaessa kansiota"
-
-#: ../daemon/gvfsbackendgphoto2.c:2697
-msgid "Error deleting file"
-msgstr "Virhe poistettaessa tiedostoa"
-
-#: ../daemon/gvfsbackendgphoto2.c:2749
-msgid "Can't write to directory"
-msgstr "Kansioon ei voi kirjoittaa"
-
-#: ../daemon/gvfsbackendgphoto2.c:2796
-msgid "Cannot allocate new file to append to"
-msgstr "Uutta tiedostoa, johon piti lisätä, ei voi varata"
-
-#: ../daemon/gvfsbackendgphoto2.c:2810
-msgid "Cannot read file to append to"
-msgstr "Tiedostoa, johon piti lisätä, ei voi lukea"
-
-#: ../daemon/gvfsbackendgphoto2.c:2820
-msgid "Cannot get data of file to append to"
-msgstr "Sisältöä tiedostosta, johon piti lisätä, ei saatu"
-
-#: ../daemon/gvfsbackendgphoto2.c:3106
-msgid "Error writing file"
-msgstr "Virhe kirjoitettaessa tiedostoa"
-
-#: ../daemon/gvfsbackendgphoto2.c:3153
-msgid "Not supported (not same directory)"
-msgstr "Ei tuettu (ei ole sama kansio)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3165
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Ei tuettu (lähde on kansio, kohde on kansio)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3173
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Ei tuettu (lähde on kansio, kohde on olemassaoleva tiedosto)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3185
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Ei tuettu (lähde on tiedosto, kohde on kansio)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP-asiakkaan virhe: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (virheellinen koodaus)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Kansioiden huomautukset eivät ole tuettu"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows-verkko"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Paikallisverkko"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Verkkosijaintien tarkkailija"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s palvelimella %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Yhteys laitteeseen hukattiin"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Laite vaatii ohjelmistopäivityksen"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "Ohjelma ssh sulkeutui odottamatta"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Verkkonimi tuntematon"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Ei reittiä palvelimelle"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Palvelin kieltäytyi yhteydestä"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Palvelimen avaimen vahvistus epäonnistui"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Ohjelmaa ssh ei voi käynnistää"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Ohjelmaa ssh ei voi käynnistää: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Aikakatkaisu kirjauduttaessa"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Syötä avaimen salalause"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Syötä salasana"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Salasanaa ei voitu lähettää"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Kirjaudu joka tapauksessa"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Peru kirjautuminen"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Palvelimen \"%s\" identiteettiä ei voitu vahvistaa.\n"
-"Tämä tapahtuu, kun kirjaudut palvelimelle ensimmäistä kertaa.\n"
-"Palvelimen lähettämää tunniste on %s. jos haluat olla täysin varma, että "
-"yhdistäminen on turvallista, ota yhteyttää palvelimen ylläpitäjään."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Kirjautumisikkuna peruttiin"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Palvelimen tunnistusvahvistusta ei voi lähettää"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Protokollavirhe"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp palvelimella %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Tuettua ssh-komentoa ei löydy"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Virhe"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Saatiin virheellinen vastaus"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Virhe luotaessa varmuuskopiotiedostoa: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Virhe luotaessa väliaikaistiedostoa"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Kansiota ei voi siirtää kansion päälle"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Jako %s palvelimella %s vaatii salasanan"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Sisäinen virhe (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Windows-jakoa ei voitu liittää"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Siirtymistyyppi ei ole tuettu"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Varmuuskopiotiedoston luonti epäonnistui: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Virhe poistettaessa tiedostoa: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Virhe siirrettäessä tiedostoa: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Virhe poistettaessa kohdetiedostoa: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Kansiota ei voi siirtää rekursiivisesti"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows-jakojoen tiedostojärjestelmäpalvelu"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Palvelimen %s Windows-jaot"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Tiedosto ei ole liitettävissä"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Ei ole tavallinen tiedosto"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windows-verkon tiedostojärjestelmäpalvelu"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1226
-msgid "Trash"
-msgstr "Roskakori"
-
-#: ../daemon/gvfsbackendtrash.c:1016
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (roskakorissa)"
-
-#: ../daemon/gvfsbackendtrash.c:1327
-msgid "Can't delete trash"
-msgstr "Roskakoria ei voi poistaa"
-
-#: ../daemon/gvfsbackendtrash.c:1674 ../daemon/gvfsbackendtrash.c:1749
-msgid "Trash directory notification not supported"
-msgstr "Huomautukset roskakorista eivät ole tuettu"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Virheellinen taustajärjestelmän tyyppi"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Virhe lähettäessä tiedostokuvaajaa: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Taustajärjestelmä ei tue toimintoa"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Taustajärjestelmä ei tue symbolisia linkkejä"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Virheellinen dbus-viesti"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Korvaa vanha palvelinprosessi."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Älä käynnistä FUSE:a."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS-palvelinprosessi"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GVFS-pääpalvelin"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Saat lisätietoja komennolla \"%s --help\"."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Käynnistetyltä lapsiprosessilta saatiin virheellisiä argumentteja"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automaattinen liittäminen epäonnistui: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Määritelty sijainti ei ole liitetty"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Määritelty sijainti ei ole tuettu"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Sijainti on jo liitetty"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Sijainti ei ole liitettävissä"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-R"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-Ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-Ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-Ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s-asema"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s-asema"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Levykeasema"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Ohjelmistopohjainen RAID-levy"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB-asema"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA-asema"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI-asema"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire-asema"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Nauha-asema"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash-asema"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick-asema"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia-asema"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC-asema"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip-asema"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz-asema"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Muistitikku"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Massatallennusasema"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Asemaa ei voitu avata: yksi tai useampi taltio medialla on käytössä."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kt"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f Mt"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f Gt"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Yhdistetty ääni- ja datalevy"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "Media %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "Salattua tietoa %s"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM-levy"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Tyhjä CD-ROM-levy"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R-levy"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Tyhjä CD-R-levy"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW-levy"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Tyhjä CD-RW-levy"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM-levy"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Tyhjä DVD-ROM-levy"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM-levy"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Tyhjä DVD-RAM-levy"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Tyhjä DVD-RW-levy"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R-levy"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Tyhjä DVD+R-levy"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW-levy"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Tyhjä DVD+RW-levy"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL-levy"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Tyhjä DVD+R DL-levy"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray-levy"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Tyhjä Blu-Ray-levy"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R-levy"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Tyhjä Blu-Ray R-levy"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW-levy"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Tyhjä Blu-Ray RW-levy"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD-levy"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Tyhjä HD DVD-levy"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R-levy"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Tyhjä HD DVD-R-levy"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW-levy"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Tyhjä HD DVD-RW-levy"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO-levy"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Tyhjä MO-levy"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Levy"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Tyhjä levy"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: virhe avattaessa tiedostoa: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, virhe kirjoitettaessa oletustulosteeseen"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: virhe luettaessa: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: virhe suljettaessa: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "SIJAINTI... - yhdistä SIJAINNIT oletustulosteeseen."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Yhdistä tietoja eri sijainneista ja tulosta ne oletussyötteeseen. Toimii "
-"aivan kuten perinteinen ohjelma cat, mutta käyttää gvfs-sijainteja "
-"paikallisten tiedostojen sijasta. Voit esimerkiksi käyttää sijaintia smb://"
-"server/resource/file.txt liitettävänä tiedostona."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Huomautus: putkita cat:n kautta, jos tarvitset sen muotoiluvalintoja kuten -"
-"n tai -T."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: sijainti puuttuu"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: virhe avattaessa sijaintia: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: virhe käynnistettäessä ohjelmaa: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "TIEDOSTOT... - avaa TIEDOSTOT rekisteröidyllä ohjelmalla."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Avaa tiedostot oletusohjelmalla, joka on rekisteröity avaamaan tämän "
-"tyyppiset tiedostot."
-
-#~ msgid "File unavailable"
-#~ msgstr "Tiedosto ei ole saatavilla"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "%.1f kt media"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "%.1f Mt media"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "%.1f Gt media"
-
-#~ msgid "Invalid reply from server"
-#~ msgstr "Virheellinen vastaus palvelimelta"
-
-#~ msgid "File does not exist"
-#~ msgstr "Tiedostoa ei ole olemassa"
-
-#~ msgid "Invalid username"
-#~ msgstr "Virheellinen käyttäjätunnus"
-
-#~ msgid "Invalid password"
-#~ msgstr "Väärä salasana"
-
-#~ msgid "Operation cancelled"
-#~ msgstr "Toiminto peruttiin"
-
-#~ msgid "Enter passsword for %s"
-#~ msgstr "Anna jaon %s salasana"
-
-#~ msgid "FTP on %s"
-#~ msgstr "FTP-jako palvelimella %s"
-
-#~ msgid "FTP on %s:%u"
-#~ msgstr "FTP-jako palvelimella %s:%u"
-
-#~ msgid "The file does not exist"
-#~ msgstr "Tiedostoa ei ole olemassa"
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "Äänilevy asemassa %s"
diff --git a/po/fr.po b/po/fr.po
deleted file mode 100644
index bb8b99cd..00000000
--- a/po/fr.po
+++ /dev/null
@@ -1,1591 +0,0 @@
-# French translation of gvfs.
-# Copyright (C) 2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gvfs package.
-#
-# Claude Paroz <claude@2xlibre.net>, 2008.
-# Robert-André Mauchin <zebob.m@pengzone.org>, 2008.
-# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs HEAD\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-25 21:15+0200\n"
-"PO-Revision-Date: 2008-08-25 21:12+0200\n"
-"Last-Translator: Robert-André Mauchin <zebob.m@pengzone.org>\n"
-"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n>1;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-"L'opération n'est pas prise en charge, les fichiers étant sur différents "
-"points de montage"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Valeur de retour de get_info non valide"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Valeur de retour de query_info non valide"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Impossible d'obtenir le descripteur de fichier du flux"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "Valeur de retour de « open » non valide"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Le descripteur de fichier de flux n'a pas été obtenu"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Valeur de retour de « call » non valide"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Valeur de retour de get_filesystem_info non valide"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Impossible de trouver le point de montage hôte"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Nom de fichier %s non valide"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Valeur de retour de query_filesystem_info non valide"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "Valeur de retour de monitor_dir non valide"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "Valeur de retour de monitor_file non valide"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Erreur du protocole de flux : %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Fin de flux"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "L'opération a été annulée"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "L'opération « seek » n'est pas prise en charge pour un flux"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "L'opération « query info » n'est pas prise en charge"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "L'opération « query info » n'est pas prise en charge pour un flux"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Erreur lors de l'obtention d'informations sur le point de montage : %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Erreur lors de la connexion au démon : %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Erreur lors de la création du connecteur : %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Erreur lors de la connexion au connecteur : %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Format d'informations de fichier non valide"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Contenu de la liste d'information d'attribut non valide"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Erreur de connexion à D-Bus : %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Service %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Erreur : %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Utilisation : %s --spawner dbus-id chemin_objet"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Utilisation : %s clé=valeur clé=valeur ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Aucun type de montage indiqué"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "un point de montage pour %s est déjà en cours d'utilisation"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "erreur lors du démarrage du démon de montage"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ sur %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Aucun nom d'hôte indiqué"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Spécification de montage non valide"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Le fichier n'existe pas"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Le fichier n'est pas un répertoire"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Graver"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Impossible de créer un répertoire temporaire"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Ce fichier ou ce répertoire n'existe pas"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Répertoire non vide"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "Impossible d'écraser un répertoire avec un fichier"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Créateur de CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Le fichier existe"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "Aucun fichier ou répertoire de ce nom dans le chemin cible"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "Impossible d'écraser un répertoire avec un autre répertoire"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "Le fichier cible existe"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "Impossible de copier récursivement un répertoire"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Non pris en charge"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Impossible de se connecter au bus système"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Impossible de créer un contexte libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Impossible d'initialiser libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Aucun lecteur indiqué"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Impossible de trouver le lecteur %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Le lecteur %s ne contient pas de fichiers audio"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "point de montage cdda sur %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Disque audio"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Le système de fichiers est occupé : %d fichier ouvert"
-msgstr[1] "Le système de fichiers est occupé : %d fichiers ouverts"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Aucun fichier nommé %s sur le lecteur %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Erreur provenant de « paranoia » sur le lecteur %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Erreur de déplacement dans le flux sur le lecteur %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Aucun fichier de ce nom"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Le fichier n'existe pas ou n'est pas une piste audio"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Service de CD Audio"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Poste de travail"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Système de fichiers"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "Impossible d'ouvrir le répertoire"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Impossible d'ouvrir le fichier « montable »"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Erreur interne : %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Impossible de monter le fichier"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Aucun média dans le lecteur"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Ce n'est pas un fichier pouvant être monté"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Impossible de démonter le fichier"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Impossible d'éjecter le fichier"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Erreur HTTP : %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Impossible d'analyser la réponse"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Réponse vide"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Réponse inattendue du serveur"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Réponse non valide"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "Partage WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Saisissez le mot de passe pour %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Saisissez le mot de passe du serveur mandataire"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Ce partage ne prend pas en charge WebDAV"
-
-# Host
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "Partage WebDAV sur %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Impossible de créer la requête"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Le fichier cible existe déjà"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Le fichier a été modifié de manière externe"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "La création du fichier de sauvegarde a échoué"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Impossible de surveiller le fichier ou répertoire."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Réseau"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Les comptes ne sont pris en charge"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "L'hôte a fermé la connexion"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Impossible d'ouvrir une connexion de données. Peut-être que votre pare-feu "
-"empêche cette action ?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Connexion de données fermée"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "L'opération a échoué"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Plus d'espace disponible sur le serveur"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Opération non prise en charge"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Accès refusé"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Type de page inconnu"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Nom de fichier non valide"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Réponse non valide"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "transmission interrompue"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Impossible de se connecter à l'hôte"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Saisissez le mot de passe pour l'accès ftp sur %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "La demande de saisie du mot de passe a été annulée"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp sur %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp en tant que %s sur %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Le fichier est un répertoire"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "les sauvegardes ne sont pas prises en charge pour le moment"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "nom de fichier trop long"
-
-# L'utilisation de target serait peut-être plus homogène (Stéphane)
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Nom de fichier de destination non valide"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s : %d : le répertoire ou le fichier existe"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s : %d : le répertoire ou le fichier n'existe pas"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s : %d : nom de fichier non valide"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s : %d : non pris en charge"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Appareil photo (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Appareil photo %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Lecteur audio %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Appareil photo"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Lecteur audio"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "L'obtention de la liste des dossiers a échoué"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Aucun périphérique indiqué"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Impossible de créer un contexte gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Erreur lors de la création de l'appareil photo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Erreur lors du chargement des informations du périphérique"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Erreur lors de la recherche d'informations du péripéhérique"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Erreur lors de l'obtention des informations du périphérique"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr ""
-"Erreur lors du paramétrage du port de communication de l'appareil photo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Erreur lors de l'initialisation de l'appareil photo"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "Montage de gphoto2 sur %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Aucun appareil photo indiqué"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Erreur de création de l'objet fichier"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Erreur lors de l'obtention du fichier"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Erreur lors de l'obtention des données du fichier"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Erreur de déplacement dans le flux sur l'appareil photo %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Ce n'est pas un répertoire"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "L'obtention de la liste des fichiers a échoué"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Erreur lors de la création du répertoire"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Le nom existe déjà"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Nouveau nom trop long"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Erreur lors du renommage du répertoire"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Erreur lors du renommage du fichier"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Répertoire « %s » non vide"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Erreur lors de la suppression du répertoire"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Erreur lors de la suppression du fichier"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "Impossible d'écrire dans le répertoire"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Impossible d'allouer un nouveau fichier à modifier"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Impossible de lire le fichier à modifier"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Impossible d'obtenir les données du fichier à modifier"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Erreur lors de l'écriture du fichier"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Non pris en charge (ce n'est pas le même répertoire)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr ""
-"Non pris en charge (la source est un répertoire, la destination un "
-"répertoire)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr ""
-"Non pris en charge (la source est un répertoire, la destination un fichier "
-"existant)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr ""
-"Non pris en charge (la source est un fichier, la destination un répertoire)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Erreur du client HTTP : %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (codage non valide)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Les notifications de répertoires ne sont pas prises en charge"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Réseau Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Réseau local"
-
-# suggestions bienvenues, la traduction littérale me semble trop lourde
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Vue générale du réseau"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s sur %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Connexion au périphérique perdue"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Le périphérique requiert la mise à jour d'un logiciel"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "Le programme ssh s'est terminé de manière inattendue"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Nom d'hôte inconnu"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Pas de route vers l'hôte"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Connexion refusée par le serveur"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "La vérification de la clé de l'hôte a échoué"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Impossible de lancer le programme ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Impossible de lancer le programme ssh : %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Délai d'attente expiré lors de la connexion"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Saisissez la phrase de passe pour la clé"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Saisissez le mot de passe"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Impossible d'envoyer le mot de passe"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Se connecter malgré tout"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Annuler la connexion"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"L'identité de l'ordinateur distant (%s) est inconnue.\n"
-"Cela se produit lorsque vous vous connectez à un ordinateur pour la première "
-"fois.\n"
-"\n"
-"L'identité envoyée par l'ordinateur distant est %s. Si vous voulez être "
-"absolument certain qu'il est sûr de continuer, contactez votre "
-"administrateur système."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "La boîte de dialogue de connexion a été annulée."
-
-# envoyer à l'hôte ou identité de l'hôte ? j'ai un doute.
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Impossible d'envoyer la confirmation de l'identité de l'hôte"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Erreur de protocole"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp sur %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Impossible de trouver une commande ssh prise en charge"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Échec"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Réponse non valide reçue"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Erreur de création du fichier de sauvegarde : %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Impossible de créer un fichier temporaire"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Impossible de déplacer un répertoire sur un répertoire de même nom"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Un mot de passe doit être saisi pour accéder au partage %s sur %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Erreur interne (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Impossible de monter le partage Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Type « seek » non pris en charge"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "La création du fichier de sauvegarde a échoué : %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Erreur lors de la suppression du fichier : %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Erreur lors du déplacement du fichier : %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Erreur lors de la suppression du fichier cible : %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Impossible de déplacer un répertoire de façon récursive"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Service de partage Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Partages Windows sur %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Le fichier n'est pas « montable »"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Ce n'est pas un fichier standard"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Service de partage Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Corbeille"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (dans la corbeille)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Impossible de supprimer la corbeille"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr ""
-"Les notifications de répertoire « Corbeille » ne sont pas prises en charge"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Type de moteur non valide"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Erreur lors de l'envoi du fd : %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:150
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Opération non prise en charge par le moteur"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Les liens symboliques ne sont pas pris en charge par le moteur"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Message dbus non valide"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Remplace l'ancien démon."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Ne démarre pas « fuse »."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Démon GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Démon principal pour GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s : %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Essayez « %s --help » pour obtenir plus d'informations."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Paramètres non valides en provenance du fils lancé"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Le montage automatique a échoué : %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "L'emplacement indiqué n'est pas monté"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "L'emplacement indiqué n'est pas pris en charge"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "L'emplacement est déjà monté"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "L'emplacement n'est pas « montable »"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Lecteur %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Lecteur %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Lecteur de disquettes"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Disque RAID logiciel"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Lecteur USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Disque ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Disque SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Disque FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Lecteur de bande"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Lecteur Compact Flash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Lecteur Memory Stick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Lecteur Smart Media"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Lecteur SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Lecteur Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Lecteur Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Clé USB"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Lecteur de stockage de masse"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"L'éjection du média a échoué ; un ou plusieurs volumes sont en cours "
-"d'utilisation sur le média."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f Kio"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f Mio"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f Gio"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Disque mixte audio/données"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "Média %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "Données chiffrées %s"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Disque CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Disque CD-ROM vierge"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Disque CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Disque CD-R vierge"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Disque CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Disque CD-RW vierge"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Disque DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Disque DVD-ROM vierge"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Disque DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Disque DVD-RAM vierge"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Disque DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Disque DVD-RW vierge"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Disque DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Disque DVD+R vierge"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Disque DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Disque DVD+RW vierge"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Disque DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Disque DVD+R DL vierge"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Disque Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Disque Blu-Ray vierge"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Disque Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Disque Blu-Ray R vierge"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Disque Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Disque Blu-Ray RW vierge"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Disque HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Disque HD DVD vierge"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Disque HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Disque HD DVD-R vierge"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Disque HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Disque HD DVD-RW vierge"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Disque MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Disque MO vierge"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Disque"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Disque vierge"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s : %s : erreur d'ouverture du fichier : %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s : %s, erreur d'écriture sur stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s : %s : erreur de lecture : %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s : %s : erreur de fermeture : %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "EMPLACEMENT... - concatène les EMPLACEMENTS vers la sortie standard."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Concatène les fichiers spécifiés par les emplacements et les affiche sur la "
-"sortie standard. Le principe est identique à l'utilitaire traditionnel "
-"« cat », excepté l'utilisation d'emplacements gvfs au lieu de fichiers "
-"locaux. Par exemple, il est possible d'indiquer quelque chose comme smb://"
-"serveur/ressource/fichier.txt comme emplacement à concaténer."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Note : il suffit de rediriger sur « cat » si vous avez besoin d'options de "
-"formatage telles que -n, -T ou d'autres."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s : emplacements manquants"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s : %s : erreur d'ouverture d'un emplacement : %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s : %s : erreur de lancement d'une application : %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FICHIERS... - ouvre les FICHIERS avec l'application répertoriée."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Ouvre chaque fichier avec l'application enregistrée pour gérer par défaut le "
-"type de fichier."
-
-#~ msgid "File unavailable"
-#~ msgstr "Fichier non disponible"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "Média %.1f Kio"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "Média %.1f Mio"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "Média %.1f Gio"
-
-#~ msgid "Error listing folders to figure out ignore prefix"
-#~ msgstr ""
-#~ "Erreur lors du listage des dossiers pour déterminer le préfixe à ignorer"
-
-#~ msgid "Error creating port info list"
-#~ msgstr "Erreur lors de la création de la liste d'informations du port"
-
-#~ msgid "Error getting port info from port info list"
-#~ msgstr ""
-#~ "Erreur lors de l'obtention d'informations du port à partir de la liste "
-#~ "d'informations du port"
-
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "Le système de fichiers est occupé : %d fichiers ouverts"
-
-#~ msgid "Error listing folders"
-#~ msgstr "Erreur lors du listage des dossiers"
-
-#~ msgid "Error listing files in folder"
-#~ msgstr "Erreur lors du listage des fichiers dans le dossier"
diff --git a/po/ga.po b/po/ga.po
deleted file mode 100644
index 98b3b3d0..00000000
--- a/po/ga.po
+++ /dev/null
@@ -1,1524 +0,0 @@
-# Irish translations for gvfs package.
-# Copyright (C) 2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gvfs package.
-# Seán de Búrca <leftmostcat@gmail.com>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs HEAD\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-28 20:52-0400\n"
-"PO-Revision-Date: 2008-08-28 20:52-0500\n"
-"Last-Translator: Seán de Búrca <leftmostcat@gmail.com>\n"
-"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=5; plural=n==1 ? 0 : (n%10==1 || n%10==2) ? 1 : (n%"
-"10>=3 && n%10<= 6) ? 2 : ((n%10>=7 && n%10<=9) || n==10) ? 3 : 4;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr ""
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr ""
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr ""
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr ""
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr ""
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr ""
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr ""
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr ""
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr ""
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr ""
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr ""
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr ""
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr ""
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Earráid: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr ""
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr ""
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr ""
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr ""
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr ""
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ ar %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr ""
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr ""
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr ""
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Dóigh"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr ""
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Cruthaitheoir CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr ""
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Diosca Fuaime"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr ""
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Ríomhaire"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Córas Comhad"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Earráid HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV ar %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr ""
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr ""
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Líonra"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr ""
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp ar %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp mar %s ar %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Ainm comhaid neamhbhailí"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr ""
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Ceamara Digiteach (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Ceamara %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Seinnteoir Fuaime %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Ceamara"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Seinnteoir Fuaime"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Earráid agus ceamara á chruthú"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr ""
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr ""
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (ionchódú neamhbhailí)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr ""
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Líonra Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Líonra Logánta"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr ""
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s ar %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr ""
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Logáil Isteach Mar Sin Féin"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Cealaigh Logáil Isteach"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr ""
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp ar %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr ""
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr ""
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Earráid agus comhad á scriosadh: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Earráid agus comhad á bhogadh: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr ""
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr ""
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Bruscar"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (sa bhruscar)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr ""
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr ""
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr ""
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Earráid agus fd á sheoladh: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:150
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr ""
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr ""
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr ""
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr ""
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr ""
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Deamhan GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr ""
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr ""
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr ""
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr ""
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr ""
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr ""
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr ""
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Tiomántán %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Tiomántán %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Tiomántán Flapach"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Tiomántán RAID Bogearraí"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Tiomántán USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Tiomántán ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Tiomántán SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Tiomántán FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Tiomántán Téipe"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Tiomántán CompactFlash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Tiomántán MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Tiomántán SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Tiomántán SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Tiomántán Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Tiomántán Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Méaróg Chuimhne"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Tiomántán Ollstórála"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Diosca Fuaime/Sonraí Measctha"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "%s Meáin"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s Sonraí Criptithe"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Diosca CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Diosca CD-ROM Bán"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Diosca CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Diosca CD-R Bán"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Diosca CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Diosca CD-RW Bán"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Diosca DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Diosca DVD-ROM Bán"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Diosca DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Diosca DVD-RAM Bán"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Diosca DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Diosca DVD-RW Bán"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Diosca DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Diosca DVD+R Bán"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Diosca DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Diosca DVD+RW Bán"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Diosca DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Diosca DVD+R DL Bán"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Diosca Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Diosca Blu-Ray Bán"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Diosca Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Diosca Blu-Ray R Bán"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Diosca Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Diosca Blu-Ray RW Bán"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Diosca HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Diosca HD DVD Bán"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Diosca HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Diosca HD DVD-R Bán"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Diosca HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Diosca HD DVD-RW Bán"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Diosca MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Diosca MO Bán"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Diosca"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Diosca Bán"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: earráid agus comhad á oscailt: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, earráid agus stdout á scríobh"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: earráid agus á léamh: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: earráid agus á dhúnadh: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr ""
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
diff --git a/po/gl.po b/po/gl.po
deleted file mode 100644
index f289420b..00000000
--- a/po/gl.po
+++ /dev/null
@@ -1,1596 +0,0 @@
-# translation of gl.po to Galego
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Ignacio Casal Quinteiro <icq@svn.gnome.org>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gl\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-21 17:47+0200\n"
-"PO-Revision-Date: 2008-08-21 17:48+0200\n"
-"Last-Translator: Ignacio Casal Quinteiro <icq@svn.gnome.org>\n"
-"Language-Team: Galego <proxecto@trasno.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-"A operación non está soportada, os ficheiros están en diferentes puntos de "
-"montaxe"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info devolveu un valor non válido"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info devolveu un valor non válido"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Non se puido obter o descritor do ficheiro de fluxo"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "open devolveu un valor non válido"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Non se puido obter un descritor do ficheiro de fluxo"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "call devolveu un valor non válido"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info devolveu un valor non válido"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Non se puido encontrar o punto de montaxe anexado"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Nome de ficheiro non válido %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info devolveu un valor non válido"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir devolveu un valor non válido"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file devolveu un valor non válido"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Erro no protocolo de fluxo: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Final do fluxo"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "A operación foi cancelada"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Non se permite buscar no fluxo"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "A operación de consulta de información non está soportada"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Non se soporta consulta de información en fluxo"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Erro ao obter a información de montaxe: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Erro ao conectar co daemon: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Erro creando o socket: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Erro ao conectar co socket: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Formato de información do ficheiro non válido"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "O contido da lista de información do atributo non é válido"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Erro ao conectar a D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Servizo de sistema de ficheiros %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Erro: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Uso: %s --spawner dbus-id ruta_ao_obxecto"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Uso: %s clave=valor clave=valor ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Non se especificou o tipo de montaxe"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "o punto de montaxe para %s xa se está usando"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "erro ao iniciar o daemon de montaxe"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ en %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Non se especificou un nome de servidor"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Especificación de montaxe non válida"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "O ficheiro non existe"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "O ficheiro non é un directorio"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Gravar"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Imposible crear o directorio temporal"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendgphoto2.c:2690
-#, c-format
-msgid "No such file or directory"
-msgstr "O ficheiro ou directorio non existe"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "O directorio non está baleiro"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "Non se pode copiar un ficheiro sobre un directorio"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Creador de CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2763
-msgid "File exists"
-msgstr "O ficheiro xa existe"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "O ficheiro ou directorio non existe na ruta de destino"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "Non se pode copiar un directorio sobre outro directorio"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "O ficheiro obxectivo existe"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "Non se pode copiar recursivamente o directorio"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2348
-#: ../daemon/gvfsbackendgphoto2.c:2556 ../daemon/gvfsbackendgphoto2.c:2651
-#: ../daemon/gvfsbackendgphoto2.c:2742
-msgid "Not supported"
-msgstr "Non soportado"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "Non se pode conectar ao bus do sistema"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "Non se pode crear o contexto libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "Non se pode inicializar libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Non se especificou unha unidade"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Non se pode encontrar a unidade %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "A unidade %s non contén ficheiros de son"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda montado en %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Disco de son"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "O sistema de ficheiros está ocupado: %d ficheiro aberto"
-msgstr[1] "O sistema de ficheiros está ocupado: %d ficheiros abertos"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "O ficheiro %s non existe na unidade %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Erro de 'paranoia' na unidade %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Erro ao buscar no fluxo na unidade %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1711
-#, c-format
-msgid "No such file"
-msgstr "Non existe o ficheiro"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "O ficheiro non existe ou non é unha pista de son"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Servizo de sistema de ficheiros de CD de son"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Computador"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Sistema de ficheiros"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1703
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "Non se pode abrir o directorio"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Non se pode abrir o ficheiro montable"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Erro interno: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Non se pode montar o ficheiro"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Non hai ningún medio na unidade"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Non é un ficheiro montable"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Non se pode desmontar o ficheiro"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Non se pode expulsar o ficheiro"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Erro de HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Non se puido analizar a resposta"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Resposta baleira"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Resposta inesperada do servidor"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "Resposta inválida"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "Compartición WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "Introduza contrasinal para %s"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "Introduza o contrasinal do proxy"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr "Non é unha compartición activada WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV en %s"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "Non se puido crear a resposta"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "O ficheiro obxectivo xa existe"
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "O ficheiro foi modificado externamente"
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Fallou a creación do ficheiro de seguranza"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Non se pode monitorizar ficheiros ou directorios."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Rede"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "As contas non están soportadas"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "O servidor pechou a conexión"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Non se pode abrir a conexión de datos. Pode ser que esté a través dun "
-"firewall?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Conexión de datos pechada"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Fallou a operación"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Sen espazo no servidor"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Operación non soportada"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Permiso denegado"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Tipo de páxina descoñecida"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Nome de ficheiro inválido"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Resposta inválida"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "transmisión rota"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Non se puido conectar ao servidor"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Introduza o contrasinal para ftp en %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Cancelouse o diálogo do contrasinal"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp en %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp como %s en %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "O ficheiro é un directorio"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "as copias de seguranza non están soportadas todavía"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "o nome de ficheiro é demasiado longo"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Nome de ficheiro de destino inválido"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: O directorio ou ficheiro existe"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: O ficheiro ou directorio non existe"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Nome de ficheiro inválido"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Non soportado"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Cámara dixital (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Cámara %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Reprodutor de son %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Cámara"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Reprodutor de son"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2008
-msgid "Failed to get folder list"
-msgstr "Fallou ao obter a lista de cartafoles"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "Non se especificou ningún dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "Non se pode crear o contexto gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "Erro creando a cámara"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482 ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading device information"
-msgstr "Erro ao cargar a información do dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up device information"
-msgstr "Erro ao buscar a información do dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting device information"
-msgstr "Erro ao obter a información do dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting up camera communications port"
-msgstr "Erro ao configurar o porto de comunicacións da cámara"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "Erro ao inicializar a cámara"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 montado en %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "Non se especificou ningunha cámara"
-
-#: ../daemon/gvfsbackendgphoto2.c:1719
-msgid "Error creating file object"
-msgstr "Erro ao crear o ficheiro obxecto"
-
-#: ../daemon/gvfsbackendgphoto2.c:1733
-msgid "Error getting file"
-msgstr "Erro ao obter o ficheiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:1742
-msgid "Error getting data from file"
-msgstr "Erro ao obter datos do ficheiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:1836 ../daemon/gvfsbackendgphoto2.c:3010
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Erro ao buscar no fluxo na cámara %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1975 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Non é un directorio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2071
-msgid "Failed to get file list"
-msgstr "Fallou ao obter a lista de ficheiros"
-
-#: ../daemon/gvfsbackendgphoto2.c:2360
-msgid "Error creating directory"
-msgstr "Erro ao crear o directorio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2568
-msgid "Name already exists"
-msgstr "O nome xa existe"
-
-#: ../daemon/gvfsbackendgphoto2.c:2579 ../daemon/gvfsbackendgphoto2.c:3200
-msgid "New name too long"
-msgstr "O nome é demasiado longo"
-
-#: ../daemon/gvfsbackendgphoto2.c:2589 ../daemon/gvfsbackendgphoto2.c:3211
-msgid "Error renaming dir"
-msgstr "Erro ao renomear o directorio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2601 ../daemon/gvfsbackendgphoto2.c:3223
-msgid "Error renaming file"
-msgstr "Erro ao renomear o ficheiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:2664
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "O directorio '%s' non está baleiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:2675
-msgid "Error deleting directory"
-msgstr "Erro ao eliminar o directorio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2700
-msgid "Error deleting file"
-msgstr "Erro ao eliminar o ficheiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:2752
-msgid "Can't write to directory"
-msgstr "Non se pode escribir no directorio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2799
-msgid "Cannot allocate new file to append to"
-msgstr "Non se pode asignar o novo ficheiro no que engadir"
-
-#: ../daemon/gvfsbackendgphoto2.c:2813
-msgid "Cannot read file to append to"
-msgstr "Non se pode ler o ficheiro no que engadir"
-
-#: ../daemon/gvfsbackendgphoto2.c:2823
-msgid "Cannot get data of file to append to"
-msgstr "Non se poden obter os datos do ficheiro no que engadir"
-
-#: ../daemon/gvfsbackendgphoto2.c:3109
-msgid "Error writing file"
-msgstr "Erro ao escribir o ficheiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:3156
-msgid "Not supported (not same directory)"
-msgstr "Non soportado (non é o mesmo directorio)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3168
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Non soportado (src é un directorio, dst é un directorio)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3176
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Non soportado (src é un directorio, dst é un ficheiro existente)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3188
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Non soportado (src é un ficheiro, dst é un directorio)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Erro HTTP do cliente: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (codificación inválida)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Non se soporta a notificación de directorios"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Rede de Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Rede local"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Monitor de localización de rede"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s en %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Perdeuse a conexión co dispositivo"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "O dispositivo require unha actualización de software"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "O programa de ssh rematou inesperadamente"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Nome de servidor descoñecido"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Non hai ruta ao servidor"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Conexión rexeitada polo servidor"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Fallou a verificación da chave do servidor"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Non se pode lanzar o programa ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Non se pode lanzar o programa ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Expirou o tempo para iniciar a sesión"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Introduza unha frase de paso para a chave"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Introduza contrasinal"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Non se pode enviar o contrasinal"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Iniciar de todas maneiras"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Cancelar inicio"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"A identidade do computador remoto (%s) é descoñecida.\n"
-"Isto pasa cando inicia sesión nun computador a primeira vez.\n"
-"\n"
-"A identidade enviada polo computador remoto é %s. Se quere estar "
-"completamente seguro de que é seguro continuar, contacto co administrador do "
-"sistema."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Diálogo de inicio cancelado"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Non se pode enviar a confirmación de identidade de host"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Erro de protocolo"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp en %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Non se pode encontrar o comando ssh soportado"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Fallo"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Recibiuse unha resposta inválida"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Erro ao crear o ficheiro de seguranza: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Non se pode crear o ficheiro temporal"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Non se pode mover un directorio sobre un directorio"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Necesítase contrasinal para a compartición %s en %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Erro interno (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Fallou ao montar a compartición Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Tipo de busca non soportada"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Fallou a creación do ficheiro de seguranza: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Erro ao borrar o ficheiro: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Erro ao mover o ficheiro: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Erro ao eliminar o ficheiro obxectivo: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Non se pode mover recursivamente un directorio"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Servizo do sistema de ficheiros compartidos de Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Comparticións Windows en %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "O ficheiro non se pode montar"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Non é un ficheiro regular"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Servizo de sistema de ficheiros de rede de Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Lixo"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (no colector de lixo)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Non se pode borrar o lixo"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Non se soporta a notificación do lixo"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Tipo de backend inválido"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Erro ao enviar o descritor de ficheiro: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "O backend non soporta a operación"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "O backend non soporta ligazóns simbólicas"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Mensaxe de dbus inválida"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Substitúe o daemon antigo."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Non iniciar fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Daemon GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Daemon principal para GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Tente \"%s --help\" para máis información."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Argumentos non válidos para o fillo lanzado"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Fallou automount: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "A localización especificada non está montada"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "A localización especificada non está soportada"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "A localización xa está montada"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "A localización non é montable"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Unidade %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Unidade %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Disquetera"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Unidade RAID por software"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Unidade USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Unidade ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Unidade SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Unidade FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Unidade de cinta"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Unidade CompactFlash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Unidade MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Unidade SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Unidade SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Unidade Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Unidade Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Unidade Thumb"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Unidade de almacenamento masivo"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Fallou ao expulsar o medio, un ou máis volumes está ocupados no medio."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Disco de son e datos"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "Medio %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "Datos cifrados %s"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Disco CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Disco CD-ROM en branco"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Disco CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Disco CD-R en branco"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Disco CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Disco CD-RW en branco"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Disco DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Disco DVD-ROM en branco"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Disco DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Disco DVD-RAM en branco"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Disco DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Disco DVD-RW en branco"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Disco DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Disco DVD+R en branco"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Disco DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Disco DVD+RW en branco"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Disco DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Disco DVD+R DL en branco"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Disco Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Disco Blu-Ray en branco"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Disco Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Disco Blu-Ray R en branco"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Disco Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Disco Blu-Ray RW en branco"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Disco HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Disco HD DVD en branco"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Disco HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Disco HD DVD-R en branco"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Disco HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Disco HD DVD-RW en branco"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Disco MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Disco MO en branco"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Disco"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Disco en branco"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: erro ao abrir o ficheiro: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, erro ao escribir en stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: erro ao ler: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: erro ao pechar: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCALIZACIÓN... - concatenar as LOCALIZACIÓNS cunha saída estándar."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Concatenar ficheiro e localizacións e imprimilos na saída estándar. Funciona "
-"igual que a utilidade tradicional 'cat', pero usando a localización gvfs no "
-"lugar dos ficheiros locais: por exemplo, pode usar algo como smb://server/"
-"resource/file.txt coma unha localización para concatenar."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Nota: use unha tubería a través de cat se necesita as opcións de formato "
-"tales coma -n, -T ou outras."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: faltan localizacións"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: erro ao abrir a localización: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: erro ao lanzar a aplicación: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FICHEIROS... - abrir FICHEIROS cunha aplicación rexistrada."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Abre o ficheiro(s) cunha aplicación rexistrada predeterminada para manexar o "
-"tipo do ficheiro."
-
-#~ msgid "Error listing folders to figure out ignore prefix"
-#~ msgstr "Erro ao listar os cartafoles para averiguar o prefixo de ignorado"
-
-#~ msgid "Error creating port info list"
-#~ msgstr "Erro ao crear a listaxe de información do porto"
-
-#~ msgid "Error getting port info from port info list"
-#~ msgstr ""
-#~ "Erro ao obter a información do porto da listaxe de información do porto"
-
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "O sistema de ficheiros está ocupado: %d ficheiros abertos"
-
-#~ msgid "Error listing folders"
-#~ msgstr "Erro ao listar os cartafoles"
-
-#~ msgid "Error listing files in folder"
-#~ msgstr "Erro ao listar os ficheiros no cartafol"
-
-#~ msgid "File unavailable"
-#~ msgstr "Ficheiro non dispoñible"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "Medio %.1f kB"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "Medio %.1f MB"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "Medio %.1f GB"
-
-#~ msgid "Invalid reply from server."
-#~ msgstr "Resposta inválida do servidor."
-
-#~ msgid "Operation cancelled"
-#~ msgstr "Operación cancelada"
-
-#~ msgid "Invalid username"
-#~ msgstr "Nome de usuario inválido"
-
-#~ msgid "Invalid password"
-#~ msgstr "Contrasinal inválido"
-
-#~ msgid "FTP on %s"
-#~ msgstr "FTP en %s"
-
-#~ msgid "FTP on %s:%u"
-#~ msgstr "FTP en %s:%u"
-
-#~ msgid "The file does not exist"
-#~ msgstr "O ficheiro non existe"
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "Disco de son en %s"
diff --git a/po/gu.po b/po/gu.po
deleted file mode 100644
index 2bf8b45c..00000000
--- a/po/gu.po
+++ /dev/null
@@ -1,1524 +0,0 @@
-# translation of gvfs.gnome-2-24.gu.po to Gujarati
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Sweta Kothari <swkothar@redhat.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs.gnome-2-24.gu\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-05 07:54+0000\n"
-"PO-Revision-Date: 2008-09-05 15:24+0530\n"
-"Last-Translator: Sweta Kothari <swkothar@redhat.com>\n"
-"Language-Team: Gujarati\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "ક્રિયા એ આધારભૂત નથી. વિવિધ માઉન્ટો પર ફાઇલો"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info માંથી અયોગ્ય પાછી મળેલી કિંમત"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info માંથી અયોગ્ય પાછી મળેલી કિંમત"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "સ્ટ્રીમ ફાઇલ વર્ણનકર્તા મેળવી શકાતી નથી"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "ખોલવામાંથી અયોગ્ય પાછી મળેલી કિંમત"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "સ્ટ્રીમ ફાઇલ વર્ણનકર્તા મળી નહિં"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "કોલ માંથી અયોગ્ય પાછી મળેલી કિંમત"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info માંથી અયોગ્ય પાછી મળેલી કિંમત"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "બંધ કરવામાં આવી રહ્યુ માઉન્ટ શોધી શકાયુ નહિં"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "અયોગ્ય ફાઇલનામ %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info માંથી અયોગ્ય પાછી મળેલી કિંમત"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir માંથી અયોગ્ય પાછી મળેલી કિંમત"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file માંથી અયોગ્ય પાછી મળેલી કિંમત"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "સ્ટ્રીમ પ્રોટોકોલમાં ભૂલ: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "સ્ટ્રીમનો અંત"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "ક્રિયા કાઢી નંખાયેલ હતી"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "સ્ટ્રીમ પર સીક આધારભૂત નથી"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "ક્વેરી જાણકારી ક્રિયા આધારભૂત નથી"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "સ્ટ્રીમ પર ક્વેરી જાણકારી આધારભૂત નથી"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "જ્યારે માઉન્ટ જાણકારી મેળવી રહ્યા હોય ત્યારે ભૂલ: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "ડેઇમોન સાથે જોડાઇ રહ્યા હોય ત્યારે ભૂલ: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "સોકેટને બનાવી રહ્યા હોય ત્યારે ભૂલ: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "સોકેટમાં જોડાઇ રહ્યા હોય ત્યારે ભૂલ: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "અયોગ્ય ફાઇલ જાણકારી બંધારણ"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "અયોગ્ય લક્ષણ જાણકારી યાદી સમાવિષ્ટ"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "D-Bus માં ભૂલ જોડાઇ રહી છે: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s ફાઇલસિસ્ટમ સેવા"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "ભૂલ: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "વપરાશ: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "વપરાશ: %s કી=કિંમત કી=કિંમત ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "માઉનટ પ્રકાર સ્પષ્ટ થયેલ નથી"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s પહેલેથી જ ચાલી રહ્યુ છે તે માટે માઉન્ટપોઇંટ"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "ભૂલ માઉન્ટ ડેઇમોનમાં શરૂ થઇ રહી છે"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ on %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "યજમાનનામ સ્પષ્ટ થયેલ નથી"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "અયોગ્ય માઉન્ટ સ્પષ્ટ થયેલ છે"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "ફાઇવ અસ્તિત્વ ધરાવતી નથી"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "ફાઇલ એ ડિરેક્ટરી નથી"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "બર્ન"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "કામચલાઉ ડિરેક્ટરી બનાવવા માટે અસમર્થ"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "આવી ફાઇલ અથવા ડિરેક્ટરી નથી"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "ડિરેક્ટરી ખાલી નથી"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "ડિરેક્ટરી ઉપર ફાઇલને નકલ કરી શકાતી નથી"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD બનાવનાર"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "ફાઇલ અસ્તિત્વ ધરાવે છે"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "બેકએન્ડ દ્દારા ક્રિયા આધારભૂત નથી"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "લક્ષ્ય માર્ગમાં આવી ફાઇલ અથવા ડિરેક્ટરી નથી"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "ડિરેક્ટરી ઉપર ડિરેક્ટરીની નકલ કરી શકાતી નથી"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "લક્ષ્ય ફાઇલ અસ્તિત્વ ધરાવે છે"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "ડિરેક્ટરી નકલને પુનરાવર્તિત કરી શકાતી નથી"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "આધારભૂત નથી"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "સિસ્ટમ બસથી જોડાણ થઇ શકતુ નથી"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "લિબહાલ સંદર્ભને બનાવી શકાતો નથી"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "લિબહાલની શરૂઆત કરી શકાતી નથી"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "ડ્રાઇવ સ્પષ્ટ થયેલ નથી"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "ડ્રાઇવ %s શોધી શકાતી નથી"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "ડ્રાઇવ %s ઓડિયો ફાઇલોને સમાવતુ નથી"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "%s પર cdda માઉન્ટ"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "ઓડિયો ડિસ્ક"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "ફાઇલ સિસ્ટમ વ્યસ્ત છે: %d ખુલ્લી ફાઇલ"
-msgstr[1] "ફાઇલ સિસ્ટમ વ્યસ્ત છે: %d ખુલ્લી ફાઇલો"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "ડ્રાઇવ %s પર આવી ફાઇલ %s નથી"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "ડ્રાઇવ %s પર 'paranoia' માંથી ભૂલ"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "ડ્રાઇવ પર સ્ટ્રીમમાં શોધી રહ્યા હોય ત્યારે ભૂલ %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "આવી ફાઇલ નથી"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "ફાઇલ અસ્તિત્વ ધરાવતી નથી અથવા ઓડિયો ટ્રેક નથી"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "ઓડિયો CD ફાઇલસિસ્ટમ સેવા"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "કમ્પ્યુટર"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "ફાઇલસિસ્ટમ"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "ડિરેક્ટરીને ખોલી શકાતી નથી"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "માઉન્ટેબલ ફાઇલ ખોલી શકાતી નથી"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "આંતરિક ભૂલ: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "ફાઇલ માઉન્ટ કરી શકાતી નથી"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "ડ્રાઇવમાં મીડિયા નથી"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "માઉન્ટેબલ ફાઇલ નથી"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "ફાઇલને અનમાઉન્ટ કરી શકાતી નથી"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "ફાઇલને કાઢી શકાતી નથી"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP ભૂલ: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "જવાબને પૃથક્કરણ કરી શકાતુ નથી"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "ખાલી જવાબ"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "સર્વર માંથી અનેપક્ષિત જવાબ"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "જવાબ અયોગ્ય"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV હિસ્સો"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "%s માટે પાસવર્ડ નો પ્રવેશ કરો"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "મહેરબાની કરીને પ્રોક્સી પાસવર્ડનો પ્રવેશ કરો"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "WebDAV સક્રિય થયેલ ભાગ નથી"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "%s પર WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "માગણી બનાવી શકાતી નથી"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "લક્ષ્ય ફાઇલ પહેલીથી જ હાજર છે"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "ફાઇલ બહારથી જ બદલાયેલ હતી"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "બેકઅપ ફાઇલને બનાવવામાં નિષ્ફળતા"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "ફાઇલ અથવા ડિરેક્ટરીને મોનિટર કરી શકાતી નથી"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "નેટવર્ક"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "ખાતાઓ આધારભૂત નથી"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "યજમાન બંધ કરાયેલ જોડાણ"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "માહિતી જોડાણ ખોલી શકાતુ નથી. કદાચ તમારુ ફાયરવોલ આને અટકાવે છે?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "માહિતી જોડાણ બંધ થયેલ છે"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "ક્રિયા નિષ્ફળ થયેલ છે"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "સર્વર પર જગ્યા બાકી નથી"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "ક્રિયા આધારભૂત નથી"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "પરવાનગી ઇન્કાર કરેલ છે"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "પાનું પ્રકાર અજાણ્યો"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "અયોગ્ય ફાઇલનામ"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "અયોગ્ય જવાબ"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "ખંડિત થયેલ પ્રસારણ"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "યજમાનને જોડાણ કરી શકાતુ નથી"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "%s પર ftp માટે પાસવર્ડ દાખલ કરો"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "પાસવર્ડ સંવાદ રદ કરાયેલ છે"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "%s પર ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "%s પર %s તરીકે ftp"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "ફાઇલ એ ડિરેક્ટરી છેા"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "હજુ બેકઅપ આધારભૂત નથી"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "ફાઇલનામ ઘણુ લાંબુ છે"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "અયોગ્ય લક્ષ્ય ફાઇલનામ"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: ડિરેક્ટરી અથવા ફાઇલ અસ્તિત્વ ધરાવે છે"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: આવી ફાઇલ અથવા ડિરેક્ટરી નથી"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: અયોગ્ય ફાઇલનામ"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: આધારભૂત નથી"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "ડિજિટલ કેમેરા (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s કેમેરા"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s ઓડિયો પ્લેયર"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "કેમેરા"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "ઓડિયો પ્લેયર"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "ફોલ્ડર યાદી મેળવવામાં નિષ્ફળતા"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "ઉપકરણ સ્પષ્ટ થયેલ નથી"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "gphoto2 સંદર્ભ બનાવી શકાતો નથી"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "કેમેરા બનાવી રહ્યા હોય ત્યારે ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "ઉપકરણ જાણકારી લોડ કરી રહ્યા હોય ત્યારે ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "ઉપકરણ જાણકારી ને જોઇ રહ્યા હોય ત્યારે ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "ઉપકરણની જાણકારી મેળવી રહ્યા હોય ત્યારે ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "કેમેરા વાતચીત પોર્ટને સુયોજિત કરી રહ્યા હોય ત્યારે ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "કેમેરાને શરૂ કરી રહ્યા હોય ત્યારે ભૂલ"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "%s પર gphoto2 માઉન્ટ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "કેમેરા સ્પષ્ટ થયેલ નથી"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "ફાઇલ ઘટકને બનાવી રહ્યા હોય ત્યારે ભૂલે"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "ફાઇલ મેળવી રહ્યા હોય ત્યારે ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "ફાઇલમાંથી માહિતી મેળવી રહ્યા હોય ત્યારે ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "કેમેરા %s પર સ્ટ્રીમમાં શોધી રહ્યા હોય ત્યારે ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "ડિરેક્ટરી નથી"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "ફાઇલની યાદીને લાવવામાં નિષ્ફળતા"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "ડિરેક્ટરી બનાવવામાં ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "નામ પહેલેથી જ અસ્તિત્વ ધરાવે છે"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "નવુ નામ ઘણુ લાંબુ છે"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "ડિરેક્ટરીને ફરીથી નામ આપવામાં ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "ફાઇલને ફરીથી નામ આપવામાં ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "ડિરેક્ટરી '%s' ખાલી નથી"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "ડિરેક્ટરી દૂર કરવામાં ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "ફાઇલ દૂર કરવામાં ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "ડિરેક્ટરીને લખી શકાતી નથી"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "જોડાવા માટે નવી ફાઇલને ફાળવી શકાતી નથી"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "જોડાવા માટે ફાઇલને વાંચી શકાતી નથી"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "જોડાવા માટે ફાઇલની માહિતી મેળવી શકાતી નથી"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "ફાઇલ લખવામાં ભૂલ"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "આધારભૂત નથી (ડિરેક્ટરી એજ નથી)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "આધારભૂત નથી (src એ ડિરેક્ટરી છે, dst એ ડિરેક્ટરી છે)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "આધારભૂત નથી (src ડિરેક્ટરી છે, dst એ અસ્તિત્વ ધરાવતી ફાઇલ છે)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "આધારભૂત નથી (src ફાઇલ છે, dst ડિરેક્ટરી છે)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP ક્લાઇન્ટ ભૂલ: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (અયોગ્ય એનકોડીંગ)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "ડિરેક્ટરી સૂચન આધારભૂત નથી"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "વિન્ડો નેટવર્ક"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "સ્થાનીય નેટવર્ક"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "નેટવર્ક જગ્યા મોનિટર"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s પર %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "નષ્ટ થયેલ ઉપકરણ માટે જોડાણ"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "ઉપકરણને સોફ્ટવેર સુધારા ની જરૂર છે"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh પ્રક્રિયા અનેપક્ષિત બહાર નીકળેલ છે"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "યજમાનનામ જાણીતુ નથી"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "યજમાનને રુટ નથી"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "સર્વર દ્દારા જોડાણ સંમત થયેલ નથી"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "યજમાન કી ચકાસવામાં નિષ્ફળતા"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "ssh પ્રક્રિયા ને મોટી સંખ્યામાં કરવામાં અસમર્થ"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ssh પ્રક્રિયા ને મોટી સંખ્યામાં કરવામાં અસમર્થ: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "જ્યારે પ્રવેશ કરી રહ્યા હોય ત્યારે સમય સમાપ્ત થયેલ છે"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "કી માટે પાસફ્રેઝ દાખલ કરો"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "પાસવર્ડને દાખલ કરો"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "પાસવર્ડ મોકલી શકાતો નથી"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "ગમે તે રીતે પ્રવેશો"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "પ્રવેશને રદ કરો"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "લોગીન સંવાદ કાઢી નંખાયેલ છે"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "યજમાન વ્યક્તિત્વ ખાતરી મોકલવામાં અસમર્થ "
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "પ્રોટોકોલ ભૂલ"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "%s પર sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "આધારિત ssh આદેશને શોધવામાં અસમર્થ"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "નિષ્ફળતા"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "અયોગ્ય જવાબ મળેલ છે"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "બેકઅપ ફાઇલ બનાવવામાં ભૂલ: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "કામચલાઉ ફાઇલ બનાવવામાં અસમર્થ"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "ડિરેક્ટરી ઉપર ડિરેક્ટરીને ખસેડી શકાતી નથી"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "%s પર %s વહેંચવા માટે પાસવર્ડની જરૂરિયાત છે"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "આંતરિક ભૂલ (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "વિન્ડો માઉન્ટ કરવામાં નિષ્ફળતા"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "સીક પ્રકાર આધારભૂત નથી"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "બેકઅપ ફાઇલ બનાવવામાં નિષ્ફળતા: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "ફાઇલને દૂર કરવામાં ભૂલ: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "ફાઇલને ખસેડવામાં ભૂલ: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "લક્ષ્ય ફાઇલને દૂર કરવામાં ભૂલ: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "ડિરેક્ટરી ખસેડવાનું પુનરાવર્તિત કરી શકાતુ નથી"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "વિન્ડો હિસ્સાઓ ફાઇલસિસ્ટમ સેવા"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "%s પર વિન્ડો હિસ્સાઓ"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "ફાઇલ માઉન્ટેબલ નથી"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "નિયમિત ફાઇલ નથી"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "વિન્ડો નેટવર્ક ફાઇલસિસ્ટમ સેવા"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "કચરાપેટી"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (કચરાપેટી માં)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "કચરાપેટીને દૂર કરી શકાતી નથી"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "કચરાપેટી ડિરેક્ટરી સૂચન આધારભૂત નથી"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "અયોગ્ય બેકએન્ડ પ્રકાર"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "ભૂલ fd ને મોકલી રહ્યા છે: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "બેકએન્ડ દ્દારા Symlinks આધારભૂત નથી"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "અયોગ્ય dbus સંદેશ"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "જૂના ડેઇમોનને બદલો"
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "ફ્યુજ ને શરૂ કરો નહિં"
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS ડેઇમોન"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GVFS માટે મુખ્ય ડેઇમોન"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "વધારે જાણકારી માટે \"%s --મદદ\" નો પ્રયત્ન કરો"
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "સ્પોન થયેલ છોકરા માંથી અયોગ્ય દલીલો"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "આપોઆપ માઉન્ટમાં નિષ્ફળતા: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "સ્પષ્ટ થયેલ જગ્યા માઉન્ટ થયેલ નથી"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "સ્પષ્ટ થયેલ જગ્યા આધારભૂત નથી"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "જગ્યા પહેલેથી જ માઉન્ટ થયેલ છે"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "જગ્યા માઉન્ટેબલ નથી"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s ડ્રાઇવ"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "ફ્લોપી ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "સોફ્ટવેર RAID ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "ટેપ ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Thumb ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "માસ સંગ્રહ ડ્રાઇવ"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "મીડિયાને કાઢી નાખવામાં નિષ્ફળતા, મીડિયા પર એક અથવા વધારે વોલ્યુમો વ્યસ્ત છે."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "મિશ્ર ઓડિયો/માહિતી ડિસ્ક"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "%s મીડિયા"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s એન્ક્રિપ્ટ થયેલ માહિતી"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "ખાલી CD-ROM ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "ખાલી CD-R ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "ખાલી CD-RW ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "ખાલી DVD-ROM ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "ખાલી DVD-RAM ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "ખાલી DVD-RW ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "ખાલી DVD+R ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "ખાલી DVD+RW ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "ખાલી DVD+R DL ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "ખાલી Blu-Ray ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "ખાલી Blu-Ray R ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "ખાલી Blu-Ray RW ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "ખાલી HD DVD ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "ખાલી HD DVD-R ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "ખાલી HD DVD-RW ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO Disc"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "ખાલી MO Disc"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "ડિસ્ક"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "ખાલી ડિસ્ક"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: ફાઇલ ખોલવામાં ભૂલ: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, stdout ને લખવામાં ભૂલ"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: વાચવામાં ભૂલ: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:બંધ કરવામાં ભૂલ: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: ગેરહાજર જગ્યાઓ"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: જગ્યા ખોલવામાં ભૂલ: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: કાર્યક્રમ લોન્ચ કરવામાં ભૂલ: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-
diff --git a/po/he.po b/po/he.po
deleted file mode 100644
index 48e09e0d..00000000
--- a/po/he.po
+++ /dev/null
@@ -1,1579 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# Yair Hershkovitz, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: 1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-21 15:25+0000\n"
-"PO-Revision-Date: 2008-08-26 16:28+0200\n"
-"Last-Translator: Mark Krapivner <mark125@gmail.com>\n"
-"Language-Team: he\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "Operation not supported, files on different mounts"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Invalid return value from get_info"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Invalid return value from query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Couldn't get stream file descriptor"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "Invalid return value from open"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Didn't get stream file descriptor"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Invalid return value from call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Invalid return value from get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Could not find enclosing mount"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Invalid filename %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Invalid return value from query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "Invalid return value from monitor_dir"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "Invalid return value from monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Error in stream protocol: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "End of stream"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "הפעולה בוטלה"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Seek not supported on stream"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "The query info operation is not supported"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, fuzzy, c-format
-msgid "Query info not supported on stream"
-msgstr "Seek not supported on stream"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Error while getting mount info: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Error connecting to daemon: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Error creating socket: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Error connecting to socket: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Invalid file info format"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Invalid attribute info list content"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Error connecting to D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s Filesystem Service"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Error: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Usage: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Usage: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "No mount type specified"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "mountpoint for %s already running"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "error starting mount daemon"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ ב-%s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "לא צויין שם מארח"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr ""
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "קובץ לא קיים"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "הקובץ אינו ספרייה"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "צרוב"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "לא ניתן ליצור ספרייה זמנית"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendgphoto2.c:2690
-#, c-format
-msgid "No such file or directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "ספרייה לא ריקה"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr ""
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "יוצר CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2763
-msgid "File exists"
-msgstr "קובץ קיים"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "קובץ היעד קיים"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2348
-#: ../daemon/gvfsbackendgphoto2.c:2556 ../daemon/gvfsbackendgphoto2.c:2651
-#: ../daemon/gvfsbackendgphoto2.c:2742
-msgid "Not supported"
-msgstr "לא נתמך"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-#, fuzzy
-msgid "Cannot connect to the system bus"
-msgstr "לא ניתן להתחבר למארח"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "לא צויין כונן"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "הכונן %s לא נימצא"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "הכונן %s אינו מכיל קבצי שמע"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "עיגון cdda על %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "דיסק אודיו"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "אין את קובץ %s על הכונן %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1711
-#, c-format
-msgid "No such file"
-msgstr "אין כזה קובץ"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "מחשב"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "מערכת קבצים"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1703
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "לא ניתן לפתוח ספרייה"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "לא ניתן לפתוח קובץ הניתן לעיגון"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "שגיאה פנימית: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "לא ניתן לעגון את הקובץ"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "אין מדיה בכונן"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "אין קובץ הניתן לעיגון"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "שגיאת HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Could not parse response"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Empty response"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Unexpected reply from server"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "Response invalid"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "שיתוף WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "הכנס סיסמה עבור %s"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "נא להכניס את סיסמת המתווך"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "‏WebDAV ב-%s"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "לא ניתן ליצור בקשה"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "קובת היעד כבר קיים"
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "יצירץ קובץ גיבוי נכשלה"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-#, fuzzy
-msgid "Can't monitor file or directory."
-msgstr "לא ניתן לפתוח ספרייה"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "רשת"
-
-#: ../daemon/gvfsbackendftp.c:236
-#, fuzzy
-msgid "Accounts are unsupported"
-msgstr "לא נתמך"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "המארח סגר את החיבור"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "חיבור המידע נסגר"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "הפעולה בוטלה"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "לא נשאר מקום בשרת"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "פעולה לא נתמכת"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "ההרשאה נדחתה"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "סוג הדף לא ידוע"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "שם קובץ לא תקין"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "broken transmission"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "לא ניתן להתחבר למארח"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "הכנס סיסמה עבור ftp ב-%s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp ב-%s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, fuzzy, c-format
-msgid "ftp as %s on %s"
-msgstr "sftp ב-%s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "הקובץ הוא ספרייה"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "גיבויים עדיין לא נתמכים"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "filename too long"
-
-#: ../daemon/gvfsbackendftp.c:2345
-#, fuzzy
-msgid "Invalid destination filename"
-msgstr "שם קובץ לא תקין %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr ""
-"‏%s: ‏%d: התיקייה או הקובץ כבר קיימים"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr ""
-"‏%s: ‏%d: אין כזה קובץ או תיקייה"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr ""
-"‏%s: ‏%d: שם קובץ לא תקין"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr ""
-"‏%s: ‏%d: לא נתמך"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "מצלמה דיגיטלית (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "מצלמה %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "נגן אודיו %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "מצלמה"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "נגן אודיו"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2008
-msgid "Failed to get folder list"
-msgstr "נכשל בקבלת רשימת תיקיות"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "לא צויין התקן"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "לא ניתן ליצור הקשר gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "שגיאה ביצירת מצלמה"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482 ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading device information"
-msgstr "שגיאה בטעינת נתוני ההתקן"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up device information"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting device information"
-msgstr "שגיאה בקבלת נתוני ההתקן"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-#, fuzzy
-msgid "Error setting up camera communications port"
-msgstr "Error while getting mount info: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "שגיאה באתחול המצלמה"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "לא צויינה מצלמה"
-
-#: ../daemon/gvfsbackendgphoto2.c:1719
-msgid "Error creating file object"
-msgstr "שגיאה ביצירת אובייקט קובץ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1733
-msgid "Error getting file"
-msgstr "שגיאה בקבלת קובץ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1742
-msgid "Error getting data from file"
-msgstr "שגיאה בקבלת נתונים מהקובץ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1836 ../daemon/gvfsbackendgphoto2.c:3010
-#, fuzzy, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Error in stream protocol: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1975 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "לא ספרייה"
-
-#: ../daemon/gvfsbackendgphoto2.c:2071
-#, fuzzy
-msgid "Failed to get file list"
-msgstr "קובץ לא קיים"
-
-#: ../daemon/gvfsbackendgphoto2.c:2360
-msgid "Error creating directory"
-msgstr "שגיאה ביצירת ספרייה"
-
-#: ../daemon/gvfsbackendgphoto2.c:2568
-msgid "Name already exists"
-msgstr "השם כבר קיים"
-
-#: ../daemon/gvfsbackendgphoto2.c:2579 ../daemon/gvfsbackendgphoto2.c:3200
-msgid "New name too long"
-msgstr "השם החדש ארוך מדי"
-
-#: ../daemon/gvfsbackendgphoto2.c:2589 ../daemon/gvfsbackendgphoto2.c:3211
-msgid "Error renaming dir"
-msgstr "שגיאה בשינוי שם ספרייה"
-
-#: ../daemon/gvfsbackendgphoto2.c:2601 ../daemon/gvfsbackendgphoto2.c:3223
-msgid "Error renaming file"
-msgstr "שגיאה בשינוי שם קובץ"
-
-# c-format
-#: ../daemon/gvfsbackendgphoto2.c:2664
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "הספרייה '%s' אינה ריקה"
-
-#: ../daemon/gvfsbackendgphoto2.c:2675
-msgid "Error deleting directory"
-msgstr "שגיאה במחיקת ספרייה"
-
-#: ../daemon/gvfsbackendgphoto2.c:2700
-msgid "Error deleting file"
-msgstr "שגיאה במחיקת קובץ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2752
-msgid "Can't write to directory"
-msgstr "לא ניתן לכתוב לספרייה"
-
-#: ../daemon/gvfsbackendgphoto2.c:2799
-msgid "Cannot allocate new file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2813
-msgid "Cannot read file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2823
-msgid "Cannot get data of file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3109
-msgid "Error writing file"
-msgstr "שגיאה בכתיבת קובץ"
-
-#: ../daemon/gvfsbackendgphoto2.c:3156
-#, fuzzy
-msgid "Not supported (not same directory)"
-msgstr "לא ספרייה"
-
-#: ../daemon/gvfsbackendgphoto2.c:3168
-msgid "Not supported (src is dir, dst is dir)"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3176
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3188
-msgid "Not supported (src is file, dst is dir)"
-msgstr ""
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "שגיאת לקוח HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (קידוד לא תקין)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr ""
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "רשת Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "רשת מקומית"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "מנטר מיקום הרשת"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s ב-%s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "החיבור להתקן אבד"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "ההתקן דורש עדכון תוכנה"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "תוכנית ה-ssh הסתיימה באופן בלתי צפוי"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "שם המארח לא ידוע"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "אין נתיב אל המארח"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "החיבור נדחה על ידי השרת"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "אימות מפתח המארח נכשל"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "לא ניתן להריץ את התוכנית ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "לא ניתן להריץ את התוכנית ssh: ‏%s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "הכנס סיסמה"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "לא ניתן לשלוח את הסיסמה"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "התחבר בכל זאת"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "ביטול התחברות"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "תיבת הדו-שיח של התחברות בוטלה"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "שגיאת פרוטוקול"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp ב-%s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "כישלון"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "שגיאה ביצירת קובץ גיבוי: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "לא ניתן לייצר קובץ זמני"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr ""
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "סיסמה נדרשת עבור השיתוף %s על %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "שגיאה פנימית (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "נכשל בעגינת שיתוף Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "יצירת קובץ גיבוי נכשלה: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "שגיאה במחיקת קובץ: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "שגיאה בהעברת קובץ: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "שגיאה בהסרת קובץ המטרה: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr ""
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "שיתוף Windows ב-%s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "לא ניתן לעגן את הקובץ"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "לא קובץ רגיל"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "שירות מערכת הקבצים רשת Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "אשפה"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "‏%s (באשפה)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "לא ניתן למחוק ת האשפה"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr ""
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "סוג מנוע שגוי"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr ""
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "הפעולה לא נתמכת על ידי המנוע"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "קישורים סימבוליים לא נתמכים על ידי המנוע"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Invalid dbus message"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Replace old daemon."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Don't start fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS Daemon"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Main daemon for GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Try \"%s --help\" for more information."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr ""
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "עיגון אוטומטי נכשל: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "המיקום שצויין אינו מעוגן"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "המיקום שצויין אינו נתמך"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "המיקום כבר מעוגן"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "המיקום אינו מעוגן"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "כונן %s/‏%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "כונן %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "כונן תקליטונים"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "כונן RAID בתוכנה"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "כונן USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "כונן ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "כונן SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "כונן FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "כונן MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "כונן SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "כונן SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "כונן Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "כונן Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "כונן אצבע"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "‏%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "‏%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "‏%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "דיסק שמע/מידע משותף"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "מדיה %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "מידע מוצפן %s"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "דיסק CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "דיסק CD-ROM ריק"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "דיסק CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "דיסק CD-R ריק"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "דיסק CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "דיסק CD-RW ריק"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "דיסק DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "דיסק DVD-ROM ריק"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "דיסק DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "דיסק DVD-RAM ריק"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "דיסק DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "דיסק DVD-RW ריק"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "דיסק DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "דיסק DVD+R ריק"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "דיסק DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "דיסק DVD+RW ריק"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "דיסק DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "דיסק DVD+R DL ריק"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "דיסק Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "דיסק Blu-Ray ריק"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "דיסק Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "דיסק Blu-Ray R ריק"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "דיסק Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "דיסק Blu-Ray RW ריק"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "דיסק HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "דיסק HD DVD ריק"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "דיסק HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "דיסק HD DVD-R ריק"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "דיסק HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "דיסק HD DVD-RW ריק"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "דיסק MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "דיסק MO ריק"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "דיסק"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "דיסק ריק"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: error opening file: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, error writing to stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: error reading: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:error closing: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATION... - concatenate LOCATIONS to standard output."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: missing locations"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: error opening location: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: error launching application: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - open FILES with registered application."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-
-#, fuzzy
-#~ msgid "Error creating port info list"
-#~ msgstr "Error creating socket: %s"
-
-#, fuzzy
-#~ msgid "Error getting port info from port info list"
-#~ msgstr "Error while getting mount info: %s"
-
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "מערכת הקבצים עסוקה: %d קבצים פתוחים"
-
-#~ msgid "Error listing folders"
-#~ msgstr "שגיאה ברישום תיקיות"
-
-#~ msgid "Error listing files in folder"
-#~ msgstr "שגיאה ברישום הקבצים שבתיקייה"
-
-#~ msgid "File unavailable"
-#~ msgstr "קובץ לא זמין"
-
-#~ msgid "CD Burner"
-#~ msgstr "צורב CD"
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "דיסק אודיו ב-%s"
-
-#~ msgid "The file does not exist"
-#~ msgstr "הקובץ לא קיים"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "מדיה ‎%.1f kB"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "מדיה ‎%.1f MB"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "מדיה ‎%1.f GB"
diff --git a/po/hi.po b/po/hi.po
deleted file mode 100644
index f6036abd..00000000
--- a/po/hi.po
+++ /dev/null
@@ -1,1348 +0,0 @@
-# translation of gvfs.HEAD.po to Hindi
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Rajesh Ranjan <rranjan@redhat.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs.HEAD\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-04 04:07+0000\n"
-"PO-Revision-Date: 2008-03-04 16:18+0530\n"
-"Last-Translator: Rajesh Ranjan <rranjan@redhat.com>\n"
-"Language-Team: Hindi <hindi.sf.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n\n\n"
-"\n"
-"\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: ../client/gdaemonfile.c:464 ../client/gdaemonfile.c:1867
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-
-#: ../client/gdaemonfile.c:758
-msgid "Invalid return value from get_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from query_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:865
-msgid "Couldn't get stream file descriptor"
-msgstr ""
-
-#: ../client/gdaemonfile.c:897 ../client/gdaemonfile.c:967
-#: ../client/gdaemonfile.c:1026 ../client/gdaemonfile.c:1085
-#: ../client/gdaemonfile.c:1147
-msgid "Invalid return value from open"
-msgstr ""
-
-#: ../client/gdaemonfile.c:977 ../client/gdaemonfile.c:1036
-#: ../client/gdaemonfile.c:1095 ../client/gdaemonfile.c:1157
-msgid "Didn't get stream file descriptor"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1209 ../client/gdaemonfile.c:1226
-msgid "Invalid return value from call"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1505
-msgid "Invalid return value from get_filesystem_info"
-msgstr ""
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1549
-msgid "Could not find enclosing mount"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1579
-#, c-format
-msgid "Invalid filename %s"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1621
-msgid "Invalid return value from query_filesystem_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:2012
-msgid "Invalid return value from monitor_dir"
-msgstr ""
-
-#: ../client/gdaemonfile.c:2061
-msgid "Invalid return value from monitor_file"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendobexftp.c:753
-#: ../daemon/gvfsbackendobexftp.c:774 ../daemon/gvfsbackendobexftp.c:893
-#: ../daemon/gvfsbackendobexftp.c:1030 ../daemon/gvfsbackendobexftp.c:1094
-#: ../daemon/gvfsbackendobexftp.c:1220 ../daemon/gvfsbackendobexftp.c:1247
-#: ../daemon/gvfsbackendobexftp.c:1306 ../daemon/gvfsbackendobexftp.c:1328
-#: ../daemon/gvfsbackendobexftp.c:1388 ../daemon/gvfsbackendobexftp.c:1407
-#: ../daemon/gvfsbackendsmb.c:1014 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:297
-msgid "Operation was cancelled"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr ""
-
-#: ../client/gdaemonvfs.c:712
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr ""
-
-#: ../client/gvfsdaemondbus.c:559 ../client/gvfsdaemondbus.c:946
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr ""
-
-#: ../common/gsysutils.c:127
-#, c-format
-msgid "Error creating socket: %s"
-msgstr ""
-
-#: ../common/gsysutils.c:165
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr ""
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr ""
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr ""
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr ""
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr ""
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "त्रुटि: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr ""
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr ""
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr ""
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr ""
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr ""
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1748
-msgid "Directory not empty"
-msgstr "डिरेक्ट्री रिक्त नहीं है"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr ""
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "CD/DVD सर्जक"
-
-#: ../daemon/gvfsbackendburn.c:681 ../daemon/gvfsbackendcomputer.c:652
-#: ../daemon/gvfsbackenddnssd.c:393 ../daemon/gvfsbackendftp.c:766
-#: ../daemon/gvfsbackendnetwork.c:637
-#, c-format
-msgid "The file is not a directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "फ़ाइल मौज़ूद है"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr "समर्थित नहीं"
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr ""
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:488 ../hal/ghalvolume.c:286 ../hal/ghalvolume.c:307
-#, c-format
-msgid "Audio Disc"
-msgstr "ऑडियो डिस्क"
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr ""
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:818 ../daemon/gvfsbackendgphoto2.c:1695
-#, c-format
-msgid "No such file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:825 ../daemon/gvfsbackendcomputer.c:573
-#: ../daemon/gvfsbackenddnssd.c:345 ../daemon/gvfsbackendftp.c:1825
-#: ../daemon/gvfsbackendnetwork.c:590 ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:866 ../daemon/gvfsbackendsmbbrowse.c:1037
-#: ../daemon/gvfsbackendsmbbrowse.c:1111
-#, c-format
-msgid "File doesn't exist"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:832
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr "कम्प्यूटर"
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr "फ़ाइलसिस्टम"
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendgphoto2.c:1687
-#: ../daemon/gvfsbackendobexftp.c:739 ../daemon/gvfsbackendtrash.c:637
-msgid "Can't open directory"
-msgstr "डैरक्टरी नहीं खोल सकते है"
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:927
-msgid "Can't mount file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:822
-msgid "No media in the drive"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:879 ../daemon/gvfsbackendcomputer.c:970
-#: ../daemon/gvfsbackendcomputer.c:1070
-msgid "Not a mountable file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:985
-msgid "Can't unmount file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:1101
-msgid "Can't eject file"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:271 ../daemon/gvfsbackenddav.c:1243
-#: ../daemon/gvfsbackendhttp.c:220
-#, c-format
-msgid "HTTP Error: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:287
-msgid "Could not parse response"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:296
-msgid "Empty response"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:303
-msgid "Unexpected reply from server"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:903 ../daemon/gvfsbackenddav.c:1362
-#, c-format
-msgid "Response invalid"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1046
-msgid "WebDAV share"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1048
-#, c-format
-msgid "Enter password for %s"
-msgstr "%s के लिये शब्दकूट डालें"
-
-#: ../daemon/gvfsbackenddav.c:1051
-msgid "Please enter proxy password"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1160 ../daemon/gvfsbackendhttp.c:273
-#: ../daemon/gvfsbackendobexftp.c:592 ../daemon/gvfsbackendobexftp.c:603
-#: ../daemon/gvfsbackendsmb.c:594
-msgid "Invalid mount spec"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1247 ../daemon/gvfsbackenddav.c:1251
-msgid "Not a WebDAV enabled share"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1318 ../daemon/gvfsbackenddav.c:1391
-msgid "Could not create request"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1457 ../daemon/gvfsbackenddav.c:1706
-#: ../daemon/gvfsbackendsmb.c:1726
-msgid "Target file already exists"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackendsftp.c:2689
-#: ../daemon/gvfsbackendsmb.c:982
-msgid "The file was externally modified"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1558 ../daemon/gvfsbackendsmb.c:1020
-#: ../daemon/gvfsbackendsmb.c:1743
-msgid "Backup file creation failed"
-msgstr ""
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr ""
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "नेटवर्क"
-
-#: ../daemon/gvfsbackendftp.c:188
-msgid "Accounts are unsupported"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:192
-msgid "Host closed connection"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:196
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:200
-msgid "Data connection closed"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:206
-msgid "File unavailable"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:210
-msgid "Operation failed"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:215
-msgid "No space left on server"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:223
-msgid "Operation unsupported"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:227 ../daemon/gvfsbackendsftp.c:261
-msgid "Permission denied"
-msgstr "अनुमति निषेधित"
-
-#: ../daemon/gvfsbackendftp.c:231
-msgid "Page type unknown"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:235 ../daemon/gvfsbackendftp.c:1900
-#, c-format
-msgid "Invalid filename"
-msgstr "अवैध फाइलनाम"
-
-#: ../daemon/gvfsbackendftp.c:239 ../daemon/gvfsbackendftp.c:313
-#: ../daemon/gvfsbackendftp.c:342 ../daemon/gvfsbackendftp.c:361
-#: ../daemon/gvfsbackendftp.c:374 ../daemon/gvfsbackendftp.c:671
-#, c-format
-msgid "Invalid reply"
-msgstr "अवैध उत्तर"
-
-#: ../daemon/gvfsbackendftp.c:481
-#, c-format
-msgid "broken transmission"
-msgstr "टूटा प्रेषण"
-
-#: ../daemon/gvfsbackendftp.c:574 ../daemon/gvfsbackendftp.c:690
-#, c-format
-msgid "Could not connect to host"
-msgstr "मेजबान में जोड़ नहीं सका"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:964
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:983 ../daemon/gvfsbackendsftp.c:834
-msgid "Password dialog cancelled"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1035
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp %s पर"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1041
-#, c-format
-msgid "ftp as %s on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1075 ../daemon/gvfsbackendsftp.c:1411
-msgid "No hostname specified"
-msgstr "कोई मेजबाननाम निर्दिष्ट नहीं"
-
-#: ../daemon/gvfsbackendftp.c:1281 ../daemon/gvfsbackendftp.c:1991
-msgid "backups not supported yet"
-msgstr "backups अबतक समर्थित नहीं"
-
-#: ../daemon/gvfsbackendftp.c:1496 ../daemon/gvfsbackendftp.c:1696
-#, c-format
-msgid "filename too long"
-msgstr "फाइलनाम बहुत लंबा है"
-
-#: ../daemon/gvfsbackendftp.c:2010
-#, c-format
-msgid "Invalid destination filename"
-msgstr "अवैध गंतव्य फाइलनाम"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:697
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "डिजिटल कैमरा (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:843 ../hal/ghalvolume.c:390
-#, c-format
-msgid "%s Camera"
-msgstr "%s कैमरा"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:846 ../hal/ghalvolume.c:385
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s ऑडियो प्लेयर"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../hal/ghalvolume.c:402
-msgid "Camera"
-msgstr "कैमरा"
-
-#: ../daemon/gvfsbackendgphoto2.c:857 ../hal/ghalvolume.c:398
-msgid "Audio Player"
-msgstr "श्रव्य चालक"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1539
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 %s पर माउंट"
-
-#: ../daemon/gvfsbackendhttp.c:216
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP क्लाइंट त्रुटि: %s"
-
-#: ../daemon/gvfsbackendhttp.c:534 ../daemon/gvfsbackendsftp.c:1751
-#: ../daemon/gvfsbackendsmb.c:1229 ../daemon/gvfsbackendtrash.c:962
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (अवैध एनकोडिंग)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "निर्देशिका अधिसूचना अबतक समर्थित नहीं"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:694
-msgid "Windows Network"
-msgstr "विंडोज़ नेटवर्क"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "स्थानीय संजाल"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "संजाल स्थान मानिटर"
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:431 ../daemon/gvfsbackendsmb.c:513
-#: ../daemon/gvfsbackendsmb.c:1222
-#, c-format
-msgid "%s on %s"
-msgstr "%s %s पर"
-
-#: ../daemon/gvfsbackendsftp.c:253
-msgid "ssh program unexpectedly exited"
-msgstr "ssh प्रोग्राम अप्रत्याशित रूप से बाहर निकल गया"
-
-#: ../daemon/gvfsbackendsftp.c:268
-msgid "Hostname not known"
-msgstr "मेजबाननाम नहीं ज्ञात"
-
-#: ../daemon/gvfsbackendsftp.c:275
-msgid "No route to host"
-msgstr "मेजबान में कोई रूट नहीं"
-
-#: ../daemon/gvfsbackendsftp.c:282
-msgid "Connection refused by server"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:289
-msgid "Host key verification failed"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:372
-msgid "Unable to spawn ssh program"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:388
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:491 ../daemon/gvfsbackendsftp.c:743
-msgid "Timed out when logging in"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:819
-msgid "Enter passphrase for key"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:821
-msgid "Enter password"
-msgstr "शब्दकूट दाखिल करें"
-
-#: ../daemon/gvfsbackendsftp.c:881
-msgid "Can't send password"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:889
-msgid "Log In Anyway"
-msgstr "किसी तरह लॉगिन करें"
-
-#: ../daemon/gvfsbackendsftp.c:889
-msgid "Cancel Login"
-msgstr "लॉगिन रद्द करें"
-
-#: ../daemon/gvfsbackendsftp.c:899
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:919
-msgid "Login dialog cancelled"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:939
-msgid "Can't send host identity confirmation"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1330 ../daemon/gvfsbackendsftp.c:1353
-msgid "Protocol error"
-msgstr "प्रोटोकॉल त्रुटि"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1377
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp %s पर"
-
-#: ../daemon/gvfsbackendsftp.c:1401
-msgid "Unable to find supported ssh command"
-msgstr ""
-
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1763
-#, c-format
-msgid "/ on %s"
-msgstr "/ on %s"
-
-#: ../daemon/gvfsbackendsftp.c:1827
-msgid "File is directory"
-msgstr "फाइल निर्देशिका है"
-
-#: ../daemon/gvfsbackendsftp.c:1836
-msgid "Failure"
-msgstr "विफलता"
-
-#: ../daemon/gvfsbackendsftp.c:1901 ../daemon/gvfsbackendsftp.c:1963
-#: ../daemon/gvfsbackendsftp.c:1974 ../daemon/gvfsbackendsftp.c:2032
-#: ../daemon/gvfsbackendsftp.c:2122 ../daemon/gvfsbackendsftp.c:2151
-#: ../daemon/gvfsbackendsftp.c:2199 ../daemon/gvfsbackendsftp.c:2278
-#: ../daemon/gvfsbackendsftp.c:2389 ../daemon/gvfsbackendsftp.c:2430
-#: ../daemon/gvfsbackendsftp.c:2482 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2573 ../daemon/gvfsbackendsftp.c:2727
-#: ../daemon/gvfsbackendsftp.c:2753 ../daemon/gvfsbackendsftp.c:2810
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:3149
-#: ../daemon/gvfsbackendsftp.c:3278 ../daemon/gvfsbackendsftp.c:3311
-#: ../daemon/gvfsbackendsftp.c:3412 ../daemon/gvfsbackendsftp.c:3453
-#: ../daemon/gvfsbackendsftp.c:3509 ../daemon/gvfsbackendsftp.c:3545
-#: ../daemon/gvfsbackendsftp.c:3579 ../daemon/gvfsbackendsftp.c:3594
-#: ../daemon/gvfsbackendsftp.c:3613
-msgid "Invalid reply received"
-msgstr "अवैध उत्तर प्राप्त"
-
-#: ../daemon/gvfsbackendsftp.c:2220
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "बैकअप फाइल बनाने में त्रुटि: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2635
-msgid "Unable to create temporary file"
-msgstr "अस्थायी फाइल बनाने में असमर्थ"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:214
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:465 ../daemon/gvfsbackendsmb.c:505
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "आंतरिक त्रुटि (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:560
-msgid "Failed to mount Windows share"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:685 ../daemon/gvfsbackendsmb.c:1116
-msgid "Unsupported seek type"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1170
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1627
-#, c-format
-msgid "Error deleting file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1691
-#, c-format
-msgid "Error moving file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1715
-msgid "Can't move directory over directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1763
-#, c-format
-msgid "Error removing target file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1787
-msgid "Can't recursively move directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1850
-msgid "Windows Shares Filesystem Service"
-msgstr ""
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:702
-#, c-format
-msgid "Windows shares on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:794 ../daemon/gvfsbackendsmbbrowse.c:840
-msgid "The file is not a mountable"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:862
-msgid "Not a regular file"
-msgstr "एक सामान्य फाइल नहीं"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1107
-msgid "Not a directory"
-msgstr "डिरेक्ट्री नहीं है"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1219
-msgid "Windows Network Filesystem Service"
-msgstr ""
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:600 ../daemon/gvfsbackendtrash.c:1190
-msgid "Trash"
-msgstr "रद्दी"
-
-#: ../daemon/gvfsbackendtrash.c:972
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (in trash)"
-
-#: ../daemon/gvfsbackendtrash.c:1291
-msgid "Can't delete trash"
-msgstr ""
-
-#: ../daemon/gvfsbackendtrash.c:1638 ../daemon/gvfsbackendtrash.c:1713
-msgid "Trash directory notification not supported"
-msgstr ""
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr ""
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr ""
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:119
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:169 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr ""
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr ""
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr ""
-
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr ""
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr ""
-
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "GVFS डेमान"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr ""
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:74
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:76 ../programs/gvfs-cat.c:167 ../programs/gvfs-open.c:135
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr ""
-
-#: ../daemon/mount.c:432
-msgid "Invalid arguments from spawned child"
-msgstr ""
-
-#: ../daemon/mount.c:731
-#, c-format
-msgid "Automount failed: %s"
-msgstr ""
-
-#: ../daemon/mount.c:776
-msgid "The specified location is not mounted"
-msgstr ""
-
-#: ../daemon/mount.c:781
-msgid "The specified location is not supported"
-msgstr ""
-
-#: ../daemon/mount.c:944
-msgid "Location is already mounted"
-msgstr ""
-
-#: ../daemon/mount.c:952
-msgid "Location is not mountable"
-msgstr ""
-
-#: ../hal/ghaldrive.c:142
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:150
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:163
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:166
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:168
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:174
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:184
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s चालन"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:190
-#, c-format
-msgid "%s Drive"
-msgstr "%s चालन"
-
-#: ../hal/ghaldrive.c:194
-msgid "Floppy Drive"
-msgstr "फ्लॉपी ड्राइव"
-
-#: ../hal/ghaldrive.c:200
-msgid "Software RAID Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:202
-msgid "USB Drive"
-msgstr "USB चालन"
-
-#: ../hal/ghaldrive.c:204
-msgid "ATA Drive"
-msgstr "ATA ड्राइव"
-
-#: ../hal/ghaldrive.c:206
-msgid "SCSI Drive"
-msgstr "SCSI ड्राइव"
-
-#: ../hal/ghaldrive.c:208
-msgid "FireWire Drive"
-msgstr "FireWire ड्राइव"
-
-#: ../hal/ghaldrive.c:212
-msgid "Tape Drive"
-msgstr "Tape ड्राइव"
-
-#: ../hal/ghaldrive.c:214
-msgid "CompactFlash Drive"
-msgstr "CompactFlash ड्राइव"
-
-#: ../hal/ghaldrive.c:216
-msgid "MemoryStick Drive"
-msgstr "MemoryStick ड्राइव"
-
-#: ../hal/ghaldrive.c:218
-msgid "SmartMedia Drive"
-msgstr "Smartमीडिया ड्राइव"
-
-#: ../hal/ghaldrive.c:220
-msgid "SD/MMC Drive"
-msgstr "SD/MMC ड्राइव"
-
-#: ../hal/ghaldrive.c:222
-msgid "Zip Drive"
-msgstr "ज़िप ड्राइव"
-
-#: ../hal/ghaldrive.c:224
-msgid "Jaz Drive"
-msgstr "ज़िप ड्राइव"
-
-#: ../hal/ghaldrive.c:226
-msgid "Thumb Drive"
-msgstr "Thumb ड्राइव"
-
-#: ../hal/ghaldrive.c:229
-msgid "Mass Storage Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:653
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-
-#: ../hal/ghalmount.c:147 ../hal/ghalvolume.c:139
-msgid "CD-ROM Disc"
-msgstr "सीडी-रोम डिस्क"
-
-#: ../hal/ghalmount.c:147 ../hal/ghalvolume.c:139
-msgid "Blank CD-ROM Disc"
-msgstr "खाली CD-ROM डिस्क"
-
-#: ../hal/ghalmount.c:148 ../hal/ghalvolume.c:140
-msgid "CD-R Disc"
-msgstr "CD-R डिस्क"
-
-#: ../hal/ghalmount.c:148 ../hal/ghalvolume.c:140
-msgid "Blank CD-R Disc"
-msgstr "खाली CD-R डिस्क"
-
-#: ../hal/ghalmount.c:149 ../hal/ghalvolume.c:141
-msgid "CD-RW Disc"
-msgstr "CD-RW डिस्क"
-
-#: ../hal/ghalmount.c:149 ../hal/ghalvolume.c:141
-msgid "Blank CD-RW Disc"
-msgstr "खाली CD-RW डिस्क"
-
-#: ../hal/ghalmount.c:150 ../hal/ghalmount.c:152 ../hal/ghalvolume.c:142
-#: ../hal/ghalvolume.c:144
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM डिस्क"
-
-#: ../hal/ghalmount.c:150 ../hal/ghalmount.c:152 ../hal/ghalvolume.c:142
-#: ../hal/ghalvolume.c:144
-msgid "Blank DVD-ROM Disc"
-msgstr "खाली DVD-ROM डिस्क"
-
-#: ../hal/ghalmount.c:151 ../hal/ghalvolume.c:143
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM डिस्क"
-
-#: ../hal/ghalmount.c:151 ../hal/ghalvolume.c:143
-msgid "Blank DVD-RAM Disc"
-msgstr "खाली DVD-RAM डिस्क"
-
-#: ../hal/ghalmount.c:153 ../hal/ghalvolume.c:145
-msgid "DVD-RW Disc"
-msgstr "DVD-RW डिस्क"
-
-#: ../hal/ghalmount.c:153 ../hal/ghalvolume.c:145
-msgid "Blank DVD-RW Disc"
-msgstr "खाली DVD-RW डिस्क"
-
-#: ../hal/ghalmount.c:154 ../hal/ghalvolume.c:146
-msgid "DVD+R Disc"
-msgstr "DVD+R डिस्क"
-
-#: ../hal/ghalmount.c:154 ../hal/ghalvolume.c:146
-msgid "Blank DVD+R Disc"
-msgstr "खाली DVD+R डिस्क"
-
-#: ../hal/ghalmount.c:155 ../hal/ghalvolume.c:147
-msgid "DVD+RW Disc"
-msgstr "DVD+RW डिस्क"
-
-#: ../hal/ghalmount.c:155 ../hal/ghalvolume.c:147
-msgid "Blank DVD+RW Disc"
-msgstr "खाली DVD+RW डिस्क"
-
-#: ../hal/ghalmount.c:156 ../hal/ghalvolume.c:148
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL डिस्क"
-
-#: ../hal/ghalmount.c:156 ../hal/ghalvolume.c:148
-msgid "Blank DVD+R DL Disc"
-msgstr "खाली DVD+R DL डिस्क"
-
-#: ../hal/ghalmount.c:157 ../hal/ghalvolume.c:149
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray डिस्क"
-
-#: ../hal/ghalmount.c:157 ../hal/ghalvolume.c:149
-msgid "Blank Blu-Ray Disc"
-msgstr "खाली Blu-Ray डिस्क"
-
-#: ../hal/ghalmount.c:158 ../hal/ghalvolume.c:150
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R डिस्क"
-
-#: ../hal/ghalmount.c:158 ../hal/ghalvolume.c:150
-msgid "Blank Blu-Ray R Disc"
-msgstr "खाली Blu-Ray R डिस्क"
-
-#: ../hal/ghalmount.c:159 ../hal/ghalvolume.c:151
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW डिस्क"
-
-#: ../hal/ghalmount.c:159 ../hal/ghalvolume.c:151
-msgid "Blank Blu-Ray RW Disc"
-msgstr "खाली Blu-Ray RW डिस्क"
-
-#: ../hal/ghalmount.c:160 ../hal/ghalvolume.c:152
-msgid "HD DVD Disc"
-msgstr "HD DVD डिस्क"
-
-#: ../hal/ghalmount.c:160 ../hal/ghalvolume.c:152
-msgid "Blank HD DVD Disc"
-msgstr "खाली HD DVD डिस्क"
-
-#: ../hal/ghalmount.c:161 ../hal/ghalvolume.c:153
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R डिस्क"
-
-#: ../hal/ghalmount.c:161 ../hal/ghalvolume.c:153
-msgid "Blank HD DVD-R Disc"
-msgstr "खाली HD DVD-R डिस्क"
-
-#: ../hal/ghalmount.c:162 ../hal/ghalvolume.c:154
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW डिस्क"
-
-#: ../hal/ghalmount.c:162 ../hal/ghalvolume.c:154
-msgid "Blank HD DVD-RW Disc"
-msgstr "खाली HD DVD-RW डिस्क"
-
-#: ../hal/ghalmount.c:163 ../hal/ghalvolume.c:155
-msgid "MO Disc"
-msgstr "MO डिस्क"
-
-#: ../hal/ghalmount.c:163 ../hal/ghalvolume.c:155
-msgid "Blank MO Disc"
-msgstr "खाली MO डिस्क"
-
-#: ../hal/ghalmount.c:164 ../hal/ghalvolume.c:156
-msgid "Disc"
-msgstr "डिस्क"
-
-#: ../hal/ghalmount.c:164 ../hal/ghalvolume.c:156
-msgid "Blank Disc"
-msgstr "खाली डिस्क"
-
-#: ../hal/ghalmount.c:349
-#, c-format
-msgid "%.1f kB Media"
-msgstr "%.1f kB मीडिया"
-
-#: ../hal/ghalmount.c:354
-#, c-format
-msgid "%.1f MB Media"
-msgstr "%.1f MB मीडिया"
-
-#: ../hal/ghalmount.c:359
-#, c-format
-msgid "%.1f GB Media"
-msgstr "%.1f GB मीडिया"
-
-#: ../hal/ghalmount.c:486 ../hal/ghalvolume.c:305
-msgid "Mixed Audio/Data Disc"
-msgstr "मिश्रित ऑडियो/आंकड़ा डिस्क"
-
-#: ../hal/ghalvolume.c:190
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../hal/ghalvolume.c:195
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../hal/ghalvolume.c:200
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:293
-#, c-format
-msgid "%s Encrypted Data"
-msgstr ""
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:316
-#, c-format
-msgid "%s Media"
-msgstr "%s मीडिया"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr ""
-
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-
-#: ../programs/gvfs-cat.c:150
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:165 ../programs/gvfs-open.c:133
-#, c-format
-msgid "%s: missing locations"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr ""
-
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-
diff --git a/po/hu.po b/po/hu.po
deleted file mode 100644
index 9b69a5b3..00000000
--- a/po/hu.po
+++ /dev/null
@@ -1,1370 +0,0 @@
-# Hungarian translation of gvfs
-# Copyright (C) 2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gvfs package.
-#
-# Gabor Kelemen <kelemeng@gnome.hu>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs head\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-09 20:51+0000\n"
-"PO-Revision-Date: 2008-03-10 02:49+0100\n"
-"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
-"Language-Team: Hungarian <gnome@fsf.hu>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: ../client/gdaemonfile.c:464 ../client/gdaemonfile.c:1867
-msgid "Operation not supported, files on different mounts"
-msgstr "A művelet nem támogatott, a fájlok eltérő csatolásokon vannak"
-
-#: ../client/gdaemonfile.c:758
-msgid "Invalid return value from get_info"
-msgstr "A get_info visszatérési értéke érvénytelen"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from query_info"
-msgstr "A query_info visszatérési értéke érvénytelen"
-
-#: ../client/gdaemonfile.c:865
-msgid "Couldn't get stream file descriptor"
-msgstr "Az adatfolyamfájl leírója nem kérhető le"
-
-#: ../client/gdaemonfile.c:897 ../client/gdaemonfile.c:967
-#: ../client/gdaemonfile.c:1026 ../client/gdaemonfile.c:1085
-#: ../client/gdaemonfile.c:1147
-msgid "Invalid return value from open"
-msgstr "Az open visszatérési értéke érvénytelen"
-
-#: ../client/gdaemonfile.c:977 ../client/gdaemonfile.c:1036
-#: ../client/gdaemonfile.c:1095 ../client/gdaemonfile.c:1157
-msgid "Didn't get stream file descriptor"
-msgstr "Az adatfolyamfájl-leíró lekérése meghiúsult"
-
-#: ../client/gdaemonfile.c:1209 ../client/gdaemonfile.c:1226
-msgid "Invalid return value from call"
-msgstr "A hívás visszatérési értéke érvénytelen"
-
-#: ../client/gdaemonfile.c:1505
-msgid "Invalid return value from get_filesystem_info"
-msgstr "A get_filesystem_info visszatérési értéke érvénytelen"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1549
-msgid "Could not find enclosing mount"
-msgstr "Nem található befoglaló csatolási objektum"
-
-#: ../client/gdaemonfile.c:1579
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Érvénytelen fájlnév: %s"
-
-#: ../client/gdaemonfile.c:1621
-msgid "Invalid return value from query_filesystem_info"
-msgstr "A query_filesystem_info visszatérési értéke érvénytelen"
-
-#: ../client/gdaemonfile.c:2012
-msgid "Invalid return value from monitor_dir"
-msgstr "A monitor_dir visszatérési értéke érvénytelen"
-
-#: ../client/gdaemonfile.c:2061
-msgid "Invalid return value from monitor_file"
-msgstr "A monitor_file visszatérési értéke érvénytelen"
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Hiba az adatfolyam-protokollban: %s"
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr "Vége az adatfolyamnak"
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendobexftp.c:774
-#: ../daemon/gvfsbackendobexftp.c:795 ../daemon/gvfsbackendobexftp.c:914
-#: ../daemon/gvfsbackendobexftp.c:1051 ../daemon/gvfsbackendobexftp.c:1115
-#: ../daemon/gvfsbackendobexftp.c:1252 ../daemon/gvfsbackendobexftp.c:1279
-#: ../daemon/gvfsbackendobexftp.c:1338 ../daemon/gvfsbackendobexftp.c:1360
-#: ../daemon/gvfsbackendobexftp.c:1420 ../daemon/gvfsbackendobexftp.c:1439
-#: ../daemon/gvfsbackendsmb.c:1015 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:297
-msgid "Operation was cancelled"
-msgstr "A művelet megszakítva"
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr "Az adatfolyam nem támogatja a pozicionálást"
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr "Az információk lekérése művelet nem támogatott"
-
-#: ../client/gdaemonvfs.c:731
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Hiba a csatolási információk lekérésekor: %s"
-
-#: ../client/gvfsdaemondbus.c:559 ../client/gvfsdaemondbus.c:946
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Hiba a démonhoz csatlakozáskor: %s"
-
-#: ../common/gsysutils.c:133
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Hiba a foglalat létrehozásakor: %s"
-
-#: ../common/gsysutils.c:171
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Hiba a foglalathoz csatlakozáskor: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Érvénytelen fájlinformáció-formátum"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Érvénytelen attribútuminformáció-lista tartalom"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Hiba a D-Bushoz csatlakozáskor: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s fájlrendszer-szolgáltatás"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Hiba: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Használat: %s --spawner dbus-azonosító objektum_útvonal"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Használat: %s kulcs=érték kulcs=érték..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Nincs megadva csatolástípus"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "A(z) %s csatolási pontja már fut"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "hiba a csatolási démon indításakor"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr "Írás"
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr "Nem lehet ideiglenes könyvtárat létrehozni"
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr "Nincs ilyen fájl vagy könyvtár"
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1804
-msgid "Directory not empty"
-msgstr "A könyvtár nem üres"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr "A könyvtár nem másolható át könyvtárba"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "CD/DVD-készítő"
-
-#: ../daemon/gvfsbackendburn.c:681 ../daemon/gvfsbackendcomputer.c:652
-#: ../daemon/gvfsbackenddnssd.c:393 ../daemon/gvfsbackendftp.c:846
-#: ../daemon/gvfsbackendnetwork.c:637
-#, c-format
-msgid "The file is not a directory"
-msgstr "A fájl nem egy könyvtár"
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "A fájl létezik"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr "Nincs ilyen fájl vagy könyvtár a célútvonalon"
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr "A könyvtár nem másolható át könyvtárba"
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr "A célfájl létezik"
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr "A könyvtár nem másolható rekurzívan"
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr "Nem támogatott"
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr "Nincs megadva meghajtó"
-
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "A(z) %s meghajtó nem található"
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "A(z) %s meghajtó nem tartalmaz hangfájlokat"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda csatolás a következőn: %s"
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:492 ../hal/ghalvolume.c:298 ../hal/ghalvolume.c:319
-#, c-format
-msgid "Audio Disc"
-msgstr "Audio lemez"
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "A fájlrendszer foglalt: %d megnyitott fájl"
-msgstr[1] "A fájlrendszer foglalt: %d megnyitott fájl"
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Nincs %s nevű fájl a(z) %s meghajtón"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Hiba a „paranoia” programtól a következő meghajtón: %s"
-
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Hiba az adatfolyamban pozicionálásakor a(z) %s meghajtón"
-
-#: ../daemon/gvfsbackendcdda.c:818 ../daemon/gvfsbackendgphoto2.c:1695
-#, c-format
-msgid "No such file"
-msgstr "Nincs ilyen fájl"
-
-#: ../daemon/gvfsbackendcdda.c:825 ../daemon/gvfsbackendcomputer.c:573
-#: ../daemon/gvfsbackenddnssd.c:345 ../daemon/gvfsbackendftp.c:1955
-#: ../daemon/gvfsbackendnetwork.c:590 ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:866 ../daemon/gvfsbackendsmbbrowse.c:1037
-#: ../daemon/gvfsbackendsmbbrowse.c:1111
-#, c-format
-msgid "File doesn't exist"
-msgstr "A fájl nem létezik"
-
-#: ../daemon/gvfsbackendcdda.c:832
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "A fájl nem létezik vagy nem egy hangsáv"
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr "Hang CD fájlrendszer-szolgáltatás"
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr "Számítógép"
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr "Fájlrendszer"
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendgphoto2.c:1687
-#: ../daemon/gvfsbackendobexftp.c:760 ../daemon/gvfsbackendtrash.c:637
-msgid "Can't open directory"
-msgstr "A könyvtár nem nyitható meg"
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr "Nem nyitható meg csatolható fájl"
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr "Belső hiba: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:930
-msgid "Can't mount file"
-msgstr "A fájl nem csatolható"
-
-#: ../daemon/gvfsbackendcomputer.c:825
-msgid "No media in the drive"
-msgstr "Nincs adathordozó a meghajtóban"
-
-#: ../daemon/gvfsbackendcomputer.c:882 ../daemon/gvfsbackendcomputer.c:973
-#: ../daemon/gvfsbackendcomputer.c:1073
-msgid "Not a mountable file"
-msgstr "Nem csatolható fájl"
-
-#: ../daemon/gvfsbackendcomputer.c:988
-msgid "Can't unmount file"
-msgstr "A fájl nem választható le"
-
-#: ../daemon/gvfsbackendcomputer.c:1104
-msgid "Can't eject file"
-msgstr "A fájl nem adható ki"
-
-#: ../daemon/gvfsbackenddav.c:269 ../daemon/gvfsbackenddav.c:1289
-#: ../daemon/gvfsbackendhttp.c:220
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP hiba: %s"
-
-#: ../daemon/gvfsbackenddav.c:285
-msgid "Could not parse response"
-msgstr "A válasz nem elemezhető"
-
-#: ../daemon/gvfsbackenddav.c:294
-msgid "Empty response"
-msgstr "Üres válasz"
-
-#: ../daemon/gvfsbackenddav.c:301
-msgid "Unexpected reply from server"
-msgstr "Váratlan válasz a kiszolgálótól"
-
-#: ../daemon/gvfsbackenddav.c:944 ../daemon/gvfsbackenddav.c:1421
-#, c-format
-msgid "Response invalid"
-msgstr "A válasz érvénytelen"
-
-#: ../daemon/gvfsbackenddav.c:1087
-msgid "WebDAV share"
-msgstr "WebDAV megosztás"
-
-#: ../daemon/gvfsbackenddav.c:1089
-#, c-format
-msgid "Enter password for %s"
-msgstr "Adja meg %s jelszavát"
-
-#: ../daemon/gvfsbackenddav.c:1092
-msgid "Please enter proxy password"
-msgstr "Adja meg a proxy jelszót"
-
-#: ../daemon/gvfsbackenddav.c:1206 ../daemon/gvfsbackendhttp.c:273
-#: ../daemon/gvfsbackendobexftp.c:605 ../daemon/gvfsbackendobexftp.c:616
-#: ../daemon/gvfsbackendsmb.c:595
-msgid "Invalid mount spec"
-msgstr "Érvénytelen csatolási meghatározás"
-
-#: ../daemon/gvfsbackenddav.c:1293 ../daemon/gvfsbackenddav.c:1297
-msgid "Not a WebDAV enabled share"
-msgstr "Nem WebDAV-képes megosztás"
-
-#: ../daemon/gvfsbackenddav.c:1319
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV a következőn: %s"
-
-#: ../daemon/gvfsbackenddav.c:1377 ../daemon/gvfsbackenddav.c:1448
-msgid "Could not create request"
-msgstr "Nem hozható létre kérés"
-
-#: ../daemon/gvfsbackenddav.c:1511 ../daemon/gvfsbackenddav.c:1764
-#: ../daemon/gvfsbackendftp.c:1558 ../daemon/gvfsbackendftp.c:2189
-#: ../daemon/gvfsbackendsmb.c:1701
-#, c-format
-msgid "Target file already exists"
-msgstr "A célfájl már létezik"
-
-#: ../daemon/gvfsbackenddav.c:1584 ../daemon/gvfsbackendsftp.c:2662
-#: ../daemon/gvfsbackendsmb.c:983
-msgid "The file was externally modified"
-msgstr "A fájlt külső program módosította"
-
-#: ../daemon/gvfsbackenddav.c:1615 ../daemon/gvfsbackendsmb.c:1021
-#: ../daemon/gvfsbackendsmb.c:1718
-msgid "Backup file creation failed"
-msgstr "A mentési fájl létrehozása meghiúsult"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "A fájl vagy könyvtár nem figyelhető meg."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Hálózat"
-
-#: ../daemon/gvfsbackendftp.c:224
-msgid "Accounts are unsupported"
-msgstr "A fiókok nem támogatottak"
-
-#: ../daemon/gvfsbackendftp.c:228
-msgid "Host closed connection"
-msgstr "A gép lezárta a kapcsolatot"
-
-#: ../daemon/gvfsbackendftp.c:232
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Nem nyitható meg az adatkapcsolat. Lehet, hogy a tűzfal akadályozza?"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Data connection closed"
-msgstr "Az adatkapcsolat lezárva"
-
-#: ../daemon/gvfsbackendftp.c:242
-msgid "File unavailable"
-msgstr "A fájl nem érhető el"
-
-#: ../daemon/gvfsbackendftp.c:246
-msgid "Operation failed"
-msgstr "A művelet meghiúsult"
-
-#: ../daemon/gvfsbackendftp.c:251
-msgid "No space left on server"
-msgstr "Nincs több hely a kiszolgálón"
-
-#: ../daemon/gvfsbackendftp.c:259 ../daemon/gvfsbackendsftp.c:3684
-msgid "Operation unsupported"
-msgstr "A művelet nem támogatott"
-
-#: ../daemon/gvfsbackendftp.c:263 ../daemon/gvfsbackendsftp.c:259
-msgid "Permission denied"
-msgstr "Hozzáférés megtagadva"
-
-#: ../daemon/gvfsbackendftp.c:267
-msgid "Page type unknown"
-msgstr "Az oldaltípus ismeretlen"
-
-#: ../daemon/gvfsbackendftp.c:271 ../daemon/gvfsbackendftp.c:2059
-#, c-format
-msgid "Invalid filename"
-msgstr "Érvénytelen fájlnév"
-
-#: ../daemon/gvfsbackendftp.c:275 ../daemon/gvfsbackendftp.c:349
-#: ../daemon/gvfsbackendftp.c:378 ../daemon/gvfsbackendftp.c:397
-#: ../daemon/gvfsbackendftp.c:410 ../daemon/gvfsbackendftp.c:751
-#, c-format
-msgid "Invalid reply"
-msgstr "Érvénytelen válasz"
-
-#: ../daemon/gvfsbackendftp.c:517
-#, c-format
-msgid "broken transmission"
-msgstr "sérült átvitel"
-
-#: ../daemon/gvfsbackendftp.c:611 ../daemon/gvfsbackendftp.c:771
-#, c-format
-msgid "Could not connect to host"
-msgstr "Nem lehet csatlakozni a géphez"
-
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendftp.c:897 ../daemon/gvfsbackendsftp.c:1736
-#, c-format
-msgid "/ on %s"
-msgstr "/ ezen: %s"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1259
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Adja meg %s FTP jelszavát"
-
-#: ../daemon/gvfsbackendftp.c:1279 ../daemon/gvfsbackendsftp.c:833
-msgid "Password dialog cancelled"
-msgstr "A jelszó megadása megszakítva"
-
-#: ../daemon/gvfsbackendftp.c:1345
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp a következőn: %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1351
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp %s néven a következőn: %s"
-
-#: ../daemon/gvfsbackendftp.c:1385 ../daemon/gvfsbackendsftp.c:1410
-msgid "No hostname specified"
-msgstr "Nincs megadva gépnév"
-
-#: ../daemon/gvfsbackendftp.c:1608 ../daemon/gvfsbackendftp.c:2150
-msgid "backups not supported yet"
-msgstr "biztonsági másolatok még nem támogatottak"
-
-#: ../daemon/gvfsbackendftp.c:1684
-#, c-format
-msgid "filename too long"
-msgstr "a fájlnév túl hosszú"
-
-#: ../daemon/gvfsbackendftp.c:2169
-#, c-format
-msgid "Invalid destination filename"
-msgstr "Érvénytelen célfájlnév"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:697
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digitális fényképezőgép (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:843 ../hal/ghalvolume.c:398
-#, c-format
-msgid "%s Camera"
-msgstr "%s fényképezőgép"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:846 ../hal/ghalvolume.c:393
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s zenelejátszó"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../hal/ghalvolume.c:407
-msgid "Camera"
-msgstr "Fényképezőgép"
-
-#: ../daemon/gvfsbackendgphoto2.c:857 ../hal/ghalvolume.c:405
-msgid "Audio Player"
-msgstr "Zenelejátszó"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1539
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 csatolás a következőn: %s"
-
-#: ../daemon/gvfsbackendhttp.c:216
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP klienshiba: %s"
-
-#: ../daemon/gvfsbackendhttp.c:534 ../daemon/gvfsbackendsftp.c:1724
-#: ../daemon/gvfsbackendsmb.c:1230 ../daemon/gvfsbackendtrash.c:962
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (érvénytelen kódolás)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "A könyvtárértesítés nem támogatott"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:694
-msgid "Windows Network"
-msgstr "Windows hálózat"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Helyi hálózat"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Hálózati helyek figyelése"
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:444 ../daemon/gvfsbackendsmb.c:514
-#: ../daemon/gvfsbackendsmb.c:1223
-#, c-format
-msgid "%s on %s"
-msgstr "%s ezen: %s"
-
-#: ../daemon/gvfsbackendsftp.c:251
-msgid "ssh program unexpectedly exited"
-msgstr "az ssh program váratlanul kilépett"
-
-#: ../daemon/gvfsbackendsftp.c:266
-msgid "Hostname not known"
-msgstr "A gépnév ismeretlen"
-
-#: ../daemon/gvfsbackendsftp.c:273
-msgid "No route to host"
-msgstr "Nincs útvonal a kiszolgálóhoz"
-
-#: ../daemon/gvfsbackendsftp.c:280
-msgid "Connection refused by server"
-msgstr "A kiszolgáló visszautasította a kapcsolatot"
-
-#: ../daemon/gvfsbackendsftp.c:287
-msgid "Host key verification failed"
-msgstr "A gép kulcsának ellenőrzése meghiúsult"
-
-#: ../daemon/gvfsbackendsftp.c:370
-msgid "Unable to spawn ssh program"
-msgstr "Az ssh program nem indítható"
-
-#: ../daemon/gvfsbackendsftp.c:386
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Az ssh program nem indítható: %s"
-
-#: ../daemon/gvfsbackendsftp.c:489 ../daemon/gvfsbackendsftp.c:741
-msgid "Timed out when logging in"
-msgstr "Időtúllépés a bejelentkezéskor"
-
-#: ../daemon/gvfsbackendsftp.c:817
-msgid "Enter passphrase for key"
-msgstr "Adja meg a kulcs jelmondatát"
-
-#: ../daemon/gvfsbackendsftp.c:819
-msgid "Enter password"
-msgstr "Adja meg a jelszót"
-
-#: ../daemon/gvfsbackendsftp.c:880
-msgid "Can't send password"
-msgstr "A jelszó nem küldhető el"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Log In Anyway"
-msgstr "Bejelentkezés mindenképpen"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Cancel Login"
-msgstr "Bejelentkezés megszakítása"
-
-#: ../daemon/gvfsbackendsftp.c:898
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"A távoli számítógép (%s) azonossága ismeretlen.\n"
-"Ez akkor fordul elő, ha először jelentkezik be egy számtógépre.\n"
-"\n"
-"A távoli számítógép által küldött azonosság: %s. Ha nem teljesen biztos "
-"abban, hogy biztonságos a folytatás, keresse meg a rendszergazdát."
-
-#: ../daemon/gvfsbackendsftp.c:918
-msgid "Login dialog cancelled"
-msgstr "A bejelentkezés megszakítva"
-
-#: ../daemon/gvfsbackendsftp.c:938
-msgid "Can't send host identity confirmation"
-msgstr "A gép azonossági információi nem küldhetők el"
-
-#: ../daemon/gvfsbackendsftp.c:1329 ../daemon/gvfsbackendsftp.c:1352
-msgid "Protocol error"
-msgstr "Protokollhiba"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1376
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp a következőn: %s"
-
-#: ../daemon/gvfsbackendsftp.c:1400
-msgid "Unable to find supported ssh command"
-msgstr "Nem található támogatott ssh parancs"
-
-#: ../daemon/gvfsbackendsftp.c:1800
-msgid "File is directory"
-msgstr "A fájl könyvtár"
-
-#: ../daemon/gvfsbackendsftp.c:1809
-msgid "Failure"
-msgstr "Hiba"
-
-#: ../daemon/gvfsbackendsftp.c:1874 ../daemon/gvfsbackendsftp.c:1936
-#: ../daemon/gvfsbackendsftp.c:1947 ../daemon/gvfsbackendsftp.c:2005
-#: ../daemon/gvfsbackendsftp.c:2095 ../daemon/gvfsbackendsftp.c:2124
-#: ../daemon/gvfsbackendsftp.c:2172 ../daemon/gvfsbackendsftp.c:2251
-#: ../daemon/gvfsbackendsftp.c:2362 ../daemon/gvfsbackendsftp.c:2403
-#: ../daemon/gvfsbackendsftp.c:2455 ../daemon/gvfsbackendsftp.c:2526
-#: ../daemon/gvfsbackendsftp.c:2546 ../daemon/gvfsbackendsftp.c:2700
-#: ../daemon/gvfsbackendsftp.c:2726 ../daemon/gvfsbackendsftp.c:2783
-#: ../daemon/gvfsbackendsftp.c:2842 ../daemon/gvfsbackendsftp.c:3122
-#: ../daemon/gvfsbackendsftp.c:3251 ../daemon/gvfsbackendsftp.c:3284
-#: ../daemon/gvfsbackendsftp.c:3385 ../daemon/gvfsbackendsftp.c:3426
-#: ../daemon/gvfsbackendsftp.c:3482 ../daemon/gvfsbackendsftp.c:3518
-#: ../daemon/gvfsbackendsftp.c:3552 ../daemon/gvfsbackendsftp.c:3567
-#: ../daemon/gvfsbackendsftp.c:3586 ../daemon/gvfsbackendsftp.c:3664
-msgid "Invalid reply received"
-msgstr "Érvénytelen válasz érkezett"
-
-#: ../daemon/gvfsbackendsftp.c:2193
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Hiba a mentési fájl létrehozásakor: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2608
-msgid "Unable to create temporary file"
-msgstr "Nem lehet ideiglenes fájlt létrehozni"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:214
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Jelszó szükséges a(z) %2$s gép %1$s megosztásához"
-
-#: ../daemon/gvfsbackendsmb.c:466 ../daemon/gvfsbackendsmb.c:506
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Belső hiba (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:561
-msgid "Failed to mount Windows share"
-msgstr "A Windows megosztás csatolása meghiúsult"
-
-#: ../daemon/gvfsbackendsmb.c:686 ../daemon/gvfsbackendsmb.c:1117
-msgid "Unsupported seek type"
-msgstr "Nem támogatott pozicionálástípus"
-
-#: ../daemon/gvfsbackendsmb.c:1171
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "A mentési fájl létrehozása meghiúsult: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1602
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Hiba a fájl törlésekor: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1666
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Hiba a fájl áthelyezésekor: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1690
-msgid "Can't move directory over directory"
-msgstr "A könyvtár nem helyezhető át könyvtárba"
-
-#: ../daemon/gvfsbackendsmb.c:1738
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Hiba a célfájl eltávolításakor: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1762
-msgid "Can't recursively move directory"
-msgstr "A könyvtár nem helyezhető át rekurzívan"
-
-#: ../daemon/gvfsbackendsmb.c:1825
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows megosztások fájlrendszer-szolgáltatás"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:702
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windows megosztások ezen: %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:794 ../daemon/gvfsbackendsmbbrowse.c:840
-msgid "The file is not a mountable"
-msgstr "A fájl nem csatolható"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:862
-msgid "Not a regular file"
-msgstr "Nem szabályos fájl"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1107
-msgid "Not a directory"
-msgstr "Nem könyvtár"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1219
-msgid "Windows Network Filesystem Service"
-msgstr "Windows hálózat fájlrendszer-szolgáltatás"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:600 ../daemon/gvfsbackendtrash.c:1190
-msgid "Trash"
-msgstr "Kuka"
-
-#: ../daemon/gvfsbackendtrash.c:972
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (a Kukában)"
-
-#: ../daemon/gvfsbackendtrash.c:1291
-msgid "Can't delete trash"
-msgstr "A Kuka nem törölhető"
-
-#: ../daemon/gvfsbackendtrash.c:1638 ../daemon/gvfsbackendtrash.c:1713
-msgid "Trash directory notification not supported"
-msgstr "A Kuka könyvtár értesítése nem támogatott"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Érvénytelen háttérprogram-típus"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Hiba a fájlleíró küldésekor: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:119
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:169 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "A háttérprogram nem támogatja a műveletet"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "A háttérprogram nem támogatja a szimbolikus linkeket"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Érvénytelen D-Bus üzenet"
-
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr "A régi démon helyettesítése."
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr "Ne indítsa a fuse-t."
-
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "GVFS démon"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr "A GVFS elsődleges démona"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:74
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:76 ../programs/gvfs-cat.c:165 ../programs/gvfs-cat.c:178
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:388 ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:133 ../programs/gvfs-open.c:146
-#: ../programs/gvfs-save.c:165 ../programs/gvfs-tree.c:253
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "További információkért adja ki a következő parancsot: „%s --help”."
-
-#: ../daemon/mount.c:432
-msgid "Invalid arguments from spawned child"
-msgstr "Az elindított gyermek érvénytelen argumentumokat adott"
-
-#: ../daemon/mount.c:731
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Az automatikus csatolás meghiúsult: %s"
-
-#: ../daemon/mount.c:776
-msgid "The specified location is not mounted"
-msgstr "A megadott hely nincs csatolva"
-
-#: ../daemon/mount.c:781
-msgid "The specified location is not supported"
-msgstr "A megadott hely nem támogatott"
-
-#: ../daemon/mount.c:944
-msgid "Location is already mounted"
-msgstr "A hely már csatolva van"
-
-#: ../daemon/mount.c:952
-msgid "Location is not mountable"
-msgstr "A hely nem csatolható"
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:148
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:162
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:165
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:168
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../hal/ghaldrive.c:174
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../hal/ghaldrive.c:180
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:186
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s meghajtó"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:192
-#, c-format
-msgid "%s Drive"
-msgstr "%s meghajtó"
-
-#: ../hal/ghaldrive.c:196
-msgid "Floppy Drive"
-msgstr "Hajlékonylemezes meghajtó"
-
-#: ../hal/ghaldrive.c:202
-msgid "Software RAID Drive"
-msgstr "Szoftveres RAID meghajtó"
-
-#: ../hal/ghaldrive.c:204
-msgid "USB Drive"
-msgstr "USB meghajtó"
-
-#: ../hal/ghaldrive.c:206
-msgid "ATA Drive"
-msgstr "ATA meghajtó"
-
-#: ../hal/ghaldrive.c:208
-msgid "SCSI Drive"
-msgstr "SCSI meghajtó"
-
-#: ../hal/ghaldrive.c:210
-msgid "FireWire Drive"
-msgstr "FireWire meghajtó"
-
-#: ../hal/ghaldrive.c:214
-msgid "Tape Drive"
-msgstr "Szalagos meghajtó"
-
-#: ../hal/ghaldrive.c:216
-msgid "CompactFlash Drive"
-msgstr "CompactFlash meghajtó"
-
-#: ../hal/ghaldrive.c:218
-msgid "MemoryStick Drive"
-msgstr "MemoryStick meghajtó"
-
-#: ../hal/ghaldrive.c:220
-msgid "SmartMedia Drive"
-msgstr "SmartMedia meghajtó"
-
-#: ../hal/ghaldrive.c:222
-msgid "SD/MMC Drive"
-msgstr "SD/MMC meghajtó"
-
-#: ../hal/ghaldrive.c:224
-msgid "Zip Drive"
-msgstr "Zip meghajtó"
-
-#: ../hal/ghaldrive.c:226
-msgid "Jaz Drive"
-msgstr "Jaz meghajtó"
-
-#: ../hal/ghaldrive.c:228
-msgid "Thumb Drive"
-msgstr "Pen drive"
-
-#: ../hal/ghaldrive.c:231
-msgid "Mass Storage Drive"
-msgstr "Tömeges tárolómeghajtó"
-
-#: ../hal/ghaldrive.c:730
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Az adathordozó kiadása meghiúsult, mivel néhány kötete foglalt."
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "CD-ROM Disc"
-msgstr "CD-ROM lemez"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "Blank CD-ROM Disc"
-msgstr "Üres CD-ROM lemez"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "CD-R Disc"
-msgstr "CD-R lemez"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "Blank CD-R Disc"
-msgstr "Üres CD-R lemez"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "CD-RW Disc"
-msgstr "CD-RW lemez"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "Blank CD-RW Disc"
-msgstr "Üres CD-RW lemez"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM lemez"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "Blank DVD-ROM Disc"
-msgstr "Üres DVD-ROM lemez"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM lemez"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "Blank DVD-RAM Disc"
-msgstr "Üres DVD-RAM lemez"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "DVD-RW Disc"
-msgstr "DVD-RW lemez"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "Blank DVD-RW Disc"
-msgstr "Üres DVD-RW lemez"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "DVD+R Disc"
-msgstr "DVD+R lemez"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "Blank DVD+R Disc"
-msgstr "Üres DVD+R lemez"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "DVD+RW Disc"
-msgstr "DVD+RW lemez"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "Blank DVD+RW Disc"
-msgstr "Üres DVD+RW lemez"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL lemez"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "Blank DVD+R DL Disc"
-msgstr "Üres DVD+R DL lemez"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray lemez"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blank Blu-Ray Disc"
-msgstr "Üres Blu-Ray lemez"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R lemez"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blank Blu-Ray R Disc"
-msgstr "Üres Blu-Ray R lemez"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW lemez"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Üres Blu-Ray RW lemez"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "HD DVD Disc"
-msgstr "HD DVD lemez"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "Blank HD DVD Disc"
-msgstr "Üres HD DVD lemez"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R lemez"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "Blank HD DVD-R Disc"
-msgstr "Üres HD DVD-R lemez"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW lemez"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "Blank HD DVD-RW Disc"
-msgstr "Üres HD DVD-RW lemez"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "MO Disc"
-msgstr "MO lemez"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "Blank MO Disc"
-msgstr "Üres MO lemez"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Disc"
-msgstr "Lemez"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Blank Disc"
-msgstr "Üres lemez"
-
-#: ../hal/ghalmount.c:368
-#, c-format
-msgid "%.1f kB Media"
-msgstr "%.1f kB adathordozó"
-
-#: ../hal/ghalmount.c:373
-#, c-format
-msgid "%.1f MB Media"
-msgstr "%.1f MB adathordozó"
-
-#: ../hal/ghalmount.c:378
-#, c-format
-msgid "%.1f GB Media"
-msgstr "%.1f GB adathordozó"
-
-#: ../hal/ghalmount.c:490 ../hal/ghalvolume.c:317
-msgid "Mixed Audio/Data Disc"
-msgstr "Vegyes hang/adatlemez"
-
-#: ../hal/ghalvolume.c:206
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../hal/ghalvolume.c:211
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../hal/ghalvolume.c:216
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:305
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s titkosított adatok"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:328
-#, c-format
-msgid "%s Media"
-msgstr "%s adathordozó"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: hiba a fájl megnyitásakor: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, hiba a szabványos kimenetre íráskor"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: hiba a következő olvasásakor: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: hiba a következő lezárásakor: %s\n"
-
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "HELY... – HELYEK összefűzése a szabványos kimenetre."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"A helyeken található fájlok összefűzése és kiírása a szabványos kimenetre. A "
-"hagyományos cat segédprogramhoz hasonlóan működik, de helyi fájlok helyett "
-"gvfs helyeket használ: megadható például összefűzési helyként a smb://"
-"kiszolgáló/erőforrás/fájl.txt."
-
-#: ../programs/gvfs-cat.c:150
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Megjegyzés: irányítsa keresztül a cat programon, ha annak formázási "
-"lehetőségeire van szükség, mint például a -n, -T vagy hasonlók."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:176 ../programs/gvfs-open.c:144
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: hiányzó helyek"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: hiba a hely megnyitásakor: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: hiba az alkalmazás indításakor: %s\n"
-
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr "FÁJLOK... – FÁJLOK megnyitása a bejegyzett alkalmazással."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"A fájlok megnyitása az adott fájltípus kezelésére bejegyzett alapértelmezett "
-"alkalmazással."
-
diff --git a/po/it.po b/po/it.po
deleted file mode 100644
index 8a0f5135..00000000
--- a/po/it.po
+++ /dev/null
@@ -1,1659 +0,0 @@
-# Italian translation for gvfs.
-# Copyright (C) 2007-2008, Free Software Foundation, Inc.
-# This file is distributed under the same license as the gvfs package.
-# Luca Ferretti <elle.uca@libero.it>, 2007-2008.
-#
-#
-# Da glib/gio
-# * seek --> posizionamento
-# * stream --> lasciato come tale, cfr
-# http://library.gnome.org/devel/gio/stable/streaming.html
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-14 12:50+0200\n"
-"PO-Revision-Date: 2008-09-14 19:20+0200\n"
-"Last-Translator: Luca Ferretti <elle.uca@libero.it>\n"
-"Language-Team: Italian <tp@lists.linux.it>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "Operazione non supportata, file su mount differenti"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Valore di ritorno non valido da get_info"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Valore di ritorno non valido da query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Impossibile ottenere il descrittore di file dello stream"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "Valore di ritorno non valido da open"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "Impossibile ottenere il descrittore di file dello stream"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Valore di ritorno non valido da call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Valore di ritorno non valido da get_filesystem_info"
-
-# corretta e pessima traduzione, ma in fondo quando vuoi
-# che vada a comparire all'utente??? speriamo mai...
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Impossibile trovare il mount includente"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Nome di file «%s» non valido"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Valore di ritorno non valido da query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "Valore di ritorno non valido da monitor_dir"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "Valore di ritorno non valido da monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Errore nel protocollo dello stream: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Fine dello stream"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "L'operazione è stata annullata"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Posizionamento non supportato sullo stream"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "L'operazione di interrogazione informazioni non è supportata"
-
-# GNOME-2-24
-# spero che sia così...
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Informazioni di interrogazione non supportate sullo stream"
-
-# leggendo il codice è proprio le informazioni
-# sull'oggetto GMount
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Errore durante il recupero delle informazioni sul mount: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Errore nel connettersi al demone. %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Errore nel creare il socket. %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Errore nel connettersi al socket. %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Formato informazioni file non valido"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Contenuto elenco informazioni attributi non valido"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Errore nel connettersi a D-Bus. %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Servizio file system %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Errore. %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Uso: %s --spawner ID-DBUS PERCORSO_OGGETTO"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Uso: %s CHIAVE=VALORE CHIAVE=VALORE ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Nessun tipo di mount specificato"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "punto di mount per %s già in esecuzione"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "errore nell'avviare il demone di mount"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ su %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Nessun nome host specificato"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Specifica di mount non valida"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Il file non esiste"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Il file non è una directory"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Masterizzazione"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Impossibile creare la directory temporanea"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Nessun file o directory"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Directory non vuota"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "Impossibile copiare file sulla directory"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Creazione CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Il file esiste"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Operazione non supportata dal backend"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "Nessun file o directory nel percorso di destinazione"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "Impossibile copiare la directory sulla directory"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "Il file di destinazione esiste"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "Impossibile copiare la directory ricorsivamente"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Non supportato"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Impossibile connettersi al bus di sistema"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Impossibile creare il contesto libhal"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Impossibile inizializzare libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Nessuna unità specificata"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Impossibile trovare l'unità %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "L'unità %s non contiene file audio"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "Mount cdda su %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Disco audio"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Il file system è occupato: %d file aperto"
-msgstr[1] "Il file system è occupato: %d file aperti"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Nessun file %s sull'unità %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Errore da \"paranoia\" sull'unità %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Errore nel posizionarsi nello stream sull'unità %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Nessun file"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Il file non esiste o non è una traccia audio"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Servizio file system CD audio"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Computer"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "File system"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "Impossibile aprire la directory"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Impossibile aprire il file montabile"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Errore interno: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Impossibile montare il file"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Nessun supporto nell'unità"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Non è un file montabile"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Impossibile smontare il file"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Impossibile espellere il file"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Errore HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Impossibile analizzare la risposta"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Risposta vuota"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Replica inattesa dal server"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Risposta non valida"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "Condivisione WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Inserire la password per %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Inserire la password per il proxy"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Non è una condivisione WebDAV abilitata"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV su %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Impossibile creare la richiesta"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Il file di destinazione esiste già"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Il file è stato modificato dall'esterno"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Creazione del file di backup non riuscita"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Impossibile monitorare file o directory."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Rete"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Gli account non sono supportati"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "L'host ha chiuso la connessione"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Impossibile aprire la connessione dati. Forse è impedito dal proprio "
-"firewall."
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Connessione dati chiusa"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Operazione non riuscita"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Niente spazio rimasto sul server"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Operazione non supportata"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Permesso negato"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Tipo di pagina sconosciuta"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Nome di file non valido"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Replica non valida"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "trasmissione interrotta"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Impossibile connettersi all'host"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Inserire la password ftp per %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Dialogo password annullato"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp su %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp come %s su %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Il file è una directory"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "i backup non sono ancora supportati"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "nome file troppo lungo"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Nome file di destinazione non valido"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: la directory o il file esiste"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: nessun file o directory"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: nome di file non valido"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: non supportato"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Fotocamera digitale (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Fotocamera %s"
-
-# usato lettore perché tutti vendor
-# hanno "lettori mp3" nei cataloghi
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Lettore audio %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Fotocamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Lettore audio"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Recupero dell'elenco cartelle non riuscito"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Nessun dispositivo specificato"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Impossibile creare il contesto gphoto2"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Errore nel creare la fotocamera"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Errore nel caricare le informazioni sul dispositivo"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Errore nel consultare le informazioni sul dispositivo"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Errore nell'ottenere le informazioni sul dispositivo"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Errore nell'impostare la porta di comunicazione della fotocamera"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Errore nell'inizializzare la fotocamera"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "Mount gphoto2 su %s"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Nessuna fotocamera specificata"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Errore nel creare l'oggetto file"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Errore nell'ottenere il file"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Errore nell'ottenere i dati dal file"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Errore nel posizionarsi nello stream sulla fotocamera «%s»"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Non è una directory"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Recupero dell'elenco dei file non riuscito"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Errore nel creare la directory"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Il nome esiste già"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Nuovo nome troppo lungo"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Errore nel rinominare la directory"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Errore nel rinominare il file"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "La directory «%s» non è vuota"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Errore nell'eliminare la directory"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Errore nell'eliminare il file"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "Impossibile scrivere nella directory"
-
-# GNOME-2-24
-# non sono molto sicuro di queste tre con append...
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Impossibile allocare un nuovo file su cui accodare"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Impossibile leggere il file su cui accodare"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Impossibile ottenere i dati del file su cui accodare"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Errore nello scrivere il file"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Non supportato (non è la stessa directory)"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Non supportato (orig è directory, dest è directory)"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Non supportato (orig è directory, dest è file esistente)"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Non supportato (orig è file, dest è directory)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Errore client HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (codifica non valida)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Notifica delle directory non supportata"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Rete Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Rete locale"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Monitor rete locale"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s su %s"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Connessione al dispositivo persa"
-
-# GNOME-2-24
-# a leggere i sorgenti sembra appaia solo per nokia 3650
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Il dispositivo richiede un aggiornamento software"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "Il programma ssh è uscito in modo inatteso"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Nome host sconosciuto"
-
-# Nota: instradamento è la traduzione glossariata
-# per route. Cfr http://tp.linux.it/glossario.html
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Nessun instradamento verso l'host"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Connessione rifiutata dal server"
-
-# GNOME-2-24
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Verifica della chiave dell'host non riuscita"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Impossibile avviare il programma ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Impossibile avviare il programma ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Tempo scaduto durante l'accesso"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Inserire la frase d'accesso per la chiave"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Inserire la password"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Impossibile inviare la password"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Accedi comunque"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Annulla accesso"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"L'identità del computer remoto (%s) è sconosciuta.\n"
-"Ciò accade quando si accede a un computer per la prima volta.\n"
-"\n"
-"L'identità inviata dal computer remoto è %s. Per essere assolutamente certi "
-"che sia sicuro continuare, contattare l'amministratore di sistema."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Dialogo di accesso annullato"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Impossibile inviare la conferma dell'identità dell'host"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Errore di protocollo"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp su %s"
-
-# NdT *un comando ssh supportato*
-# Controllato nel codice: prova diversi programmi tra cui
-# OpenSSH e SunSSH, ecco perché usato *un comando*
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Impossibile trovare un comando ssh supportato"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Fallimento"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Ricevuta replica non valida"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Errore nel creare il file di backup: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Impossibile creare il file temporaneo"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Impossibile spostare la directory sulla directory"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Richiesta password per condivisione %s su %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Errore interno (%s)"
-
-# GNOME-2-24
-# NdT: Montaggio?? Montatura?? Montamento??
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Mount della condivisione Windows non riuscito"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Tipo di posizionamento non supportato"
-
-# GNOME-2-24
-# Nota: probabilmente dopo i : c'è una frase che inizia per maiuscola
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Creazione del file di backup non riuscita. %s"
-
-# Nota: probabilmente dopo i : c'è una frase che inizia per maiuscola
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Errore nell'eliminare il file. %s"
-
-# Nota: probabilmente dopo i : c'è una frase che inizia per maiuscola
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Errore nello spostare il file. %s"
-
-# Nota: probabilmente dopo i : c'è una frase che inizia per maiuscola
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Errore nel rimuovere il file di destinazione. %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Impossibile spostare la directory ricorsivamente"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Servizio file system condivisioni Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Condivisioni Windows su %s"
-
-# aggiunto oggetto
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Il file non è un oggetto montabile"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Non è un file normale"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Servizio file system rete Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Cestino"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (nel cestino)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Impossibile eliminare il cestino"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Notifica della directory cestino non supportata"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Tipo di backend non valido"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Errore nell'inviare il fd: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Collegamenti simbolici non supportati dal backend"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Messaggio dbus non valido"
-
-# opzione --replace di gvfsd
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Sostituisce il vecchio demone."
-
-# opzione --no-fuse di gvfsd
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Non avvia fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Demone GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Demone principale per GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Provare \"%s --help\" per maggiori informazioni."
-
-# NdT. OK, sembra la bibbia....
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Argomenti non validi per il figlio generato"
-
-# GNOME-2-24
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Mount automatico non riuscito: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "La posizione specificata non è montata"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "La posizione specificata non è supportata"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "La posizione è già montata"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "La posizione non è montabile"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Unità %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Unità %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Unità floppy"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Unità RAID software"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Unità USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Unità ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Unità SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Unità FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Unità a nastro"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Unità CompactFlash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Unità MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Unità SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Unità SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Unità Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Unità Jaz"
-
-# in gnome-vfs era Pen Drive, tradotto Pendrive...
-# nella notazione HAL è 'flashkey', praticamente, credo
-# ogni chiavetta USB??
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Pendrive"
-
-# In base al codice, ogni drive che non è
-# riconosciuto come uno dei precedenti.
-#
-# Tolto "di massa" perché, dai, è inutile nella
-# traduzione di qualcosa che appare all'utente.
-#
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Unità di memorizzazione"
-
-# GNOME-2-24
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Espulsione del supporto non riuscita: uno o più volumi sul supporto sono "
-"occupati."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-# misto e ibrido sono diversi
-#
-# http://en.wikipedia.org/wiki/Hybrid_disc
-# http://en.wikipedia.org/wiki/Mixed_mode
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "Disco misto audio/dati"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "Supporto da %s"
-
-# Rigirato. Se qualcuno ha un drive cifato con LUKS
-# mi faccia sapere se funziona...
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s di dati cifrati"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Disco CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Disco CD-ROM vuoto"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Disco CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Disco CD-R vuoto"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Disco CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Disco CD-RW vuoto"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Disco DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Disco DVD-ROM vuoto"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Disco DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Disco DVD-RAM vuoto"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Disco DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Disco DVD-RW vuoto"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Disco DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Disco DVD+R vuoto"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Disco DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Disco DVD+RW vuoto"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Disco DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Disco DVD+R DL vuoto"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Disco Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Disco Blu-Ray vuoto"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Disco Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Disco Blu-Ray R vuoto"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Disco Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Disco Blu-Ray RW vuoto"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Disco DVD HD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Disco DVD HD vuoto"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Disco DVD-R HD"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Disco DVD-R HD vuoto"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Disco DVD-RW HD"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Disco DVD-RW HD vuoto"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Disco MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Disco MO vuoto"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Disco"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Disco vuoto"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: errore nell'aprire il file. %s\n"
-
-# GNOME-2-24
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, errore nello scrivere su standard output"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: errore nel leggere. %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: errore nel chiudere. %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "POSIZIONE... - concatena le POSIZIONI sullo standard output."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Concatena file presso posizioni e li stampa sullo standard output. Opera "
-"come la tradizionale utilità cat, ma usando posizioni gvfs invece di file "
-"locali: per esempio è possibile usare qualcosa come smb://server/risorsa/"
-"file.txt come posizione da concatenare."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Nota: mettere in pipe con cat se si necessita delle opzioni di formattazione "
-"come -n, -T o altro."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: posizioni mancanti"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: errore nell'aprire la posizione. %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: errore nel lanciare l'applicazione. %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILE... - apre i FILE con l'applicazione registrata."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Apre i file con l'applicazione predefinita registrata per gestire quel tipo "
-"di file."
-
-# GNOME-2-24
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "Il file system è occupato: %d file aperti"
-
-# GNOME-2-24
-#~ msgid "Error listing folders"
-#~ msgstr "Errore nell'elencare le cartelle"
-
-#~ msgid "File unavailable"
-#~ msgstr "File non disponibile"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "Supporto da %.1f kB"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "Supporto da %.1f MB"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "Supporto da %.1f GB"
-
-#~ msgid "File does not exist"
-#~ msgstr "Il file non esiste"
-
-#~ msgid "Invalid reply from server."
-#~ msgstr "Replica non valida dal server."
diff --git a/po/ja.po b/po/ja.po
deleted file mode 100644
index 2c88ba0f..00000000
--- a/po/ja.po
+++ /dev/null
@@ -1,1540 +0,0 @@
-# gvfs ja.po.
-# Copyright (C) 2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gvfs package.
-# Takeshi AIHANA <takeshi.aihana@gmail.com>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs trunk\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-24 15:24+0900\n"
-"PO-Revision-Date: 2008-08-24 15:22+0900\n"
-"Last-Translator: Takeshi AIHANA <takeshi.aihana@gmail.com>\n"
-"Language-Team: Japanese <takeshi.aihana@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "サポートしていない操作です (ファイルが別々のマウント先にあります)"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info() の返り値が間違っています"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info() の返り値が間違っています"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "ストリーム・ファイルのディスクリプタを取得できませんでした"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "open() の返り値が間違っています"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "ストリーム・ファイルのディスクリプタを取得しませんでした"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "call() の返り値が間違っています"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info() の返り値が間違っています"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "エンクローズしているマウントが見つかりませんでした"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "ファイル名が間違っています: %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info() の返り値が間違っています"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir() の返り値が間違っています"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file() の返り値が間違っています"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "ストリームのプロトコルでエラー: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "ストリームの最後"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "操作がキャンセルされた"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "ストリーム上のシークはサポートしていません"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "query_info の操作はサポートしていません"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "ストリーム上での query_info はサポートしていません"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "マウント情報を取得する際にエラー: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "デーモンに接続する際にエラー: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "ソケットを生成する際にエラー: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "ソケットに接続する際にエラー: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "ファイル情報の書式が間違っています"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "属性情報のリストにあるデータが間違っています"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "D-Bus に接続する際にエラー: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s のファイルシステム・サービス"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "エラー: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "用法: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "用法: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "マウントの種類が指定されていません"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s 用のマウントポイントは既に使用中です"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "マウント・デーモンお起動する際にエラー"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "%s の / (ルート)"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "ホスト名が指定されていません"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "マウントの仕様が間違っています"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "ファイルは存在しません"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "そのファイルはディレクトリではありません"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Burn"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "作業ディレクトリを生成できません"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendgphoto2.c:2690
-#, c-format
-msgid "No such file or directory"
-msgstr "そのようなファイルまたはディレクトリは存在しません"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "ディレクトリが空ではありません"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "ファイルをディレクトリの外にコピーできません"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD クリエータ"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2763
-msgid "File exists"
-msgstr "ファイルが存在しています"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "転送先のパスに、そのようなファイルまたはディレクトリは存在しません"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "ディレクトリをディレクトリの外にコピーできません"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "転送先にファイルが存在します"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "ディレクトリを再帰的にコピーできません"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2348
-#: ../daemon/gvfsbackendgphoto2.c:2556 ../daemon/gvfsbackendgphoto2.c:2651
-#: ../daemon/gvfsbackendgphoto2.c:2742
-msgid "Not supported"
-msgstr "サポートしていません"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "システム・バスに接続できません"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "libhal のコンテキストを生成できません"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "libhal を初期化できません"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "ドライブが指定されていません"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "%s というドライブは見つかりません"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "%s というドライブには楽曲ファイルはありません"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda が %s にマウントしました"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "オーディオ・ディスク"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "ファイルシステムが使用中です: %d 個のファイルがオープンしたままです"
-msgstr[1] "ファイルシステムが使用中です: %d 個のファイルがオープンしたままです"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "%s というファイルは %s というドライブに存在しません"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "ドライブ (%s) の 'paranoia'でエラー"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "ドライブ (%s) のストリームをシークする際にエラー"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1711
-#, c-format
-msgid "No such file"
-msgstr "そのようなファイルは存在しません"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "そのファイルは存在しないか、もしくはオーディオ・トラックではありません"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "オーディオ CD のファイルシステム・サービス"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "コンピュータ"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "ファイルシステム"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1703
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "ディレクトリをオープンできません"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "マウント可能なファイルをオープンできません"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "システム内部のエラー: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "ファイルをマウントできません"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "ドライブにメディアが挿入されていません"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "マウント可能なファイルは存在しません"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "ファイルをアンマウントできません"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "ファイルを取り出せません"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP のエラー: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "応答メッセージを解析できませんでした"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "応答メッセージが空です"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "サーバからの想定外のリプライです"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "応答メッセージが間違っています"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "WebDAV 共有"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "%s のパスワードを入力して下さい"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "プロキシのパスワードを入力して下さい"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr "WebDAV 共有は利用できません"
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "%s での WebDAV 共有"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "要求メッセージを生成できませんでした"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "対象のファイルが既に存在しています"
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "そのファイルは他のプロセスで変更されました"
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "バックアップ・ファイルの生成に失敗しました"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "ファイルまたはディレクトリを監視できません"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "ネットワーク"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "アカウントがサポートされていません"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "ホストが接続を閉じました"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"データの接続を開始できません (おそらくファイヤーウォールが邪魔していると思わ"
-"れます)"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "データの接続を閉じました"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "操作が失敗しました"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "サーバの容量が足りません"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "サポートしていない操作です"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "権限がありません"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "ページの種類が不明です"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "ファイル名が間違っています"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "リプライが間違っています"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "送信エラー"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "ホストに接続できませんでした"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "FTP@%s のパスワードを入力指定下さい"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "パスワード・ダイアログがキャンセルしました"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "%s での ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "%s@%s での ftp"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "ファイルはディレクトリです"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "バックエンドは未だサポートしていません"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "ファイル名が長すぎます"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "転送先のファイル名が間違っています"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: ディレクトリまたはファイルが存在します"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: そのようなファイルまたはディレクトリは存在しません"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: ファイル名が間違っています"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: 未サポートです"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "デジカメ (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s 製のカメラ"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s 製のオーディオ・プレイヤー"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "カメラ"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "オーディオ・プレイヤー"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2008
-msgid "Failed to get folder list"
-msgstr "フォルダの一覧を取得できませんでした"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "デバイスが指定されていません"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "gphoto2 のコンテキストを生成できません"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "カメラ・オブジェクトを生成できません"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482 ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading device information"
-msgstr "デバイス情報を読み込む際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up device information"
-msgstr "デバイス情報を検索する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting device information"
-msgstr "デバイス情報を取得する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting up camera communications port"
-msgstr "カメラに接続するポートを設定する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "カメラのオブジェクトを初期化する際にエラー"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 が %s にマウントしました"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "カメラが指定されていません"
-
-#: ../daemon/gvfsbackendgphoto2.c:1719
-msgid "Error creating file object"
-msgstr "ファイル・オブジェクトを生成する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:1733
-msgid "Error getting file"
-msgstr "ファイルを取得する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:1742
-msgid "Error getting data from file"
-msgstr "ファイルのデータを取得する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:1836 ../daemon/gvfsbackendgphoto2.c:3010
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "カメラ (%s) のストリームを検索する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:1975 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "ディレクトリではありません"
-
-#: ../daemon/gvfsbackendgphoto2.c:2071
-msgid "Failed to get file list"
-msgstr "ファイルの一覧を取得できませんでした"
-
-#: ../daemon/gvfsbackendgphoto2.c:2360
-msgid "Error creating directory"
-msgstr "ディレクトリを生成する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:2568
-msgid "Name already exists"
-msgstr "既に存在しています"
-
-#: ../daemon/gvfsbackendgphoto2.c:2579 ../daemon/gvfsbackendgphoto2.c:3200
-msgid "New name too long"
-msgstr "新しい名前が長すぎます"
-
-#: ../daemon/gvfsbackendgphoto2.c:2589 ../daemon/gvfsbackendgphoto2.c:3211
-msgid "Error renaming dir"
-msgstr "ディレクトリ名を変更する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:2601 ../daemon/gvfsbackendgphoto2.c:3223
-msgid "Error renaming file"
-msgstr "ファイル名を変更する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:2664
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "ディレクトリ (%s) は空ではありません"
-
-#: ../daemon/gvfsbackendgphoto2.c:2675
-msgid "Error deleting directory"
-msgstr "ディレクトリを削除する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:2700
-msgid "Error deleting file"
-msgstr "ファイルを削除する際にエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:2752
-msgid "Can't write to directory"
-msgstr "ディレクトリに書き込めません"
-
-#: ../daemon/gvfsbackendgphoto2.c:2799
-msgid "Cannot allocate new file to append to"
-msgstr "追加先の新しいファイルを確保できません"
-
-#: ../daemon/gvfsbackendgphoto2.c:2813
-msgid "Cannot read file to append to"
-msgstr "追加先のファイルを読み込めません"
-
-#: ../daemon/gvfsbackendgphoto2.c:2823
-msgid "Cannot get data of file to append to"
-msgstr "追加先のファイルのデータを取得できません"
-
-#: ../daemon/gvfsbackendgphoto2.c:3109
-msgid "Error writing file"
-msgstr "ファイルの書き込みでエラー"
-
-#: ../daemon/gvfsbackendgphoto2.c:3156
-msgid "Not supported (not same directory)"
-msgstr "未サポートです (同じディレクトリではありません)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3168
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "未サポートです (転送元と転送先の双方がディレクトリ)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3176
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "未サポートです (転送元がディレクトリで転送先がファイル)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3188
-msgid "Not supported (src is file, dst is dir)"
-msgstr "未サポートです (転送元がファイルで転送先がディレクトリ)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP クライアントのエラー: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (エンコーディングが間違っています)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "ディレクトリ通知はサポートしていません"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows ネットワーク"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "ローカル・ネットワーク"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "ネットワーク・ロケーション・モニタ"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s@%s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "デバイスへの接続が失われました"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "デバイス・ソフトウェアを更新して下さい"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh プログラムが突然終了しました"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "ホスト名が不明です"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "ホストへの経路がありません"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "サーバが接続を拒否しました"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "ホストの鍵を検証できませんでした"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "ssh プログラムに fork() できませんでした"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ssh プログラムに fork() できませんでした: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "ログインがタイムアウトしました"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "鍵のパスフレーズを入力して下さい"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "パスワードを入力して下さい"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "パスワードを送信できません"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "とにかくログインする"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "ログインをキャンセルする"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"リモートのコンピュータ (%s) を一意に識別できません\n"
-"(これは、初めてコンピュータにログインした時に発生します)\n"
-"\n"
-"リモートのコンピュータが送信してきた ID は %s です\n"
-"この ID のコンピュータがセキュリティ的に安全であるか\n"
-"確認したい場合は、システム管理者に連絡してみて下さい"
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "ログイン・ダイアログがキャンセルしました"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "ホストの身元を確認できません"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "プロトコルのエラーです"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "%s での sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "ssh コマンドが見つかりません"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "失敗"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "受信したリプライが間違っています"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "バックアップ・ファイルを生成する際にエラー: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "作業ファイルを生成できません"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "ディレクトリをディレクトリの外に移動できません"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "%2$s で %1$s を共有するにはパスワードが必要です"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "内部エラー (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Windows 共有をマウントできませんでした"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "サポートしていないシークの種類です"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "バックアップ・ファイルの生成に失敗しました: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "ファイルを削除する際にエラー: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "ファイルを移動する際にエラー: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "対象のファイルを削除する際にエラー: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "ディレクトリを再帰的に移動できません"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows 共有のファイルシステム・サービス"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windows 共有@%s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "そのファイルはマウントできません"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "通常のファイルではありません"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windows ネットワークのファイルシステム・サービス"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "ゴミ箱"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (ゴミ箱の中)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "ゴミ箱は削除できません"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "ゴミ箱はディレクトリ通知をサポートしていません"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "バックエンドの種類が間違っています"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "fd を送信する際にエラー: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "バックエンドでサポートしていない操作です"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "バックエンドはシンボリック・リンクをサポートしていません"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "D-Bus のメッセージが間違っています"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "古いデーモンを置きかえる"
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "fuse を起動しない"
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS デーモン"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GVFS のメイン・デーモン"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "詳細は \"%s --help\" の出力を確認して下さい"
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "fork() した子プロセスの引数が間違っています"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "自動マウントに失敗しました: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "指定した場所はマウントされていません"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "指定した場所はサポートされていません"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "その場所は既にマウントされています"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "その場所はマウントできません"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s ドライブ"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "フロッピー・ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "ソフトウェア RAID ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "テープ・ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Thumb ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "マス・ストレージ・ドライブ"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"メディアを取り出せませんでした (メディアで1つ以上のボリュームが使用中です)"
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "楽曲とデータの混合ディスク"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "%s のメディア"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s の暗号化されたデータ"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM ディスク"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "空の CD-ROM ディスク"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R ディスク"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "空の CD-R ディスク"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW ディスク"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "空の CD-RW ディスク"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM ディスク"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "空の DVD-ROM ディスク"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM ディスク"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "空の DVD-RAM ディスク"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW ディスク"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "空の DVD-RW ディスク"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R ディスク"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "空の DVD+R ディスク"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW ディスク"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "空の DVD+RW ディスク"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL ディスク"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "空の DVD+R DL ディスク"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray ディスク"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "空の Blu-Ray ディスク"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R ディスク"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "空の Blu-Ray R ディスク"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW ディスク"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "空の Blu-Ray RW ディスク"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD ディスク"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "空の HD DVD ディスク"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R ディスク"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "空の HD DVD-R ディスク"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW ディスク"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "空の HD DVD-RW ディスク"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO ディスク"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "空の MO ディスク"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "ディスク"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "空のディスク"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: ファイルをオープンする際にエラー: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s (標準出力に出力する際にエラー)"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: 読み込む際にエラー: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:クローズする際にエラー: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATIONs... - 複数の URI を連結して標準出力に出力する"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"指定した場所 (URI) にある複数のファイルを連結して標準出力に表示する\n"
-"基本的に UNIX の cat コマンドのような動作をするが\n"
-"指定できる URI はローカルのファイルではなく、gvfs 経由で\n"
-"指定できる URI である\n"
-"例: smb://server/resource/file.txt"
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"注意: -n や -T などの書式を変更するオプションを指定した場合\n"
-" ローカルの cat コマンドにパイプで渡すだけである"
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: URI を指定して下さい"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: URI をオープンする際にエラー: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: アプリケーションを起動する際にエラー: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - 登録したアプリで複数の FILE を開く"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"指定したファイルを扱うデフォルトのアプリケーションで\n"
-"それらのファイルを開く"
diff --git a/po/ko.po b/po/ko.po
deleted file mode 100644
index 34a133c1..00000000
--- a/po/ko.po
+++ /dev/null
@@ -1,1371 +0,0 @@
-# gvfs korean translation.
-# This file is distributed under the same license as the gvfs package.
-# Young-Ho Cha <ganadist@gmail.com>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs 0.1.12\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-07 09:54+0900\n"
-"PO-Revision-Date: 2008-03-07 09:58+0900\n"
-"Last-Translator: Young-Ho Cha <ganadist@gmail.com>\n"
-"Language-Team: GNOME Korea <gnome-kr-hackers@lists.kldp.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: ../client/gdaemonfile.c:464 ../client/gdaemonfile.c:1867
-msgid "Operation not supported, files on different mounts"
-msgstr "동작이 지원되지 않습니 파일들이 각각 다른 다"
-
-#: ../client/gdaemonfile.c:758
-msgid "Invalid return value from get_info"
-msgstr "get_info에서 잘못된 반환값"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from query_info"
-msgstr "query_info에서 잘못된 반환값"
-
-#: ../client/gdaemonfile.c:865
-msgid "Couldn't get stream file descriptor"
-msgstr "파일 기술자 스트림을 얻을 수 없습니다"
-
-#: ../client/gdaemonfile.c:897 ../client/gdaemonfile.c:967
-#: ../client/gdaemonfile.c:1026 ../client/gdaemonfile.c:1085
-#: ../client/gdaemonfile.c:1147
-msgid "Invalid return value from open"
-msgstr "열기에서 잘못된 반환값"
-
-#: ../client/gdaemonfile.c:977 ../client/gdaemonfile.c:1036
-#: ../client/gdaemonfile.c:1095 ../client/gdaemonfile.c:1157
-msgid "Didn't get stream file descriptor"
-msgstr "파일 기술자 스트림을 얻을 수 없습니다"
-
-#: ../client/gdaemonfile.c:1209 ../client/gdaemonfile.c:1226
-msgid "Invalid return value from call"
-msgstr "호출에서 잘못된 반환값"
-
-#: ../client/gdaemonfile.c:1505
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info에서 잘못된 반환값"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1549
-msgid "Could not find enclosing mount"
-msgstr "둘러싸인 마운트를 찾을 수 없습니다"
-
-#: ../client/gdaemonfile.c:1579
-#, c-format
-msgid "Invalid filename %s"
-msgstr "잘못된 파일이름 %s"
-
-#: ../client/gdaemonfile.c:1621
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info에서 잘못된 반환값"
-
-#: ../client/gdaemonfile.c:2012
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir에서 잘못된 반환값"
-
-#: ../client/gdaemonfile.c:2061
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file에서 잘못된 반환값"
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "스트림 프로토콜의 오류: %s"
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr "스트림의 끝"
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendobexftp.c:774
-#: ../daemon/gvfsbackendobexftp.c:795 ../daemon/gvfsbackendobexftp.c:914
-#: ../daemon/gvfsbackendobexftp.c:1051 ../daemon/gvfsbackendobexftp.c:1115
-#: ../daemon/gvfsbackendobexftp.c:1252 ../daemon/gvfsbackendobexftp.c:1279
-#: ../daemon/gvfsbackendobexftp.c:1338 ../daemon/gvfsbackendobexftp.c:1360
-#: ../daemon/gvfsbackendobexftp.c:1420 ../daemon/gvfsbackendobexftp.c:1439
-#: ../daemon/gvfsbackendsmb.c:1015 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:297
-msgid "Operation was cancelled"
-msgstr "동작이 취소되었습니다"
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr "스트림에서 찾기가 지원되지 않습니다"
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr "정보 잘의 동작이 지원되지 않습니다"
-
-#: ../client/gdaemonvfs.c:731
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "마운트 정보를 얻는 중 오류: %s"
-
-#: ../client/gvfsdaemondbus.c:559 ../client/gvfsdaemondbus.c:946
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "데몬에 연결하는 데 오류: %s"
-
-#: ../common/gsysutils.c:133
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "소켓을 만드는 데 오류: %s"
-
-#: ../common/gsysutils.c:171
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "소켓에 연결하는 데 오류: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "잘못된 파일 정보 형식"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "잘못된 속성 정보 목록 내용"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "D-Bus에 연결하는 데 오류: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s 파일시스템 서비스"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "오류: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "사용법: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "사용법: %s 키=값 키=값 ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "마운트 형식이 지정되지 않았습니다"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s의 마운트 위치에 이미 실행중입니다"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "마운트 데몬 시작하는 데 오류"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr "굽기"
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr "임시 디렉토리를 만들 수 없습니다"
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr "그런 파일이나 디렉토리가 없습니다"
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1804
-msgid "Directory not empty"
-msgstr "디렉토리가 비어있지 않습니다"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr "디렉토리에 파일을 복사할 수 없습니다"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "CD/DVD 굽기"
-
-#: ../daemon/gvfsbackendburn.c:681 ../daemon/gvfsbackendcomputer.c:652
-#: ../daemon/gvfsbackenddnssd.c:393 ../daemon/gvfsbackendftp.c:846
-#: ../daemon/gvfsbackendnetwork.c:637
-#, c-format
-msgid "The file is not a directory"
-msgstr "파일이 디렉토리가 아닙니다"
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "파일이 있습니다"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr "해당 경로에 파일이나 디렉토리가 없습니다"
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr "디렉토리에 디렉토리를 복사할 수 없습니다"
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr "해당 파일이 있습니다"
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr "디렉토리를 되풀이해서 복사할 수 없습니다"
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr "지원되지 않음"
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr "드라이브가 지정되지 않음"
-
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "드라이브 %s(을)를 찾을 수 없습니다"
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "드라이브 %s에 음악 파일이 포함되지 않았습니다"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr "%s의 cdda 마운트"
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:492 ../hal/ghalvolume.c:298 ../hal/ghalvolume.c:319
-#, c-format
-msgid "Audio Disc"
-msgstr "음악 디스크"
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "파일시스템이 사용 중입니다: %d개의 파일이 열림"
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "드라이브 %2$s에 %1$s 같은 파일이 없습니다"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "드라이브 %s에서 'paranoia'의 오류"
-
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "드라이브 %s에서 스트림 찾는데 오류"
-
-#: ../daemon/gvfsbackendcdda.c:818 ../daemon/gvfsbackendgphoto2.c:1695
-#, c-format
-msgid "No such file"
-msgstr "그런 파일이 없습니다"
-
-#: ../daemon/gvfsbackendcdda.c:825 ../daemon/gvfsbackendcomputer.c:573
-#: ../daemon/gvfsbackenddnssd.c:345 ../daemon/gvfsbackendftp.c:1955
-#: ../daemon/gvfsbackendnetwork.c:590 ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:866 ../daemon/gvfsbackendsmbbrowse.c:1037
-#: ../daemon/gvfsbackendsmbbrowse.c:1111
-#, c-format
-msgid "File doesn't exist"
-msgstr "파일이 없습니다"
-
-#: ../daemon/gvfsbackendcdda.c:832
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "파일이 없거나 음악 트랙이 아닙니다."
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr "오디오 CD 파일시스템 서비스"
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr "컴퓨터"
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr "파일시스템"
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendgphoto2.c:1687
-#: ../daemon/gvfsbackendobexftp.c:760 ../daemon/gvfsbackendtrash.c:637
-msgid "Can't open directory"
-msgstr "디렉토리를 열 수 없습니다"
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr "마운트 가능한 파일을 열 수 없습니다"
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr "내부 오류: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:930
-msgid "Can't mount file"
-msgstr "파일을 마운트할 수 없습니다"
-
-#: ../daemon/gvfsbackendcomputer.c:825
-msgid "No media in the drive"
-msgstr "드라이브에 매체가 없습니다"
-
-#: ../daemon/gvfsbackendcomputer.c:882 ../daemon/gvfsbackendcomputer.c:973
-#: ../daemon/gvfsbackendcomputer.c:1073
-msgid "Not a mountable file"
-msgstr "마운트 할 수 없는 파일"
-
-#: ../daemon/gvfsbackendcomputer.c:988
-msgid "Can't unmount file"
-msgstr "파일을 마운트 해제할 수 없습니다"
-
-#: ../daemon/gvfsbackendcomputer.c:1104
-msgid "Can't eject file"
-msgstr "파일을 꺼낼 수 없습니다"
-
-#: ../daemon/gvfsbackenddav.c:269 ../daemon/gvfsbackenddav.c:1289
-#: ../daemon/gvfsbackendhttp.c:220
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP 오류: %s"
-
-#: ../daemon/gvfsbackenddav.c:285
-msgid "Could not parse response"
-msgstr "응답을 분석할 수 없습니다"
-
-#: ../daemon/gvfsbackenddav.c:294
-msgid "Empty response"
-msgstr "비어있는 응답"
-
-#: ../daemon/gvfsbackenddav.c:301
-msgid "Unexpected reply from server"
-msgstr "서버에서 예측하지 못한 응답"
-
-#: ../daemon/gvfsbackenddav.c:944 ../daemon/gvfsbackenddav.c:1421
-#, c-format
-msgid "Response invalid"
-msgstr "잘못된 응답"
-
-#: ../daemon/gvfsbackenddav.c:1087
-msgid "WebDAV share"
-msgstr "웹 공유"
-
-#: ../daemon/gvfsbackenddav.c:1089
-#, c-format
-msgid "Enter password for %s"
-msgstr "%s의 비밀번호를 입력하십시오"
-
-#: ../daemon/gvfsbackenddav.c:1092
-msgid "Please enter proxy password"
-msgstr "프록시 비밀번호를 입력하십시오"
-
-#: ../daemon/gvfsbackenddav.c:1206 ../daemon/gvfsbackendhttp.c:273
-#: ../daemon/gvfsbackendobexftp.c:605 ../daemon/gvfsbackendobexftp.c:616
-#: ../daemon/gvfsbackendsmb.c:595
-msgid "Invalid mount spec"
-msgstr "잘못된 마운트 spec 파일"
-
-#: ../daemon/gvfsbackenddav.c:1293 ../daemon/gvfsbackenddav.c:1297
-msgid "Not a WebDAV enabled share"
-msgstr "웹 공유 디렉토리가 아닙니다"
-
-#: ../daemon/gvfsbackenddav.c:1319
-msgid "WebDAV on %s"
-msgstr "%s의 웹 공유"
-
-#: ../daemon/gvfsbackenddav.c:1377 ../daemon/gvfsbackenddav.c:1448
-msgid "Could not create request"
-msgstr "요청을 만들 수 없습니다"
-
-#: ../daemon/gvfsbackenddav.c:1511 ../daemon/gvfsbackenddav.c:1764
-#: ../daemon/gvfsbackendftp.c:1558 ../daemon/gvfsbackendftp.c:2189
-#: ../daemon/gvfsbackendsmb.c:1701
-#, c-format
-msgid "Target file already exists"
-msgstr "해당 파일이 이미 있습니다"
-
-#: ../daemon/gvfsbackenddav.c:1584 ../daemon/gvfsbackendsftp.c:2662
-#: ../daemon/gvfsbackendsmb.c:983
-msgid "The file was externally modified"
-msgstr "파일이 외부에서 수정되었습니다"
-
-#: ../daemon/gvfsbackenddav.c:1615 ../daemon/gvfsbackendsmb.c:1021
-#: ../daemon/gvfsbackendsmb.c:1718
-msgid "Backup file creation failed"
-msgstr "예비 파일 만드는데 실패했습니다"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "파일이나 디렉토리를 감시할 수 없습니다."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "네트워크"
-
-#: ../daemon/gvfsbackendftp.c:224
-msgid "Accounts are unsupported"
-msgstr "계정이 지원되지 않습니다"
-
-#: ../daemon/gvfsbackendftp.c:228
-msgid "Host closed connection"
-msgstr "호스트의 연결이 끊겼습니다"
-
-#: ../daemon/gvfsbackendftp.c:232
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "데이터 연결을 열 수 없습니다. 방화벽이 연결을 방해하는 것 같습니다."
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Data connection closed"
-msgstr "데이터 연결이 끊겼습니다"
-
-#: ../daemon/gvfsbackendftp.c:242
-msgid "File unavailable"
-msgstr "파일을 얻을 수 없습니다"
-
-#: ../daemon/gvfsbackendftp.c:246
-msgid "Operation failed"
-msgstr "동작이 실패하였습니다"
-
-#: ../daemon/gvfsbackendftp.c:251
-msgid "No space left on server"
-msgstr "서버에 남은 공간이 없습니다"
-
-#: ../daemon/gvfsbackendftp.c:259 ../daemon/gvfsbackendsftp.c:3684
-msgid "Operation unsupported"
-msgstr "지원하는 동작이 아닙니다"
-
-#: ../daemon/gvfsbackendftp.c:263 ../daemon/gvfsbackendsftp.c:259
-msgid "Permission denied"
-msgstr "허가권이 거부되었습니다"
-
-#: ../daemon/gvfsbackendftp.c:267
-msgid "Page type unknown"
-msgstr "알 수 없는 페이지 형식"
-
-#: ../daemon/gvfsbackendftp.c:271 ../daemon/gvfsbackendftp.c:2059
-#, c-format
-msgid "Invalid filename"
-msgstr "잘못된 파일이름"
-
-#: ../daemon/gvfsbackendftp.c:275 ../daemon/gvfsbackendftp.c:349
-#: ../daemon/gvfsbackendftp.c:378 ../daemon/gvfsbackendftp.c:397
-#: ../daemon/gvfsbackendftp.c:410 ../daemon/gvfsbackendftp.c:751
-#, c-format
-msgid "Invalid reply"
-msgstr "잘못된 응답"
-
-#: ../daemon/gvfsbackendftp.c:517
-#, c-format
-msgid "broken transmission"
-msgstr "전송이 깨어짐"
-
-#: ../daemon/gvfsbackendftp.c:611 ../daemon/gvfsbackendftp.c:771
-#, c-format
-msgid "Could not connect to host"
-msgstr "호스트에 연결할 수 없습니다"
-
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendftp.c:897 ../daemon/gvfsbackendsftp.c:1736
-#, c-format
-msgid "/ on %s"
-msgstr "%s의 /"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1259
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "%s의 ftp 비밀번호를 입력하십시오"
-
-#: ../daemon/gvfsbackendftp.c:1279 ../daemon/gvfsbackendsftp.c:833
-msgid "Password dialog cancelled"
-msgstr "비밀번호 입력 대화상자가 취소되었습니다"
-
-#: ../daemon/gvfsbackendftp.c:1345
-#, c-format
-msgid "ftp on %s"
-msgstr "%s의 ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1351
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "%s(으)로 로그인 된 %s ftp"
-
-#: ../daemon/gvfsbackendftp.c:1385 ../daemon/gvfsbackendsftp.c:1410
-msgid "No hostname specified"
-msgstr "호스트 이름이 지정되지 않았습니다"
-
-#: ../daemon/gvfsbackendftp.c:1608 ../daemon/gvfsbackendftp.c:2150
-msgid "backups not supported yet"
-msgstr "예비파일을 아직 지원하지 않습니다"
-
-#: ../daemon/gvfsbackendftp.c:1684
-#, c-format
-msgid "filename too long"
-msgstr "파일이름이 너무 깁니다"
-
-#: ../daemon/gvfsbackendftp.c:2169
-#, c-format
-msgid "Invalid destination filename"
-msgstr "잘못된 목표 파일이름"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:697
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "디지털 카메라 (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:843 ../hal/ghalvolume.c:398
-#, c-format
-msgid "%s Camera"
-msgstr "%s 카메라"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:846 ../hal/ghalvolume.c:393
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s 오디오 재생기"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../hal/ghalvolume.c:407
-msgid "Camera"
-msgstr "카메라"
-
-#: ../daemon/gvfsbackendgphoto2.c:857 ../hal/ghalvolume.c:405
-msgid "Audio Player"
-msgstr "오디오 재생기"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1539
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "%s의 gphoto2 마운트"
-
-#: ../daemon/gvfsbackendhttp.c:216
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP 클라이언트 오류: %s"
-
-#: ../daemon/gvfsbackendhttp.c:534 ../daemon/gvfsbackendsftp.c:1724
-#: ../daemon/gvfsbackendsmb.c:1230 ../daemon/gvfsbackendtrash.c:962
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (잘못된 인코딩)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "디렉토리 알림이 지원되지 않습니다"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:694
-msgid "Windows Network"
-msgstr "윈도 네트워크"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "로컬 네트워크"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "네트워크 위치 감시기"
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:444 ../daemon/gvfsbackendsmb.c:514
-#: ../daemon/gvfsbackendsmb.c:1223
-#, c-format
-msgid "%s on %s"
-msgstr "%2$s의 %1$s"
-
-#: ../daemon/gvfsbackendsftp.c:251
-msgid "ssh program unexpectedly exited"
-msgstr "ssh 프로그램이 예상치 않게 종료되었습니다"
-
-#: ../daemon/gvfsbackendsftp.c:266
-msgid "Hostname not known"
-msgstr "호스트 이름을 알 수 없습니다"
-
-#: ../daemon/gvfsbackendsftp.c:273
-msgid "No route to host"
-msgstr "호스트의 경로를 찾을 수 없습니다"
-
-#: ../daemon/gvfsbackendsftp.c:280
-msgid "Connection refused by server"
-msgstr "서버에서 연결이 거부되었습니다"
-
-#: ../daemon/gvfsbackendsftp.c:287
-msgid "Host key verification failed"
-msgstr "호스트 키 확인이 실패했습니다"
-
-#: ../daemon/gvfsbackendsftp.c:370
-msgid "Unable to spawn ssh program"
-msgstr "ssh프로그램을 실행할 수 없습니다"
-
-#: ../daemon/gvfsbackendsftp.c:386
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ssh프로그램을 실행할 수 없습니다: %s"
-
-#: ../daemon/gvfsbackendsftp.c:489 ../daemon/gvfsbackendsftp.c:741
-msgid "Timed out when logging in"
-msgstr "로그인 할 때 시간제한이 걸렸습니다"
-
-#: ../daemon/gvfsbackendsftp.c:817
-msgid "Enter passphrase for key"
-msgstr "ssh키 비밀번호를 입력하십시오"
-
-#: ../daemon/gvfsbackendsftp.c:819
-msgid "Enter password"
-msgstr "비밀번호를 입력하십시오"
-
-#: ../daemon/gvfsbackendsftp.c:880
-msgid "Can't send password"
-msgstr "비밀번호를 보낼 수 없습니다"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Log In Anyway"
-msgstr "어쨋든 로그인"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Cancel Login"
-msgstr "로그인 취소"
-
-#: ../daemon/gvfsbackendsftp.c:898
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"원격 컴퓨터(%s)의 신원을 알 수가 없습니다.\n"
-"로그인하려는 컴퓨터에 처음 연결하는 것 같습니다.\n"
-"\n"
-"원격 컴퓨터의 신원은 %s입니다. 계속해서 안전하게 사용하려면 시스템 관리자에"
-"게 문의하십시오."
-
-#: ../daemon/gvfsbackendsftp.c:918
-msgid "Login dialog cancelled"
-msgstr "로그인 대화상자가 취소되었습니다"
-
-#: ../daemon/gvfsbackendsftp.c:938
-msgid "Can't send host identity confirmation"
-msgstr "호스트 신원 확인을 보낼 수 없습니다"
-
-#: ../daemon/gvfsbackendsftp.c:1329 ../daemon/gvfsbackendsftp.c:1352
-msgid "Protocol error"
-msgstr "프로토콜 오류"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1376
-#, c-format
-msgid "sftp on %s"
-msgstr "%s의 sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1400
-msgid "Unable to find supported ssh command"
-msgstr "지원되는 ssh 명령을 찾을 수 없습니다"
-
-#: ../daemon/gvfsbackendsftp.c:1800
-msgid "File is directory"
-msgstr "파일이 디렉토리입니다"
-
-#: ../daemon/gvfsbackendsftp.c:1809
-msgid "Failure"
-msgstr "실패"
-
-#: ../daemon/gvfsbackendsftp.c:1874 ../daemon/gvfsbackendsftp.c:1936
-#: ../daemon/gvfsbackendsftp.c:1947 ../daemon/gvfsbackendsftp.c:2005
-#: ../daemon/gvfsbackendsftp.c:2095 ../daemon/gvfsbackendsftp.c:2124
-#: ../daemon/gvfsbackendsftp.c:2172 ../daemon/gvfsbackendsftp.c:2251
-#: ../daemon/gvfsbackendsftp.c:2362 ../daemon/gvfsbackendsftp.c:2403
-#: ../daemon/gvfsbackendsftp.c:2455 ../daemon/gvfsbackendsftp.c:2526
-#: ../daemon/gvfsbackendsftp.c:2546 ../daemon/gvfsbackendsftp.c:2700
-#: ../daemon/gvfsbackendsftp.c:2726 ../daemon/gvfsbackendsftp.c:2783
-#: ../daemon/gvfsbackendsftp.c:2842 ../daemon/gvfsbackendsftp.c:3122
-#: ../daemon/gvfsbackendsftp.c:3251 ../daemon/gvfsbackendsftp.c:3284
-#: ../daemon/gvfsbackendsftp.c:3385 ../daemon/gvfsbackendsftp.c:3426
-#: ../daemon/gvfsbackendsftp.c:3482 ../daemon/gvfsbackendsftp.c:3518
-#: ../daemon/gvfsbackendsftp.c:3552 ../daemon/gvfsbackendsftp.c:3567
-#: ../daemon/gvfsbackendsftp.c:3586 ../daemon/gvfsbackendsftp.c:3664
-msgid "Invalid reply received"
-msgstr "잘못된 응답을 받았습니다"
-
-#: ../daemon/gvfsbackendsftp.c:2193
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "예비 파일을 만드는 중 오류: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2608
-msgid "Unable to create temporary file"
-msgstr "임시 파일을 만들 수 없습니다"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:214
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "%2$s의 %1$s에 연결하려면 비밀번호가 필요합니다"
-
-#: ../daemon/gvfsbackendsmb.c:466 ../daemon/gvfsbackendsmb.c:506
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "내부 오류 (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:561
-msgid "Failed to mount Windows share"
-msgstr "윈도 공유를 마운트 하는데 실패했습니다"
-
-#: ../daemon/gvfsbackendsmb.c:686 ../daemon/gvfsbackendsmb.c:1117
-msgid "Unsupported seek type"
-msgstr "지원하지 않는 찾기 형식"
-
-#: ../daemon/gvfsbackendsmb.c:1171
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "예비 파일을 만드는데 실패했습니다: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1602
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "파일을 지우는데 오류: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1666
-#, c-format
-msgid "Error moving file: %s"
-msgstr "파일을 옮기는 데 오류: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1690
-msgid "Can't move directory over directory"
-msgstr "디렉토리에 디렉토리를 옮길 수 없습니다"
-
-#: ../daemon/gvfsbackendsmb.c:1738
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "해당 파일을 지우는 데 오류: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1762
-msgid "Can't recursively move directory"
-msgstr "디렉토리를 되풀이해서 옮길 수 없습니다"
-
-#: ../daemon/gvfsbackendsmb.c:1825
-msgid "Windows Shares Filesystem Service"
-msgstr "윈도 공유 파일시스템 서비스"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:702
-#, c-format
-msgid "Windows shares on %s"
-msgstr "%s의 윈도 공유"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:794 ../daemon/gvfsbackendsmbbrowse.c:840
-msgid "The file is not a mountable"
-msgstr "파일을 마운트할 수 없습니다"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:862
-msgid "Not a regular file"
-msgstr "보통 파일이 아닙니다"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1107
-msgid "Not a directory"
-msgstr "디렉토리가 아닙니다"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1219
-msgid "Windows Network Filesystem Service"
-msgstr "윈도 네트워크 파일시스템 서비스"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:600 ../daemon/gvfsbackendtrash.c:1190
-msgid "Trash"
-msgstr "휴지통"
-
-#: ../daemon/gvfsbackendtrash.c:972
-#, c-format
-msgid "%s (in trash)"
-msgstr "(휴지통에 있는) %s"
-
-#: ../daemon/gvfsbackendtrash.c:1291
-msgid "Can't delete trash"
-msgstr "휴지통은 지울 수 없습니다"
-
-#: ../daemon/gvfsbackendtrash.c:1638 ../daemon/gvfsbackendtrash.c:1713
-msgid "Trash directory notification not supported"
-msgstr "휴지통 디렉토리 알림이 지원되지 않습니다"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "잘못된 백엔드 형식"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "fd를 보내는 데 오류: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:119
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:169 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "백엔드에서 지원하는 동작이 아닙니다"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "백엔드에서 symlink를 지원하지 않습니다"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "잘못된 dbus 메세지"
-
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr "이전 데몬을 바꿉니다."
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr "fuse를 시작하지 않습니다."
-
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "GVFS 데몬"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr "GVFS 기본 데몬"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:74
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:76 ../programs/gvfs-cat.c:165 ../programs/gvfs-cat.c:178
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:388 ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:133 ../programs/gvfs-open.c:146
-#: ../programs/gvfs-save.c:165 ../programs/gvfs-tree.c:253
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "더 많은 정보를 보려면 \"%s --help\"를 사용하십시오."
-
-#: ../daemon/mount.c:432
-msgid "Invalid arguments from spawned child"
-msgstr "생성된 자식에서 잘못된 인자"
-
-#: ../daemon/mount.c:731
-#, c-format
-msgid "Automount failed: %s"
-msgstr "자동 마운트 실패: %s"
-
-#: ../daemon/mount.c:776
-msgid "The specified location is not mounted"
-msgstr "지정한 위치는 마운트되지 않았습니다"
-
-#: ../daemon/mount.c:781
-msgid "The specified location is not supported"
-msgstr "지정한 위치가 지원되지 않습니다"
-
-#: ../daemon/mount.c:944
-msgid "Location is already mounted"
-msgstr "위치가 이미 마운트되어 있습니다"
-
-#: ../daemon/mount.c:952
-msgid "Location is not mountable"
-msgstr "위치가 마운트 가능하지 않습니다"
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:148
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:162
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:165
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:168
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../hal/ghaldrive.c:174
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray"
-msgstr "블루레이"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-R"
-msgstr "블루레이-R"
-
-#: ../hal/ghaldrive.c:180
-msgid "Blu-ray-RE"
-msgstr "블루레이-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:186
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s 드라이브"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:192
-#, c-format
-msgid "%s Drive"
-msgstr "%s 드라이브"
-
-#: ../hal/ghaldrive.c:196
-msgid "Floppy Drive"
-msgstr "플로피 드라이브"
-
-#: ../hal/ghaldrive.c:202
-msgid "Software RAID Drive"
-msgstr "소프트웨어 레이드 드라이브"
-
-#: ../hal/ghaldrive.c:204
-msgid "USB Drive"
-msgstr "USB 드라이브"
-
-#: ../hal/ghaldrive.c:206
-msgid "ATA Drive"
-msgstr "ATA 드라이브"
-
-#: ../hal/ghaldrive.c:208
-msgid "SCSI Drive"
-msgstr "SCSI 드라이브"
-
-#: ../hal/ghaldrive.c:210
-msgid "FireWire Drive"
-msgstr "FireWire 드라이브"
-
-#: ../hal/ghaldrive.c:214
-msgid "Tape Drive"
-msgstr "테이프 드라이브"
-
-#: ../hal/ghaldrive.c:216
-msgid "CompactFlash Drive"
-msgstr "CF 드라이브"
-
-#: ../hal/ghaldrive.c:218
-msgid "MemoryStick Drive"
-msgstr "메모리스틱 드라이브"
-
-#: ../hal/ghaldrive.c:220
-msgid "SmartMedia Drive"
-msgstr "스마트미디어 드라이브"
-
-#: ../hal/ghaldrive.c:222
-msgid "SD/MMC Drive"
-msgstr "SD/MMC 드라이브"
-
-#: ../hal/ghaldrive.c:224
-msgid "Zip Drive"
-msgstr "Zip 드라이브"
-
-#: ../hal/ghaldrive.c:226
-msgid "Jaz Drive"
-msgstr "Jaz 드라이브"
-
-#: ../hal/ghaldrive.c:228
-msgid "Thumb Drive"
-msgstr "USB 메모리"
-
-#: ../hal/ghaldrive.c:231
-msgid "Mass Storage Drive"
-msgstr "대용량 저장장치 드라이브"
-
-#: ../hal/ghaldrive.c:730
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "미디어 꺼내기 실패: 미디어의 볼륨이 사용중입니다."
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "CD-ROM Disc"
-msgstr "CD-ROM 디스크"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "Blank CD-ROM Disc"
-msgstr "빈 CD-ROM 디스크"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "CD-R Disc"
-msgstr "CD-R 디스크"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "Blank CD-R Disc"
-msgstr "빈 CD-R 디스크"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "CD-RW Disc"
-msgstr "CD-RW 디스크"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "Blank CD-RW Disc"
-msgstr "빈 CD-RW 디스크"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM 디스크"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "Blank DVD-ROM Disc"
-msgstr "빈 DVD-ROM 디스크"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM 디스크"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "Blank DVD-RAM Disc"
-msgstr "빈 DVD-RAM 디스크"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "DVD-RW Disc"
-msgstr "DVD-RW 디스크"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "Blank DVD-RW Disc"
-msgstr "빈 DVD-RW 디스크"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "DVD+R Disc"
-msgstr "DVD+R 디스크"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "Blank DVD+R Disc"
-msgstr "빈 DVD+R 디스크"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "DVD+RW Disc"
-msgstr "DVD+RW 디스크"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "Blank DVD+RW Disc"
-msgstr "빈 DVD+RW 디스크"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL 디스크"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "Blank DVD+R DL Disc"
-msgstr "빈 DVD+R DL 디스크"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blu-Ray Disc"
-msgstr "블루레이 디스크"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blank Blu-Ray Disc"
-msgstr "빈 블루레이 디스크"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blu-Ray R Disc"
-msgstr "블루레이 R 디스크"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blank Blu-Ray R Disc"
-msgstr "블루레이 R 디스크"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blu-Ray RW Disc"
-msgstr "블루레이 RW 디스크"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blank Blu-Ray RW Disc"
-msgstr "빈 블루레이 RW 디스크"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "HD DVD Disc"
-msgstr "HD DVD 디스크"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "Blank HD DVD Disc"
-msgstr "빈 HD DVD 디스크"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R 디스크"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "Blank HD DVD-R Disc"
-msgstr "빈 HD DVD-R 디스크"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW 디스크"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "Blank HD DVD-RW Disc"
-msgstr "빈 HD DVD-RW 디스크"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "MO Disc"
-msgstr "광자기 디스크"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "Blank MO Disc"
-msgstr "빈 광자기 디스크"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Disc"
-msgstr "디스크"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Blank Disc"
-msgstr "빈 디스크"
-
-#: ../hal/ghalmount.c:368
-#, c-format
-msgid "%.1f kB Media"
-msgstr "%.1f kB 미디어"
-
-#: ../hal/ghalmount.c:373
-#, c-format
-msgid "%.1f MB Media"
-msgstr "%.1f MB 미디어"
-
-#: ../hal/ghalmount.c:378
-#, c-format
-msgid "%.1f GB Media"
-msgstr "%.1f GB 미디어"
-
-#: ../hal/ghalmount.c:490 ../hal/ghalvolume.c:317
-msgid "Mixed Audio/Data Disc"
-msgstr "오디오와 데이터가 섞인 디스크"
-
-#: ../hal/ghalvolume.c:206
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../hal/ghalvolume.c:211
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../hal/ghalvolume.c:216
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:305
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s 암호화된 자료"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:328
-#, c-format
-msgid "%s Media"
-msgstr "%s 미디어"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: 파일 여는데 오류: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, 표준 출력으로 쓰는데 오류"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: 읽는 데 오류: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:닫는 중 오류: %s\n"
-
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATION... - 위치에 있는 파일들을 합쳐서 표준출력으로 출력합니다."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"지정한 위치의 파일을 합쳐서 표준출력으로 출력합니다. 전통적인 cat 도구처럼 동"
-"작합니다만, 로컬 파일대신 gvfs위치를 사용합니다: 합쳐질 파일 위치를 smb://"
-"server/resource/file.txt 같은 것으로 사용할 수 있습니다."
-
-#: ../programs/gvfs-cat.c:150
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"알림: -n, -T, 등과 같은 형식 출력 옵션이 필요하면 파이프를 통해서 cat과 같이 "
-"실행하십시오."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:176 ../programs/gvfs-open.c:144
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: 위치를 입력하지 않았습니다"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: 위치 열기 오류: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: 프로그램 실행 오류: %s\n"
-
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - 등록된 프로그램으로 파일을 엽니다."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr "파일의 형식을 처리하는 등록된 기본 프로그램으로 파일을 엽니다."
-
-#~ msgid "Invalid reply from server."
-#~ msgstr "서버에서 잘못된 응답을 받았습니다."
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "%s의 음악 디스크"
-
-#~ msgid "The file does not exist"
-#~ msgstr "파일이 없습니다"
diff --git a/po/ku.po b/po/ku.po
deleted file mode 100644
index b26563c3..00000000
--- a/po/ku.po
+++ /dev/null
@@ -1,1362 +0,0 @@
-# translation of ku.po to Kurdish
-# Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Erdal Ronahi <erdal dot ronahi at gmail dot com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: ku\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-20 13:52+0000\n"
-"PO-Revision-Date: 2008-03-21 02:04+0100\n"
-"Last-Translator: Erdal Ronahi <erdal dot ronahi at gmail dot com>\n"
-"Language-Team: Kurdish <ku@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural= n != 1;"
-
-#: ../client/gdaemonfile.c:464 ../client/gdaemonfile.c:1867
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-
-#: ../client/gdaemonfile.c:758
-msgid "Invalid return value from get_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from query_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:865
-msgid "Couldn't get stream file descriptor"
-msgstr ""
-
-#: ../client/gdaemonfile.c:897 ../client/gdaemonfile.c:967
-#: ../client/gdaemonfile.c:1026 ../client/gdaemonfile.c:1085
-#: ../client/gdaemonfile.c:1147 ../client/gdaemonfile.c:2132
-#: ../client/gdaemonfile.c:2220 ../client/gdaemonfile.c:2489
-msgid "Invalid return value from open"
-msgstr ""
-
-#: ../client/gdaemonfile.c:977 ../client/gdaemonfile.c:1036
-#: ../client/gdaemonfile.c:1095 ../client/gdaemonfile.c:1157
-#: ../client/gdaemonfile.c:2090
-msgid "Didn't get stream file descriptor"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1209 ../client/gdaemonfile.c:1226
-msgid "Invalid return value from call"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1505
-msgid "Invalid return value from get_filesystem_info"
-msgstr ""
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1549
-msgid "Could not find enclosing mount"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1579
-#, c-format
-msgid "Invalid filename %s"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1621
-msgid "Invalid return value from query_filesystem_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:2012
-msgid "Invalid return value from monitor_dir"
-msgstr ""
-
-#: ../client/gdaemonfile.c:2061
-msgid "Invalid return value from monitor_file"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendobexftp.c:774
-#: ../daemon/gvfsbackendobexftp.c:795 ../daemon/gvfsbackendobexftp.c:914
-#: ../daemon/gvfsbackendobexftp.c:1051 ../daemon/gvfsbackendobexftp.c:1115
-#: ../daemon/gvfsbackendobexftp.c:1252 ../daemon/gvfsbackendobexftp.c:1279
-#: ../daemon/gvfsbackendobexftp.c:1338 ../daemon/gvfsbackendobexftp.c:1360
-#: ../daemon/gvfsbackendobexftp.c:1420 ../daemon/gvfsbackendobexftp.c:1439
-#: ../daemon/gvfsbackendsmb.c:1042 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:297
-msgid "Operation was cancelled"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr ""
-
-#: ../client/gdaemonvfs.c:731
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr ""
-
-#: ../client/gvfsdaemondbus.c:559 ../client/gvfsdaemondbus.c:946
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr ""
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr ""
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr ""
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr ""
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr ""
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr ""
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr ""
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Çewtî: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr ""
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr ""
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr ""
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr ""
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr ""
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:313 ../daemon/gvfsbackendftp.c:899
-#: ../daemon/gvfsbackendsftp.c:1738
-#, c-format
-msgid "/ on %s"
-msgstr "/ di %s de"
-
-#: ../daemon/gvfsbackendarchive.c:489 ../daemon/gvfsbackendftp.c:1415
-#: ../daemon/gvfsbackendsftp.c:1412
-msgid "No hostname specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendarchive.c:500 ../daemon/gvfsbackendarchive.c:529
-#: ../daemon/gvfsbackenddav.c:1206 ../daemon/gvfsbackendhttp.c:273
-#: ../daemon/gvfsbackendobexftp.c:605 ../daemon/gvfsbackendobexftp.c:616
-#: ../daemon/gvfsbackendsmb.c:592
-msgid "Invalid mount spec"
-msgstr ""
-
-#: ../daemon/gvfsbackendarchive.c:609 ../daemon/gvfsbackendarchive.c:659
-#: ../daemon/gvfsbackendarchive.c:688 ../daemon/gvfsbackendcdda.c:825
-#: ../daemon/gvfsbackendcomputer.c:573 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2017 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr ""
-
-#: ../daemon/gvfsbackendarchive.c:697 ../daemon/gvfsbackendburn.c:681
-#: ../daemon/gvfsbackendcomputer.c:652 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:848 ../daemon/gvfsbackendnetwork.c:637
-#, c-format
-msgid "The file is not a directory"
-msgstr ""
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1804
-msgid "Directory not empty"
-msgstr "Peldank ne vala ye"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr ""
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "Afirandêra CD/DVD'yan"
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "Pel heye"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr ""
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:492 ../hal/ghalvolume.c:298 ../hal/ghalvolume.c:319
-#, c-format
-msgid "Audio Disc"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr ""
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:818 ../daemon/gvfsbackendgphoto2.c:1695
-#, c-format
-msgid "No such file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:832
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendgphoto2.c:1687
-#: ../daemon/gvfsbackendobexftp.c:760 ../daemon/gvfsbackendtrash.c:637
-msgid "Can't open directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:930
-msgid "Can't mount file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:825
-msgid "No media in the drive"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:882 ../daemon/gvfsbackendcomputer.c:973
-#: ../daemon/gvfsbackendcomputer.c:1073
-msgid "Not a mountable file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:988
-msgid "Can't unmount file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:1104
-msgid "Can't eject file"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:269 ../daemon/gvfsbackenddav.c:1289
-#: ../daemon/gvfsbackendhttp.c:220
-#, c-format
-msgid "HTTP Error: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:285
-msgid "Could not parse response"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:294
-msgid "Empty response"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:301
-msgid "Unexpected reply from server"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:944 ../daemon/gvfsbackenddav.c:1421
-#, c-format
-msgid "Response invalid"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1087
-msgid "WebDAV share"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1089
-#, c-format
-msgid "Enter password for %s"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1092
-msgid "Please enter proxy password"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1293 ../daemon/gvfsbackenddav.c:1297
-msgid "Not a WebDAV enabled share"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1319
-#, c-format
-msgid "WebDAV on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1377 ../daemon/gvfsbackenddav.c:1448
-msgid "Could not create request"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1511 ../daemon/gvfsbackenddav.c:1764
-#: ../daemon/gvfsbackendftp.c:1617 ../daemon/gvfsbackendftp.c:2281
-#: ../daemon/gvfsbackendsmb.c:1778
-#, c-format
-msgid "Target file already exists"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1584 ../daemon/gvfsbackendsftp.c:2664
-#: ../daemon/gvfsbackendsmb.c:1010
-msgid "The file was externally modified"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1615 ../daemon/gvfsbackendsmb.c:1048
-#: ../daemon/gvfsbackendsmb.c:1795
-msgid "Backup file creation failed"
-msgstr ""
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr ""
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr ""
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr ""
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:225
-msgid "Accounts are unsupported"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:229
-msgid "Host closed connection"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:233
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:237
-msgid "Data connection closed"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "File unavailable"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Operation failed"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:253
-msgid "No space left on server"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:261 ../daemon/gvfsbackendsftp.c:3686
-msgid "Operation unsupported"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:265 ../daemon/gvfsbackendsftp.c:259
-msgid "Permission denied"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:269
-msgid "Page type unknown"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:273 ../daemon/gvfsbackendftp.c:2127
-#, c-format
-msgid "Invalid filename"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:277 ../daemon/gvfsbackendftp.c:351
-#: ../daemon/gvfsbackendftp.c:380 ../daemon/gvfsbackendftp.c:399
-#: ../daemon/gvfsbackendftp.c:412 ../daemon/gvfsbackendftp.c:753
-#, c-format
-msgid "Invalid reply"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:519
-#, c-format
-msgid "broken transmission"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:613 ../daemon/gvfsbackendftp.c:773
-#, c-format
-msgid "Could not connect to host"
-msgstr ""
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1273
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1298 ../daemon/gvfsbackendsftp.c:835
-msgid "Password dialog cancelled"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1377
-#, c-format
-msgid "ftp on %s"
-msgstr ""
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1381
-#, c-format
-msgid "ftp as %s on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1669 ../daemon/gvfsbackendftp.c:2242
-msgid "backups not supported yet"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1746
-#, c-format
-msgid "filename too long"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:2261
-#, c-format
-msgid "Invalid destination filename"
-msgstr ""
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:697
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr ""
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:843 ../hal/ghalvolume.c:398
-#, c-format
-msgid "%s Camera"
-msgstr ""
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:846 ../hal/ghalvolume.c:393
-#, c-format
-msgid "%s Audio Player"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../hal/ghalvolume.c:407
-msgid "Camera"
-msgstr "Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:857 ../hal/ghalvolume.c:405
-msgid "Audio Player"
-msgstr ""
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1539
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendhttp.c:216
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendhttp.c:534 ../daemon/gvfsbackendsftp.c:1726
-#: ../daemon/gvfsbackendsmb.c:1275 ../daemon/gvfsbackendtrash.c:962
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr ""
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr ""
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Torê Windowsê"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr ""
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr ""
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:444 ../daemon/gvfsbackendsmb.c:510
-#: ../daemon/gvfsbackendsmb.c:1268
-#, c-format
-msgid "%s on %s"
-msgstr "%s di %s de"
-
-#: ../daemon/gvfsbackendsftp.c:251
-msgid "ssh program unexpectedly exited"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:266
-msgid "Hostname not known"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:273
-msgid "No route to host"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:280
-msgid "Connection refused by server"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:287
-msgid "Host key verification failed"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:370
-msgid "Unable to spawn ssh program"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:386
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:489 ../daemon/gvfsbackendsftp.c:741
-msgid "Timed out when logging in"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:819
-msgid "Enter passphrase for key"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:821
-msgid "Enter password"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:882
-msgid "Can't send password"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:890
-msgid "Log In Anyway"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:890
-msgid "Cancel Login"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:900
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:920
-msgid "Login dialog cancelled"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:940
-msgid "Can't send host identity confirmation"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1331 ../daemon/gvfsbackendsftp.c:1354
-msgid "Protocol error"
-msgstr ""
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1378
-#, c-format
-msgid "sftp on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1402
-msgid "Unable to find supported ssh command"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1802
-msgid "File is directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1811
-msgid "Failure"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1876 ../daemon/gvfsbackendsftp.c:1938
-#: ../daemon/gvfsbackendsftp.c:1949 ../daemon/gvfsbackendsftp.c:2007
-#: ../daemon/gvfsbackendsftp.c:2097 ../daemon/gvfsbackendsftp.c:2126
-#: ../daemon/gvfsbackendsftp.c:2174 ../daemon/gvfsbackendsftp.c:2253
-#: ../daemon/gvfsbackendsftp.c:2364 ../daemon/gvfsbackendsftp.c:2405
-#: ../daemon/gvfsbackendsftp.c:2457 ../daemon/gvfsbackendsftp.c:2528
-#: ../daemon/gvfsbackendsftp.c:2548 ../daemon/gvfsbackendsftp.c:2702
-#: ../daemon/gvfsbackendsftp.c:2728 ../daemon/gvfsbackendsftp.c:2785
-#: ../daemon/gvfsbackendsftp.c:2844 ../daemon/gvfsbackendsftp.c:3124
-#: ../daemon/gvfsbackendsftp.c:3253 ../daemon/gvfsbackendsftp.c:3286
-#: ../daemon/gvfsbackendsftp.c:3387 ../daemon/gvfsbackendsftp.c:3428
-#: ../daemon/gvfsbackendsftp.c:3484 ../daemon/gvfsbackendsftp.c:3520
-#: ../daemon/gvfsbackendsftp.c:3554 ../daemon/gvfsbackendsftp.c:3569
-#: ../daemon/gvfsbackendsftp.c:3588 ../daemon/gvfsbackendsftp.c:3666
-msgid "Invalid reply received"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:2195
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:2610
-msgid "Unable to create temporary file"
-msgstr ""
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:215
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:468 ../daemon/gvfsbackendsmb.c:502
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr ""
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:558
-msgid "Failed to mount Windows share"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:688 ../daemon/gvfsbackendsmb.c:1147
-msgid "Unsupported seek type"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1211
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1669
-#, c-format
-msgid "Error deleting file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1743
-#, c-format
-msgid "Error moving file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1767
-msgid "Can't move directory over directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1815
-#, c-format
-msgid "Error removing target file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1839
-msgid "Can't recursively move directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1902
-msgid "Windows Shares Filesystem Service"
-msgstr ""
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr ""
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:600 ../daemon/gvfsbackendtrash.c:1190
-msgid "Trash"
-msgstr ""
-
-#: ../daemon/gvfsbackendtrash.c:972
-#, c-format
-msgid "%s (in trash)"
-msgstr ""
-
-#: ../daemon/gvfsbackendtrash.c:1291
-msgid "Can't delete trash"
-msgstr ""
-
-#: ../daemon/gvfsbackendtrash.c:1638 ../daemon/gvfsbackendtrash.c:1713
-msgid "Trash directory notification not supported"
-msgstr ""
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr ""
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr ""
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:119
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:169 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr ""
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr ""
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr ""
-
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr ""
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr ""
-
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "Daemon a GVFS"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr ""
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:78
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:80 ../programs/gvfs-cat.c:165 ../programs/gvfs-cat.c:178
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:388 ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:133 ../programs/gvfs-open.c:146
-#: ../programs/gvfs-save.c:165 ../programs/gvfs-tree.c:253
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr ""
-
-#: ../daemon/mount.c:432
-msgid "Invalid arguments from spawned child"
-msgstr ""
-
-#: ../daemon/mount.c:731
-#, c-format
-msgid "Automount failed: %s"
-msgstr ""
-
-#: ../daemon/mount.c:776
-msgid "The specified location is not mounted"
-msgstr ""
-
-#: ../daemon/mount.c:781
-msgid "The specified location is not supported"
-msgstr ""
-
-#: ../daemon/mount.c:944
-msgid "Location is already mounted"
-msgstr ""
-
-#: ../daemon/mount.c:952
-msgid "Location is not mountable"
-msgstr ""
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:148
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:162
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:165
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:168
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../hal/ghaldrive.c:174
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../hal/ghaldrive.c:180
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:186
-#, c-format
-msgid "%s/%s Drive"
-msgstr ""
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:192
-#, c-format
-msgid "%s Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:196
-msgid "Floppy Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:202
-msgid "Software RAID Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:204
-msgid "USB Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:206
-msgid "ATA Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:208
-msgid "SCSI Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:210
-msgid "FireWire Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:214
-msgid "Tape Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:216
-msgid "CompactFlash Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:218
-msgid "MemoryStick Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:220
-msgid "SmartMedia Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:222
-msgid "SD/MMC Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:224
-msgid "Zip Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:226
-msgid "Jaz Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:228
-msgid "Thumb Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:231
-msgid "Mass Storage Drive"
-msgstr ""
-
-#: ../hal/ghaldrive.c:730
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "CD-ROM Disc"
-msgstr "Dîska CD-ROM"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "Blank CD-ROM Disc"
-msgstr "Dîska CD-ROM a Vala"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "CD-R Disc"
-msgstr "Dîska CD-R"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "Blank CD-R Disc"
-msgstr "Dîska CD-R a Vala"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "CD-RW Disc"
-msgstr "Dîska CD-RW"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "Blank CD-RW Disc"
-msgstr "Dîska CD-RW a Vala"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "DVD-ROM Disc"
-msgstr "Dîska DVD-ROM"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "Blank DVD-ROM Disc"
-msgstr "Dîska DVD-ROM a Vala"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "DVD-RAM Disc"
-msgstr "Dîska DVD-RAM"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "Blank DVD-RAM Disc"
-msgstr "Dîska DVD-RAM a Vala"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "DVD-RW Disc"
-msgstr "Dîska DVD-RW"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "Blank DVD-RW Disc"
-msgstr "Dîska DVD-RW a Vala"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "DVD+R Disc"
-msgstr "Dîska DVD+R"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "Blank DVD+R Disc"
-msgstr "Dîska DVD+R a Vala"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "DVD+RW Disc"
-msgstr "Dîska DVD+RW"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "Blank DVD+RW Disc"
-msgstr "Dîska DVD+RW a Vala"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "DVD+R DL Disc"
-msgstr "Dîska DVD+R DL"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "Blank DVD+R DL Disc"
-msgstr "Dîska DVD+R DL a Vala"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blu-Ray Disc"
-msgstr "Dîska Blu-Ray"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blank Blu-Ray Disc"
-msgstr "Dîska Blu-Ray a Vala"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blu-Ray R Disc"
-msgstr "Dîska Blu-Ray R"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blank Blu-Ray R Disc"
-msgstr "Dîska Blu-Ray R a Vala"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blu-Ray RW Disc"
-msgstr "Dîska Blu-Ray RW"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Dîska Blu-Ray RW a Vala"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "HD DVD Disc"
-msgstr "Dîska HD DVD"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "Blank HD DVD Disc"
-msgstr "Dîska HD DVD a Vala"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "HD DVD-R Disc"
-msgstr "Dîska HD DVD-R"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "Blank HD DVD-R Disc"
-msgstr "Dîska HD DVD-R a Vala"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "HD DVD-RW Disc"
-msgstr "Dîska HD DVD-RW"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "Blank HD DVD-RW Disc"
-msgstr "Dîska HD DVD-RW a Vala"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "MO Disc"
-msgstr "Dîska MO"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "Blank MO Disc"
-msgstr "Dîska MO ya Vala"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Disc"
-msgstr "Dîsk"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Blank Disc"
-msgstr "Dîska Vala"
-
-#: ../hal/ghalmount.c:368
-#, c-format
-msgid "%.1f kB Media"
-msgstr ""
-
-#: ../hal/ghalmount.c:373
-#, c-format
-msgid "%.1f MB Media"
-msgstr ""
-
-#: ../hal/ghalmount.c:378
-#, c-format
-msgid "%.1f GB Media"
-msgstr ""
-
-#: ../hal/ghalmount.c:490 ../hal/ghalvolume.c:317
-msgid "Mixed Audio/Data Disc"
-msgstr ""
-
-#: ../hal/ghalvolume.c:206
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../hal/ghalvolume.c:211
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../hal/ghalvolume.c:216
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:305
-#, c-format
-msgid "%s Encrypted Data"
-msgstr ""
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:328
-#, c-format
-msgid "%s Media"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr ""
-
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-
-#: ../programs/gvfs-cat.c:150
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:176 ../programs/gvfs-open.c:144
-#, c-format
-msgid "%s: missing locations"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr ""
-
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-
diff --git a/po/lt.po b/po/lt.po
deleted file mode 100644
index 32041576..00000000
--- a/po/lt.po
+++ /dev/null
@@ -1,1551 +0,0 @@
-# translation of gvfs to Lithuanian
-# Copyright (C) 2008 Gintautas Miliauskas
-# This file is distributed under the same license as the gvfs package.
-#
-# Gintautas Miliauskas <gintas@akl.lt>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-14 14:54+0300\n"
-"PO-Revision-Date: 2008-09-14 14:53+0300\n"
-"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
-"Language-Team: Lithuanian <gnome-lt@lists.akl.lt>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
-"100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "Operacija nepalaikoma, failai skirtinguose prijungimo taškuose"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info grąžino netaisyklingą reikšmę"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info grąžino netaisyklingą reikšmę"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Nepavyko gauti srauto failo deskriptoriaus"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "open grąžino netaisyklingą reikšmę"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "Nepavyko gauti srauto failo deskriptoriaus"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Netaisyklinga kvietimo grąžinta reikšmė"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info grąžino netaisyklingą reikšmę"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Nepavyko rasti tėvinio prijungimo taško"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Netaisyklingas failo vardas „%s“"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info grąžino netaisyklingą reikšmę"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir grąžino netaisyklingą reikšmę"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file grąžino netaisyklingą reikšmę"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Klaida srauto protokole: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Srauto pabaiga"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Operacija nutraukta"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Pozicijos keitimas sraute nepalaikomas"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Informacijos užklausimo operacija nepalaikoma"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Informacijos užklausimas sraute nepalaikomas"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Klaida gaunant prijungimo taško informaciją: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Klaida jungiantis prie tarnybos: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Klaida kuriant lizdą: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Klaida jungiantis prie lizdo: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Netaisyklingas failo informacijos formatas"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Netaisyklingas atributo informacijos sąrašo turinys"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Klaida jungiantis prie D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s failų sistemos tarnyba"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Klaida: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Naudojimas: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Naudojimas: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Nenurodytas prijungimo taško tipas"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "prijungimo taškas %s jau aktyvus"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "klaida paleidžiant prijungimo taškų tarnybą"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ kompiuteryje %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Nenurodytas kompiuterio vardas"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Netaisyklinga prijungimo taško specifikacija"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Failas neegzistuoja"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Failas nėra aplankas"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Rašyti"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Nepavyko sukurti laikino aplanko"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Tokio failo ar aplanko nėra"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Aplankas netuščias"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "Negalima kopijuoti failo ant katalogo"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD kūrimas"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Failas egzistuoja"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Operacija nepalaikoma posistemės"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "Paskirties kelyje nėra tokio failo ar aplanko"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "Negalima kopijuoti aplanko ant aplanko"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "Paskirties failas egzistuoja"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "Negalima rekursyviai kopijuoti aplanko"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Nepalaikoma"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Nepavyko prisijungti prie sisteminės magistralės"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Nepavyko sukurti libhal konteksto"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Nepavyko inicializuoti libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Nenurodytas įrenginys"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Nepavyko rasti įrenginio %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Įrenginyje %s nėra audio failų"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda prijungimo taškas %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Audio diskas"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Failų sistema užimta: %d atvertas failas"
-msgstr[1] "Failų sistema užimta: %d atverti failai"
-msgstr[2] "Failų sistema užimta: %d atvertų failų"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Nėra failo %s įrenginyje %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "„paranoia“ klaida įrenginyje %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Klaida keičiant poziciją sraute įrenginyje %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Nėra tokio failo"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Failas neegzistuoja arba nėra audio takelis"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Audio CD failų sistemos tarnyba"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Kompiuteris"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Failų sistema"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "Nepavyko atverti aplanko"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Nepavyko atverti prijungiamo failo"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Vidinė klaida: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Nepavyko prijungti failo"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Įrenginyje nėra laikmenos"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Ne prijungiamas failas"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Nepavyko atjungti failo"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Nepavyko išstumti failo"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP klaida: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Neavyko apdoroti atsakymo"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Tuščias atsakymas"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Netikėtas atsakymas iš serverio"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Atsakymas nekorektiškas"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV viešinys"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Įveskite %s slaptažodį"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Įveskite tarpinio serverio slaptažodį"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Ne WebDAV viešinys"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Nepavyko sukurti užklausos"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Paskirties failas jau egzistuoja"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Failas modifikuotas išorinės programos"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Atsarginio failo kūrimas nesėkmingas"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Nepavyko stebėti failo ar aplanko."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Tinklas"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Paskyros nepalaikomos"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Kompiuteris uždarė prisijungimą"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Nepavyko atverti duomenų prisijungimo. Gal tai draudžia Jūsų ugniasienė?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Duomenų prisijungimas užvertas"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Operacija nesėkminga"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Serveryje neliko laisvos vietos"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Operacija nepalaikoma"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Leidimas neduotas"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Puslapio tipas nežinomas"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Netaisyklingas failo vardas"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Netaisyklingas atsakymas"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "nutrauktas perdavimas"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Nepavyko prisijungti prie kompiuterio"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Įveskite FTP slaptažodį %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Slaptažodžio dialogas atmestas"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "FTP %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "FTP vardu %s kompiuteryje %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Failas yra aplankas"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "atsarginės kopijos dar nepalaikomos"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "failo vardas per ilgas"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Netaisyklingas paskirties failo vardas"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Aplankas ar failas jau egzistuoja"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Tokio failo ar aplanko nėra"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Netaisyklingas failo vardas"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Nepalaikoma"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Skaitmeninė kamera (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s kamera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s audio grotuvas"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Audio grotuvas"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Failas gauti aplankų sąrašo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Nenurodytas įrenginys"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Nepavyko sukurti gphoto2 konteksto"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Klaida kuriant kamerą"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Klaida įkeliant įrenginio informaciją"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Klaida ieškant įrenginio informacijos"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Klaida gaunant įrenginio informaciją"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Klaida nustatant kameros komunikacijos prievadą"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Klaida inicializuojant kamerą"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 prijungimo taškas %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Nenurodyta jokia kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Klaida kuriant failo objektą"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Klaida gaunant failą"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Klaida gaunant duomenis iš failo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Klaida keičiant poziciją sraute kameroje %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Ne aplankas"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Nepavyko gauti failų sąrašo"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Klaida kuriant aplanką"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Vardas jau egzistuoja"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Nauajs failo vardas per ilgas"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Klaida pervadinant aplanką"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Klaida pervadinant failą"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Aplankas „%s“ netuščias"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Klaida trinant aplanką"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Klaida trinant failą"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "Nepavyko rašyti į aplanką"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Nepavyko išskirti naujo failo, į kurį rašyti"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Nepavyko skaityti failo, į kurį rašyti"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Nepavyko gauti duomenų iš failo, į kurį rašyti"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Klaida rašant failą"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Nepalaikoma (ne tas pats aplankas)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Nepalaikoma (šaltinis – aplankas, paskirtis – aplankas)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Nepalaikoma (šaltinis – aplankas, paskirtis – egzistuojantis failas)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Nepalaikoma (šaltinis – failas, paskirtis – aplankas)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP kliento klaida: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (netaisyklinga koduotė)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Aplankų pranešimas nepalaikomas"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows tinklas"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Vietinis tinklas"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Tinklo vietų stebyklė"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s kompiuteryje %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Prisijungimas prie prietaiso prarastas"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Reikia atnaujinti prietaiso programinę įrangą"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh programa netikėtai užsidarė"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Kompiuterio vardas nežinomas"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Nėra maršruto iki kompiuterio"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Serveris atmetė prisijungimą"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Kompiuterio rakto verifikavimas nesėkmingas"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Nepavyko paleisti ssh programos"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Nepavyko paleisti ssh programos: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Baigėsi prisijungimo laiko limitas"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Įveskite slaptą frazę"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Įveskite slaptažodį"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Nepavyko išsiųsti slaptažodžio"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Vis vien prisijungti"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Nutraukti prisijungimą"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Nutolusio kompiuterio (%s) tapatybė nežinoma.\n"
-"Tai atsitinka, kai jungiatės prie kompiuterio pirmą kartą.\n"
-"\n"
-"Kompiuterio atsiųsta tapatybė yra %s. Jei norite būti visiškai tikri, kad "
-"saugu tęsti, susisiekite su sistemos administratoriumi."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Prisijungimo dialogas atmestas"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Nepavyko nusiųsti kompiuterio tapatybės patvirtinimo"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Protokolo klaida"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "SFTP kompiuteryje %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Nepavyko rasti palaikomos ssh komandos"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Nesėkmė"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Gautas netaisyklingas atsakymas"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Klaida kuriant atsarginės kopijos failą: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Nepavyko sukurti laikino failo"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Negalima perkelti aplanko ant aplanko"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Viešiniui %s kompiuteryje %s reikalingas slaptažodis"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Vidinė klaida (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Nepavyko prijungti Windows viešinio"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Nepalaikomas pozicijos keitimo tipas"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Atsarginės kopijos kūrimas nesėkmingas: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Klaida trinant failą: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Klaida perkeliant failą: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Klaida šalinant paskirties failą: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Negalima rekursyviai perkelti aplanko"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows viešinių failų sistemos tarnyba"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windows viešiniai %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Šis failas nėra prijungiamas"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Ne paprastas failas"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windows tinklo failų sistemos tarnyba"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Šiukšlės"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (šiukšlėse)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Negalima ištrinti šiukšlių"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Šiukšlių aplanko pranešimai nepalaikomi"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Klaidingas posistemės tipas"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Klaida siunčiant fd: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Simbolinės nuorodos nepalaikomos posistemės"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Netaisyklingas D-Bus pranešimas"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Pakeisti seną tarnybą."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Nepaleisti fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS tarnyba"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Pagrindinė GVFS tarnyba"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Pabandykite „%s --help“, jei norite gauti daugiau informacijos."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Netaisyklingi argumentai iš sukurto antrinio proceso"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automatinis prijungimas nesėkmingas: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Nurodyta vieta nėra prijungimo taškas"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Nurodyta vieta nepalaikoma"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Vieta jau prijungta"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Vieta neprijungiama"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s įrenginys"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s įrenginys"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Diskelių įrenginys"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Programinis RAID įrenginys"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB diskas"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA diskas"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI diskas"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire diskas"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Kasečių įrenginys"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash įrenginys"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick įrenginys"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia įrenginys"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC įrenginys"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip diskas"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz diskas"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Flash laikmena"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Duomenų laikmena"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Nepavyko išstumti medijos; vienas ar daugiau skirsnių užimti."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "Mišrus audio/duomenų diskas"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "%s laikmena"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s šifruoti duomenys"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM diskas"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Tuščias CD-ROM diskas"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R diskas"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Tuščias CD-R diskas"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW diskas"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Tuščias CD-RW diskas"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM diskas"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Tuščias DVD-ROM diskas"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM diskas"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Tuščias DVD-RAM diskas"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW diskas"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Tuščias DVD-RW diskas"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R diskas"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Tuščias DVD+R diskas"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW diskas"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Tuščias DVD+RW diskas"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL diskas"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Tuščias DVD+R DL diskas"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray diskas"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Tuščias Blu-Ray diskas"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R diskas"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Tuščias Blu-Ray R diskas"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW diskas"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Tuščias Blu-Ray RW diskas"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD diskas"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Tuščias HD DVD diskas"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R diskas"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Tuščias HD DVD-R diskas"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW diskas"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Tuščias HD DVD-RW diskas"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO diskas"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Tuščias MO diskas"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Diskas"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Tuščias diskas"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: klaida atveriant failą: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, klaida rašant į standartinį išvedimą"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: klaida skaitant: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:klaida užveriant: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "VIETA... – sujungti VIETAS ir išvesti į standartinį išvedimą"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Sujungti failus nurodytose vietose ir išvesti į standartinį išvedimą. Veikia "
-"kaip tradicinė „cat“ programa, tačiau palaiko gvfs vietas, o ne tik "
-"vietinius failus. Pavyzdžiui, galite nurodyti „smb://serveris/resursas/"
-"failas.txt“."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Pastaba: filtruokite per cat, jei reikia jo formatavimo funkcionalumo (-n, -"
-"T ar kt.)."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: trūkstamos vietos"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: klaida atveriant vietą: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: klaida paleidžiant programą: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FAILAI... – atverti FAILUS su registruota programa."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Atveria failus su numatytąja programa, registruota atitinkamiems failų "
-"tipams."
-
-#~ msgid "File unavailable"
-#~ msgstr "Failas neprieinamas"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "%.1f kB laikmena"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "%.1f MB laikmena"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "%.1f GB laikmena"
diff --git a/po/mk.po b/po/mk.po
deleted file mode 100644
index 036f59fb..00000000
--- a/po/mk.po
+++ /dev/null
@@ -1,1556 +0,0 @@
-# translation of mk.po to Macedonian
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Jovan Naumovski <jovan@lugola.net>, 2008.
-# Arangel Angov <ufo@linux.net.mk>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: mk\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-21 15:25+0000\n"
-"PO-Revision-Date: 2008-08-27 17:05+0200\n"
-"Last-Translator: Jovan Naumovski <jovan@lugola.net>\n"
-"Language-Team: en_US <kde-i18n-doc@lists.kde.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural= n==1 || n%10==1 ? 0 : 1\n"
-"X-Generator: KAider 0.1\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "Операцијата не е поддржана, датотеки на различни монтирања"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Вратена е невалидна вредност од get_info"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Вратена е невалидна вредност од query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Не можев да добијам датотека со опишувач на стрим"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "Вратена е невалидна вредност од open"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Не добив датотека со опишувач за стрим"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Вратена е невалидна вредност од call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Вратена е невалидна вредност од get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Не можев да добијам соодветно монтирање"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Невалидно име на датотека %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Вратена е невалидна вредност од query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "Вратена е невалидна вредност од monitor_dir"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "Вратена е невалидна вредност од monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Грешка во протоколот за стримување: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Крај на стрим"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Операцијата беше прекината"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Барањето не е поддржано за стримот"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Операцијата за барање на информации не е поддржана"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Барањето не е поддржано за стримот"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Грешка при добивањето на податоци за монтирањето: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Грешка при поврзувањето со демонот: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Грешка при креирањето на сокет: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Грешка при поврзувањето со сокет: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Невалиден формат за датотеки со информации"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Невалидна содржина за листа со атрибути на информации"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Грешка при поврзувањето со D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Сервис за датотечен систем на %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Грешка: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Употреба: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Употреба: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Не е одредена точка на монтирање"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "Точката за монтирање на %s веќе се извршува"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "грешка при стартувањето на демонот за монтирање"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ на %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Не е одредено име на хост"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Невалидни спецификации за монтирање"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Датотеката не постои"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Датотеката не е директориум"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Сними"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Не можам да креирам привремен директориум"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendgphoto2.c:2690
-#, c-format
-msgid "No such file or directory"
-msgstr "Нема таква датотека или директориум"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "Директориумот не е празен"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "Не можам да ја копирам датотеката над директориумот"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Креатор на CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2763
-msgid "File exists"
-msgstr "Датотеката постои"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "Нема таква датотека или директориум во целната патека"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "Не можам да го копирам директориумот над директориум"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "Целната датотека постои"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "Не можам да го ископирам директориумот рекурзивно"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2348
-#: ../daemon/gvfsbackendgphoto2.c:2556 ../daemon/gvfsbackendgphoto2.c:2651
-#: ../daemon/gvfsbackendgphoto2.c:2742
-msgid "Not supported"
-msgstr "Не е поддржано"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "Не можам да се поврзам со системската магистрала"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "Не можам да креирам содржина за libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "Не можам да го иницијализирам libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Не е одреден уред"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Не можам да го пронајдам уредот %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Уредот %s не содржи аудио датотеки"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda точка за монтирање на %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Аудио диск"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Датотечниот систем е зафатен: %d отворена датотека"
-msgstr[1] "Датотечниот систем е зафатен: %d отворени датотеки"
-msgstr[2] "Датотечниот систем е зафатен: %d отворени датотеки"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Ја нема датотеката %s на уредот %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Грешка од „paranoia“ на уредот %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Грешка во барањето во стримот на датотеката %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1711
-#, c-format
-msgid "No such file"
-msgstr "Нема таква датотека"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Датотеката не постои или не е аудио трака"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Сервис за датотечен систем на аудио CD"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Компјутер"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Датотечен систем"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1703
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "Не можам да го отворам директориумот"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Не можам да отворам монтирачка датотека"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Внатрешна грешка: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Не можам да ја монтирам датотеката"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Нема медиум во уредот"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Не е монтирачка датотека"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Не можам да ја одмонтирам датотеката"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Не можам да ја извадам датотеката"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP грешка: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Не можев да го парсирам одговорот"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Празен одговор"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Неочекуван одговор од серверот"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "Невалиден одговор"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "WebDAV споделување"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "Внесете лозинка за %s"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "Ве молам, внесете лозинка за проксито"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr "Не е споделување овозможено со WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV на %s"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "Не можев да креирам барање"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Целната датотека веќе постои"
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Датотеката беше изменета од надвор"
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Креирањето на бекап датотека не успеа"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Не можам да ја надгледувам датотеката или директориумот."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Мрежа"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Сметки не се поддржани"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Хостот ја затвори врската"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Не можам да отворам врска за податоци. Можеби Вашиот заштитен ѕид го "
-"спречува ова?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Врската за податоци е затворена"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Операцијата не успеа"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Нема преостанато место на серверот"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Операцијата не е поддржана"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Пристапот е одбиен"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Типот на страницата е непознат"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Невалидно име на датотека"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Невалиден одговор"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "прекинат пренос"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Не можам да се врзам за хостот"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Внесете лозинка за ftp на %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Дијалог прозорецот за лозинка беше откажан"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp на %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp како %s на %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Датотеката е директориум"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "правењето на резерви се уште не е поддржано"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "името на датотеката е преголемо"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Невалидно име на дестинациска датотека"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: директориумот или датотеката постои"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: нема таква датотека или директориум"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: невалидно име на датотека"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: не е поддржано"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Дигитална камера (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s камера"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s пуштач на аудио"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Камера"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Пуштач на аудио"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2008
-msgid "Failed to get folder list"
-msgstr "Не успеав да земам листа на папки"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "Не е одреден уред"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "Не можам да креирам содржина за gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "Грешка при креирањето на камера"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482 ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading device information"
-msgstr "Грешка во вчитувањето на информации за уредот"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up device information"
-msgstr "Грешка во барањето на информации за уредот"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting device information"
-msgstr "Грешка во добивањето на информации од уредот"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting up camera communications port"
-msgstr "Грешка во поставувањето на портата за комуникација на камерата"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "Грешка во иницијализирањето на камерата"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 точка за монтирање на %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "Не е одредена камера"
-
-#: ../daemon/gvfsbackendgphoto2.c:1719
-msgid "Error creating file object"
-msgstr "Грешка при креирањето на објект датотека"
-
-#: ../daemon/gvfsbackendgphoto2.c:1733
-msgid "Error getting file"
-msgstr "Грешка во добивањето на датотека"
-
-#: ../daemon/gvfsbackendgphoto2.c:1742
-msgid "Error getting data from file"
-msgstr "Грешка во добивањето на податоци од датотеката"
-
-#: ../daemon/gvfsbackendgphoto2.c:1836 ../daemon/gvfsbackendgphoto2.c:3010
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Грешка во барањето во стримот на камерата %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1975 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Не е директориум"
-
-#: ../daemon/gvfsbackendgphoto2.c:2071
-msgid "Failed to get file list"
-msgstr "Не успеав да земам листа на датотеки"
-
-#: ../daemon/gvfsbackendgphoto2.c:2360
-msgid "Error creating directory"
-msgstr "Грешка при креирањето на директориум"
-
-#: ../daemon/gvfsbackendgphoto2.c:2568
-msgid "Name already exists"
-msgstr "Името веќе постои"
-
-#: ../daemon/gvfsbackendgphoto2.c:2579 ../daemon/gvfsbackendgphoto2.c:3200
-msgid "New name too long"
-msgstr "Името е предолго"
-
-#: ../daemon/gvfsbackendgphoto2.c:2589 ../daemon/gvfsbackendgphoto2.c:3211
-msgid "Error renaming dir"
-msgstr "Грешка во преименувањето на директориумот"
-
-#: ../daemon/gvfsbackendgphoto2.c:2601 ../daemon/gvfsbackendgphoto2.c:3223
-msgid "Error renaming file"
-msgstr "Грешка во преименувањето на датотеката"
-
-#: ../daemon/gvfsbackendgphoto2.c:2664
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Directory „%s“ не е празен"
-
-#: ../daemon/gvfsbackendgphoto2.c:2675
-msgid "Error deleting directory"
-msgstr "Грешка во бришењето на директориумот"
-
-#: ../daemon/gvfsbackendgphoto2.c:2700
-msgid "Error deleting file"
-msgstr "Грешка во бришењето на датотеката"
-
-#: ../daemon/gvfsbackendgphoto2.c:2752
-msgid "Can't write to directory"
-msgstr "Не можам да запишам во директориумот"
-
-#: ../daemon/gvfsbackendgphoto2.c:2799
-msgid "Cannot allocate new file to append to"
-msgstr "Не можам да алоцирам нова датотека на која што ќе додадам"
-
-#: ../daemon/gvfsbackendgphoto2.c:2813
-msgid "Cannot read file to append to"
-msgstr "Не можам да ја прочитам датотеката на која што треба да додадам"
-
-#: ../daemon/gvfsbackendgphoto2.c:2823
-msgid "Cannot get data of file to append to"
-msgstr "Не можам да ги добијам податоците од датотеката на која што треба да додадам"
-
-#: ../daemon/gvfsbackendgphoto2.c:3109
-msgid "Error writing file"
-msgstr "Грешка во запишувањето на датотеката"
-
-#: ../daemon/gvfsbackendgphoto2.c:3156
-msgid "Not supported (not same directory)"
-msgstr "Не е поддржано (не е истиот директориум)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3168
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Не е поддржано (src е директориум, dst е директориум)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3176
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Не е поддржано (src е датотека, dst е постоечка датотека)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3188
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Не е поддржано (src е датотека, dst е директориум)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Грешка на HTTP клиентот: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (невалидно енкодирање)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Известувањето за директориуми не е поддржано"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows мрежа"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Локална мрежа"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Надгледувач на локации на мрежите"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s на %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Врската со уредот е изгубена"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Уредот бара ажурирање на софтверот"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh програмата неочекувано излезе"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Името на хостот не е познато"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Нема рута до хостот"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Врската е одбиена од серверот"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Проверката на клучот на хостот не успеа"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Не успеав да ја подигнам програмата ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Не успеав да ја подигнам програмата ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Времето за најава истече"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Внесете тајна фраза за клучот"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Внесете лозинка"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Не можам да ја испратам лозинката"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Најави се секако"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Откажи најава"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Идентитетот на далечниот компјутер (%s) е непознат.\n"
-"Ова се случува кога се најавувате на некој компјутер з апрв пат.\n"
-"\n"
-"Идентитетот испратен на далечниот компјутер %s. Ако сакате да бидете "
-"апсолутно сигурни дека е сигурно да продолжите, контактирајте го Вашиот "
-"систем администратор."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Дијалогот за најава е откажан"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Не можам да испратам потврда за идентитет"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Грешка во протоколот"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp на %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Не успеав да најдам поддржана ssh команда"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Неуспех"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Добиен е невалиден одговор"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Грешка при креирањето на бекап датотека: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Не успеав да ја создадам привремената датотека"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Не можам да го преместам директориумот над друг директориум"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Потребна е лозинка за споделувањето %s на %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Внатрешна грешка (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Не успеав да го монтирам споделувањето од Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Неподдржан тип на хостирање"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Не успеа креирањето на бекап датотека: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Грешка во бришењето на датотеката: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Грешка во преместувањето на датотеката: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Грешка во отстранувањето на целната датотека: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Не можам да го преместам директориумот рекурзивно"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Сервис за датотечен систем на Windows споделувања"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windows споделувања на %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Оваа датотека не може да се монтира"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Не е обична датотека"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Сервис за датотечен систем за Windows мрежа"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Ѓубре"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (во ѓубрето)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Не можам да ја избришам корпата за ѓубре"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Не е поддржано известувањето за директориумот за ѓубре"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Невалиден тип на бекенд"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Грешка при испраќањето на fd: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Операцијата не е поддржана од бекендот"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Симболичките врски не се креирани од бекендот"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Невалидна порака од dbus"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Замени стар демон."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Не го стартувај fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS демон"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Главен даемон за GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Пробајте „%s --help“ за повеќе информации."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Невалидни аргументи од креираното дете"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Автоматското монтирање не успеа: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Одредената локација не е монтирана"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Одредената локација не е поддржана"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Локацијата е веќе монтирана"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Локацијата не може да се монтира"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Флопи уред"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Софтверски RAID уред"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB уред"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA уред"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI уред"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire уред"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Уред со ленти"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash уред"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick уред"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia уред"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC уред"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip уред"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz уред"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Преносен уред"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Уред за mass storage"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Не успеав да ги извадам медиумите; еден или повеќе простори на медиумите се "
-"зафатени."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Мешан диск со аудио/податоци"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "%s медиум"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s енкриптирани податоци"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM диск"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Празен CD-ROM диск"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R диск"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Празен CD-R диск"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW диск"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Празен CD-RW диск"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM диск"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Празен DVD-ROM диск"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM диск"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Празен DVD-RAM диск"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW диск"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Празен DVD-RW диск"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R диск"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Празен DVD+R диск"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW диск"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Празен DVD+RW диск"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL диск"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Празен DVD+R DL диск"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray диск"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Празен Blu-Ray диск"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R диск"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Празен Blu-Ray R диск"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW диск"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Празен Blu-Ray RW диск"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD диск"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Празен HD DVD диск"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R диск"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Празен HD DVD-R диск"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW диск"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Празен HD DVD-RW диск"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO диск"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Празен MO диск"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Диск"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Празен диск"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: грешка во отворањето на датотеката: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, грешка, ја запишувам во stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: грешка во читањето: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: грешка во затворањето: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATION... - наведете LOCATIONS на стандардниот влез."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Наведете датотеки од локации и испечати ги на стандардниот излез. Работи "
-"самосо алатката cat, но со користење на gvfs локација наместообични "
-"датотеки: на пример, можете да користите smb://server/resource/file.txt како "
-"локација."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Забелешка: Само насочете го стрипот со цевка преку cat ако ви требаат опции "
-"за форматирање како -n, -T или други."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: недостасуваат локации"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: грешка во отворањето на локацијата: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: грешка при лансирање на апликацијата: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - отвори FILES со регистрираната апликација."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Отвора датотека(и) со стандардната апликација регистрирана за справување со "
-"овој тип на датотеки."
-
-#~ msgid "File unavailable"
-#~ msgstr "Датотеката е недостапна"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "Медиум од %.1f kB"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "Медиум од %.1f MB"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "Медиум од %.1f GB"
-
diff --git a/po/ml.po b/po/ml.po
deleted file mode 100644
index 35fdc99c..00000000
--- a/po/ml.po
+++ /dev/null
@@ -1,1564 +0,0 @@
-# translation of gvfs.ml.po to Malayalam
-# translation of gvfs.ml.po to
-# Copyright (C) 2008 gvfs'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Ani Peter <apeter@redhat.com>, 2008.
-# Hari Vishnu <harivishnu@gmail.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs.ml\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-15 07:26+0000\n"
-"PO-Revision-Date: 2008-08-15 13:20+0530\n"
-"Last-Translator: Hari Vishnu <harivishnu@gmail.com>\n"
-"Language-Team: SMC - Malayalam <smc-discuss@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "പ്രവര്‍ത്തനം പിന്തുണയ്ക്കുന്നില്ല, ഫയലുകള്‍ പല മൌണ്ടുകളിലാണു്"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info-ല്‍ നിന്നും സാധുവല്ലാത്ത മറുപടി"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info-ല്‍ നിന്നും സാധുവല്ലാത്ത മറുപടി"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "സ്ട്രീം ഫയല്‍ ഡിസ്ക്രിപ്റ്റര്‍ ലഭ്യമായില്ല"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "open-ല്‍ നിന്നും സാധുവല്ലാത്ത മറുപടി"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "സ്ട്രീം ഫയല്‍ ഡിസ്ക്രിപ്റ്റര്‍ ലഭ്യമായില്ല"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "കോളില്‍ നിന്നും സാധുവല്ലാത്ത മറുപടി"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info-ല്‍ നിന്നും സാധുവല്ലാത്ത മറുപടി"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "ഉള്‍പ്പെടുത്തിയിരിക്കുന്ന മൌണ്ട് ലഭ്യമാകുന്നില്ല"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "%s എന്ന സാധുവല്ലാത്ത ഫയല്‍നാമം"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info-ല്‍ നിന്നും സാധുവല്ലാത്ത മറുപടി"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir-ല്‍ നിന്നും സാധുവല്ലാത്ത മറുപടി"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file-ല്‍ നിന്നും സാധുവല്ലാത്ത മറുപടി"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "സ്ട്രീം സമ്പ്രദായത്തില്‍ പിഴവ്: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "സ്ട്രീമിന്റെ അവസാനം"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "പ്രവര്‍ത്തനം റദ്ദാക്കിയിരിക്കുന്നു"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "സ്ട്രീമില്‍ സീക്ക് പിന്തുണയ്ക്കുന്നില്ല"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "ക്വറി ഇന്‍ഫോ പ്രവര്‍ത്തനം പിന്തുണയ്ക്കുന്നില്ല"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "സ്ട്രീമില്‍ ക്വറിന്‍ഫോ പിന്തുണയ്ക്കുന്നില്ല"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "മൌണ്ട് വിവരങ്ങള്‍ ലഭ്യമാക്കുന്നതിനിടയില്‍ പിശക്: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "നിരന്തരപ്രവൃത്തിയുമായി ബന്ധപ്പെടുന്നതില്‍ പിശക്: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "സോക്കറ്റ് ഉണ്ടാക്കുന്നതില്‍ പിശക്: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "സോക്കറ്റുമായി ബന്ധപ്പെടുന്നതില്‍ പിശക്: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "സാധുവല്ലാത്ത ഫയല്‍ വിവര ശൈലി"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "സാധുവല്ലാത്ത ആട്രിബ്യൂട്ട് ഇന്‍ഫോ ലിസ്റ്റ് ഉള്ളടക്കം"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "ഡി-ബസുമായി ബന്ധപ്പെടുന്നതില്‍ പിശക്: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s ഫയല്‍ സിസ്റ്റം സേവനം"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "പിശക്: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "ഉപയോഗിക്കേണ്ട വിധം: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "ഉപയോഗിക്കേണ്ട വിധം: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "ഏത് തരം മൌണ്ട് എന്ന് വ്യക്തമാക്കിയിട്ടില്ല"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s-നുള്ള മൌണ്ട് പോയിന്റ് നിലവില്‍ പ്രവര്‍ത്തിക്കുന്നു"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "മൌണ്ട് ഡെമണ്‍ ആരംഭിക്കുന്നതില്‍ പിശക്"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "%s-ല്‍ /"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "ഹോസ്റ്റിന്റെ നാമം വ്യക്തമാക്കിയിട്ടില്ല"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1448 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "സാധുവല്ലാത്ത മൌണ്ട്"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "ഫയല്‍ നിലവിലില്ല"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "ഫയല്‍ ഒരു തട്ടു് അല്ല"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "ബേണ്‍"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "താല്‍ക്കാലിക തട്ടു് ഉണ്ടാക്കുവാന്‍ സാധ്യമായില്ല"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1978 ../daemon/gvfsbackendgphoto2.c:2687
-#, c-format
-msgid "No such file or directory"
-msgstr "ഈ പേരില്‍ ഒരു ഫയലോ തട്ടോ ഇല്ല"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2035
-msgid "Directory not empty"
-msgstr "തട്ടു് ശൂന്യമല്ല"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "നിലവിലുള്ള തട്ടായി ഫയല്‍ പകര്‍ത്തുവാന്‍ സാധ്യമല്ല"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "സിഡി/ഡിവിഡി സൃഷ്ടാവ്"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2760
-msgid "File exists"
-msgstr "ഫയല്‍ നിലവിലുണ്ട്"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "പറഞ്ഞിരിക്കുന്ന വഴിയില്‍ ഇങ്ങനെ ഒരു ഫയല്‍ അല്ലെങ്കില്‍ തട്ടു് ലഭ്യമല്ല"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "നിലവിലുള്ള തട്ടായി മറ്റൊരു തട്ടു് പകര്‍ത്തുവാന്‍ സാധ്യമല്ല"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "ലക്ഷ്യസ്ഥാനത്തു് ഫയലുണ്ടു്"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "ആവര്‍ത്തിച്ച് തട്ടു് പകര്‍ത്തുവാന്‍ സാധ്യമല്ല"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2345
-#: ../daemon/gvfsbackendgphoto2.c:2553 ../daemon/gvfsbackendgphoto2.c:2648
-#: ../daemon/gvfsbackendgphoto2.c:2739
-msgid "Not supported"
-msgstr "പിന്തുണ ലഭ്യമല്ല"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "സിസ്റ്റം ബസ്സുമായി ബന്ധപ്പെടാന്‍ കഴിയുന്നില്ല"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "ലിബ്-ഹാല്‍ കോണ്ടെക്സ്റ്റ് ഉണ്ടാക്കാന്‍ കഴിഞ്ഞില്ല"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "ലിബ്-ഹാല്‍ തുടങ്ങാന്‍ കഴിയുന്നില്ല"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "ഡ്രൈവ് വ്യക്തമാക്കിയിട്ടില്ല"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "ഡ്രൈവ് %s ലഭ്യമല്ല"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "ഡ്രൈവ് %s-ല്‍ ഓഡിയോ ഫയലുകള്‍ ലഭ്യമല്ല"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "സി.ഡി.ഡി.എ മൗണ്ട് %s-ഏല്‍"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "ഓഡിയോ ഡിസ്ക്"
-
-#: ../daemon/gvfsbackendcdda.c:356
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "ഫയല്‍ സിസ്റ്റം തിരക്കിലാണ്: %d ഫയല്‍ തുറക്കുന്നിരിയ്ക്കുന്നു"
-msgstr[1] "ഫയല്‍ സിസ്റ്റം തിരക്കിലാണ്: %d ഫയലുകള്‍ തുറക്കുന്നിരിയ്ക്കുന്നു"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "ഡ്രൈവ് %s-ല്‍ %s എന്നൊരു ഫയല്‍ ലഭ്യമല്ല"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "ഡ്രൈവ് %s-ല്‍ പാരനോയിയയില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "ഡ്രൈവ് %s-ല്‍ സ്ട്രീമില്‍ തിരയുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1708
-#, c-format
-msgid "No such file"
-msgstr "അങ്ങനെ ഒരു ഫയല്‍ ലഭ്യമല്ല"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "ഫയല്‍ നിലവിലില്ല, അല്ലെങ്കില്‍ ഇത് ഒരു ഓഡിയോ ട്രാക്കല്ല"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "ശബ്ദ സി.ഡി ഫയല്‍ സിസ്റ്റം സേവനം"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "കമ്പ്യൂട്ടര്‍"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "ഫയല്‍ സിസ്റ്റം"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1700
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "തട്ടു് തുറക്കുവാന്‍ സാധ്യമല്ല"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "മൌണ്ട് ചെയ്യുവാന്‍ കഴിയുന്ന ഫയല്‍ തുറക്കുവാന്‍ സാധ്യമല്ല"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "ആന്തരിക പിഴവ്: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "ഫയല്‍ മൌണ്ട് ചെയ്യുവാന്‍ സാധ്യമല്ല"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "ഡ്രൈവില്‍ മാധ്യമം ഇല്ല"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "ഒരു മൌണ്ടു് ചെയ്യാവുന്ന ഫയല്‍ അല്ല"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "ഫയല്‍ അണ്‍മൌണ്ട് ചെയ്യുവാന്‍ സാധ്യമല്ല"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "ഫയല്‍ ലഭ്യമാക്കുവാന്‍ സാധ്യമല്ല"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1515
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP പിഴവ്: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "മറുപടി പാഴ്സ് ചെയ്യുവാന്‍ സാധ്യമായില്ല"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "മറുപടി ശൂന്യം"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "സെര്‍വറില്‍ നിന്നും അപ്രതീക്ഷിതമായ മറുപടി"
-
-#: ../daemon/gvfsbackenddav.c:1148 ../daemon/gvfsbackenddav.c:1650
-msgid "Response invalid"
-msgstr "സാധുവല്ലാത്ത മറുപടി"
-
-#: ../daemon/gvfsbackenddav.c:1291
-msgid "WebDAV share"
-msgstr "WebDAV ഷെയര്‍"
-
-#: ../daemon/gvfsbackenddav.c:1293
-#, c-format
-msgid "Enter password for %s"
-msgstr "%s-നുള്ള അടയാളവാക്കു് നല്‍കുക"
-
-#: ../daemon/gvfsbackenddav.c:1296
-msgid "Please enter proxy password"
-msgstr "ദയവായി പ്രോക്സി അടയാളവാക്കു് നല്‍കുക"
-
-#: ../daemon/gvfsbackenddav.c:1519 ../daemon/gvfsbackenddav.c:1523
-msgid "Not a WebDAV enabled share"
-msgstr "WebDAV സജ്ജമായ ഷെയര്‍ അല്ല"
-
-#: ../daemon/gvfsbackenddav.c:1546
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV %s-ഏല്‍"
-
-#: ../daemon/gvfsbackenddav.c:1606 ../daemon/gvfsbackenddav.c:1679
-msgid "Could not create request"
-msgstr "ആവശ്യം അറിയിക്കുവാന്‍ സാധിച്ചില്ല"
-
-#: ../daemon/gvfsbackenddav.c:1742 ../daemon/gvfsbackenddav.c:1995
-#: ../daemon/gvfsbackenddav.c:2106 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "ലക്ഷ്യസ്ഥാനത്തുള്ള ഫയല്‍ നിലവിലുണ്ട്"
-
-#: ../daemon/gvfsbackenddav.c:1815 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "ഫയല്‍ പുറത്ത് നിന്നും മാറ്റിയിരിക്കുന്നു"
-
-#: ../daemon/gvfsbackenddav.c:1846 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "കരുതല്‍ പകര്‍പ്പു് ഫയല്‍ ഉണ്ടാക്കുന്നത് പരാജയപ്പെട്ടു"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "ഡി.എന്‍.എസ്-എസ്.ഡി(dns-sd)"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "ഫയല്‍ അല്ലെങ്കില്‍ തട്ടു് മോണിറ്റര്‍ ചെയ്യാന്‍ കഴിയുന്നില്ല"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "ഡി.എന്‍.എസ്-എസ്.ഡി(Dns-SD)"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "ശ്രൃംഖല"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "അക്കൗണ്ടുകള്‍ക്ക് പിന്തുണ ലഭ്യമല്ല"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "ഹോസ്റ്റ് ബന്ധം അടച്ചു"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "വിവര ബന്ധം തുടങ്ങാന്‍ കഴിയുന്നില്ല. നിങ്ങളുടെ തീ-ഭിത്തി ഇത് തടയുന്നുണ്ടാവാം."
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "വിവര ബന്ധം അടച്ചു"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "പ്രവര്‍ത്തനം റദ്ദാക്കിയിരിക്കുന്നു "
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "സെര്‍വറില്‍ സ്ഥലം ബാക്കിയില്ല"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "പ്രവര്‍ത്തനം പിന്തുണയ്ക്കുന്നില്ല"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "അനുവാദമില്ല"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "പേജ് തരം അറിയുന്നതല്ല"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "സാധുവല്ലാത്ത ഫയല്‍നാമം"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "സാധുവല്ലാത്ത മറുപടി"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "പൊട്ടിയ പ്രക്ഷേപണം"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "ഹോസ്റ്റുമായി ബന്ധപ്പെടാന്‍ കഴിഞ്ഞില്ല"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "%s-നുള്ള എഫ്.ടി.പി-ക്കുള്ള അടയാളവാക്കു് നല്‍കുക"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "അടയാളവാക്കിനുള്ള സംഭാഷണം റദ്ദാക്കിയിരിക്കുന്നു"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "%s-ല്‍ ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "%2$s-ല്‍ %1$s-ആയി ftp"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "ഫയലൊരു തട്ടാണു്"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "കരുതല്‍ പകര്‍പ്പുകള്‍ പിന്തുണയ്ക്കുന്നില്ല"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "ഫയലിന്റെ പേരു് വളരെ വലുതാണു്"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "സാധുവല്ലാത്ത ഉദ്ദേശ ഫയല്‍നാമം"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: ഫയല്‍ അല്ലെങ്കില്‍ തട്ടു് നേരത്തെ തന്നെയുണ്ട്"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: ഈ പേരില്‍ ഒരു ഫയലോ തട്ടോ ഇല്ല"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: എന്ന സാധുവല്ലാത്ത ഫയല്‍നാമം"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: പിന്തുണ ലഭ്യമല്ല"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "ഡിജിറ്റല്‍ ക്യാമറ (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s ക്യാമറ"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s ശബ്ദ പ്ലേയര്‍"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "ക്യാമറ"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "ശബ്ദ പ്ലേയര്‍"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325
-msgid "Error listing folders to figure out ignore prefix"
-msgstr "അവഗണന മുന്‍-വാചകം കണ്ടു പിടിക്കാന്‍ അറകളുടെ പട്ടിക ഉണ്ടാക്കുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "ഉപകരണം വ്യക്തമാക്കിയിട്ടില്ല"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "ജി.പി.ഫോടോ2 കോണ്ടെക്സ്റ്റ് ഉണ്ടാക്കാന്‍ കഴിയുന്നില്ല"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "ക്യാമറ ഉണ്ടാക്കുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482
-msgid "Error creating port info list"
-msgstr "പോര്‍ട് വിവര പട്ടിക ഉണ്ടാക്കുന്നതില്‍ പിശക്: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading info list"
-msgstr "വിവര പട്ടിക തുറക്കുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up port info from port info list"
-msgstr "പോര്‍ട് വിവര പട്ടികയില്‍ നിന്നും പോര്‍ട് വിവരങ്ങള്‍ കണ്ടുപിടിക്കുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting port info from port info list"
-msgstr "പോര്‍ട് വിവര പട്ടികയില്‍ നിന്നും പോര്‍ട് വിവരങ്ങള്‍ കിട്ടുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting port info"
-msgstr "പോര്‍ട് വിവരം സെറ്റപ്പ് ചെയ്യുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "ക്യാമറ ആരംഭിക്കാന്‍ കഴിയുന്നില്ല"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "ജി.പി.ഫോടോ2 മൗണ്ട് %s-ഏല്‍"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "ക്യാമറ ഒന്നും വ്യക്തമാക്കിയിട്ടില്ല"
-
-#: ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open files"
-msgstr "ഫയല്‍ സിസ്റ്റം തിരക്കിലാണ്: %d ഫയല്‍ തുറന്നിരിക്കുന്നു"
-
-#: ../daemon/gvfsbackendgphoto2.c:1716
-msgid "Error creating file object"
-msgstr "ഫയല്‍ വസ്തു ഉണ്ടാക്കുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:1730
-msgid "Error getting file"
-msgstr "ഫയല്‍ കിട്ടുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:1739
-msgid "Error getting data from file"
-msgstr "ഫയലില്‍ നിന്നും വിവരങ്ങള്‍ കിട്ടുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:1833 ../daemon/gvfsbackendgphoto2.c:3007
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "%s ക്യാമറയില്‍ അകത്തേക്കുള്ള സ്റ്റ്രീം കണ്ടെത്തുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:1972 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "ഒരു തട്ടു് അല്ല"
-
-#: ../daemon/gvfsbackendgphoto2.c:2005
-msgid "Error listing folders"
-msgstr "അറ പട്ടികകള്‍ ഉണ്ടാക്കുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:2068
-msgid "Error listing files in folder"
-msgstr "അറയില്‍ ഫയല്‍ പട്ടികകള്‍ ഉണ്ടാക്കുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:2357
-msgid "Error creating directory"
-msgstr "അറ ഉണ്ടാക്കുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:2565
-msgid "Name already exists"
-msgstr "പേര് നേരത്തേ തന്നെ ഉണ്ട്"
-
-#: ../daemon/gvfsbackendgphoto2.c:2576 ../daemon/gvfsbackendgphoto2.c:3197
-msgid "New name too long"
-msgstr "പുതിയ പേര് വളരെ വലുതാണ്"
-
-#: ../daemon/gvfsbackendgphoto2.c:2586 ../daemon/gvfsbackendgphoto2.c:3208
-msgid "Error renaming dir"
-msgstr "അറ പേര് മാറ്റുനത്തില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:2598 ../daemon/gvfsbackendgphoto2.c:3220
-msgid "Error renaming file"
-msgstr "ഫയല്‍ പേര് മാറ്റുനത്തില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:2661
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "തട്ടു് '%s' ശൂന്യമല്ല"
-
-#: ../daemon/gvfsbackendgphoto2.c:2672
-msgid "Error deleting directory"
-msgstr "അറ കളയുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:2697
-msgid "Error deleting file"
-msgstr "ഫയല്‍ കളയുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:2749
-msgid "Can't write to directory"
-msgstr "അറയിലേക്ക് എഴുതാന്‍ കഴിയുന്നില്ല"
-
-#: ../daemon/gvfsbackendgphoto2.c:2796
-msgid "Cannot allocate new file to append to"
-msgstr "ഇത് ചേര്‍ക്കണ്ട ഫയല്‍ അലോക്കേറ്റ് ചെയ്യാന്‍ കഴിഞ്ഞില്ല (സ്ഥലം കണ്ടു പിടിക്കാന്‍ കഴിഞ്ഞില്ല)"
-
-#: ../daemon/gvfsbackendgphoto2.c:2810
-msgid "Cannot read file to append to"
-msgstr "ഇത് ചേര്‍ക്കണ്ട ഫയല്‍ വായിക്കാന്‍ കഴിയുന്നില്ല"
-
-#: ../daemon/gvfsbackendgphoto2.c:2820
-msgid "Cannot get data of file to append to"
-msgstr "ഇത് ചേര്‍ക്കണ്ട ഫയലിന്റെ വിവരങ്ങള്‍ ലഭിക്കുന്നില്ല"
-
-#: ../daemon/gvfsbackendgphoto2.c:3106
-msgid "Error writing file"
-msgstr "ഫയല്‍ എഴുതുന്നതില്‍ പിശക്"
-
-#: ../daemon/gvfsbackendgphoto2.c:3153
-msgid "Not supported (not same directory)"
-msgstr "പിന്തുണയ്ക്കുന്നില്ല (അതേ അറയല്ല)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3165
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "പിന്തുണയ്ക്കുന്നില്ല (സ്രോതസ്സ് അറയാണ്, ലക്ഷ്യം അറയാണ്)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3173
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "പിന്തുണയ്ക്കുന്നില്ല (സ്രോതസ്സ് അറയാണ്, ലക്ഷ്യം നിലവിലുള്ള ഫയലാണ്)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3185
-msgid "Not supported (src is file, dst is dir)"
-msgstr "പിന്തുണയ്ക്കുന്നില്ല (സ്രോതസ്സ് ഫയലാണ് , ലക്ഷ്യം അറയാണ്)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP ക്ലയന്റില്‍ പിശക്: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (സാധുവല്ലാത്ത എന്‍കോഡിങ്)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "തട്ടിനുള്ള അറിയിപ്പ് പിന്തുണയ്ക്കുന്നില്ല"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "വിന്‍ഡോസ് ശൃംഖല"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "പ്രാദേശിക ശ്രംഖല (നെറ്റ്വര്‍ക്ക്)"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "ശ്രംഖല സ്ഥാനം നിരീക്ഷിയ്ക്കുക"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s-ല്‍ %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "ഉപകരണവുമായുള്ള ബന്ധം നഷ്ടപ്പെട്ടു"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "ഉപകരണം ഒരു സോഫ്റ്റ്‌വെയര്‍ പുതുക്കല്‍ ആവശ്യപ്പെടുന്നു"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh പ്രോഗ്രാമില്‍ നിന്നും അപ്രതീക്ഷിതമായി പുറത്തു് കടന്നിരിക്കുന്നു"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "ഹോസ്റ്റിന്റെ പേരു് ലഭ്യമല്ല"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "ഹോസ്റ്റിലേക്കുള്ള വഴി ലഭ്യമല്ല"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "സെര്‍വര്‍ ബന്ധം നിഷേധിച്ചിരിക്കുന്നു"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "ഹോസ്റ്റ് കീയുടെ തിരിച്ചറിയല്‍ പരാജയപ്പെട്ടിരിക്കുന്നു"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "ssh പ്രോഗ്രാം സ്പോണ്‍ ചെയ്യുവാന്‍ സാധ്യമായില്ല"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ssh പ്രോഗ്രാം സ്പോണ്‍ ചെയ്യുവാന്‍ സാധ്യമായില്ല: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "ലോഗിന്‍ ചെയ്യുന്നതിനുള്ള സമയം കഴിഞ്ഞിരിക്കുന്നു"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "കീയ്ക്കുള്ള അടയാളവാചകം നല്‍കുക"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "അടയാളവാക്കു് നല്‍കുക"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "അടയാളവാക്കു് അയയ്ക്കുവാന്‍ സാധ്യമല്ല"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "ഏതായാലും അകത്തുകയറുക"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "അകത്തുകയറല്‍ റദ്ദാക്കുക"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"ദൂര കമ്പ്യൂടറുടെ (%s) തിരിച്ചറിയല്‍ അറിയുന്നതല്ല.\n"
-"ഇത് നിങ്ങള്‍ ഒരു കമ്പ്യൂടറില്‍ ആദ്യത്തെ തവണ അകത്തുകയറുമ്പോള്‍ സംഭവിയ്ക്കുന്നു.\n"
-"\n"
-"ദൂര കമ്പ്യൂടര്‍ അയച്ച ഹിരിച്ചറിയല്‍ %s ആണ്. നിങ്ങള്‍ക്ക് വളരെ ഉറപ്പുണ്ടെങ്കില്‍ തുടരാം, സിസ്റ്റം "
-"പരിപാലകനുമായി ബന്ധപ്പെടുക."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "അകത്തകയറുന്നതിനുള്ള സംഭാഷണം റദ്ദാക്കിയിരിക്കുന്നു"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "ഹോസ്റ്റ് തിരിച്ചറിയല്‍ വിവരം അയയ്ക്കാന്‍ കഴിയുന്നില്ല"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "സമ്പ്രദായത്തില്‍ പിഴവ്"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "%s-ല്‍ sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "പിന്തുണയ്ക്കുന്ന ssh കമാന്‍ഡ് ലഭ്യമായില്ല"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "പരാജയം"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "സാധുവല്ലാത്ത മറുപടി ലഭിച്ചിരിക്കുന്നു"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "കരുതല്‍ പകര്‍പ്പു് ഫയല്‍ ഉണ്ടാക്കുന്നതില്‍ പിശക്: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "താല്‍ക്കാലിക ഫയല്‍ ഉണ്ടാകുവാന്‍ സാധ്യമായില്ല"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "ഒരു തട്ടിന്റെ പുറത്ത് മറ്റൊരെണ്ണം നീക്കുവാന്‍ സാധ്യമല്ല"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "%s-ല്‍ %s പങ്കിടുന്നതിനായി അടയാളവാക്കു് ആവശ്യമുണ്ട്"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "ആന്തരിക പിശക് (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "വിന്‍ഡോസ് ഷെയര്‍ മൌണ്ട് ചെയ്യുന്നതില്‍ പരാജയം"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "പിന്തുണലഭ്യമല്ലാത്ത തരത്തിലുള്ള തിരച്ചില്‍"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "കരുതല്‍ പകര്‍പ്പിനുള്ള ഫയല്‍ ഉണ്ടാക്കുന്നത് പരാജയപ്പെട്ടു: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "ഫയല്‍ നീക്കം ചെയ്യുന്നതില്‍ പിശക്: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "ഫയല്‍ നീക്കുന്നതില്‍ പിശക്: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "ലക്ഷ്യസ്ഥാനത്തുള്ള ഫയല്‍ നീക്കുന്നതില്‍ പിശക്: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "ആവര്‍ത്തിച്ച് തട്ടു് നീക്കുവാന്‍ സാധ്യമല്ല"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "വിന്‍ഡോസ് ഷെയറുകളുടെ ഫയല്‍ സിസ്റ്റം സേവനം"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "%s-ല്‍ വിന്‍ഡോസ് ഷെയറുകള്‍"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "ഫയല്‍ മൌണ്ടു് ചെയ്യാവുന്ന അല്ല"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "ഒരു സാധാരണ ഫയല്‍ അല്ല"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "വിന്‍ഡോസ് ശൃംഖല ഫയല്‍സിസ്റ്റം സേവനം"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1226
-msgid "Trash"
-msgstr "ചവറ്റുകുട്ട"
-
-#: ../daemon/gvfsbackendtrash.c:1016
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (ചവറ്റുകുട്ടയില്‍)"
-
-#: ../daemon/gvfsbackendtrash.c:1327
-msgid "Can't delete trash"
-msgstr "ചവറ്റുകുട്ട നീക്കം ചെയ്യുവാന്‍ സാധ്യമല്ല"
-
-#: ../daemon/gvfsbackendtrash.c:1674 ../daemon/gvfsbackendtrash.c:1749
-msgid "Trash directory notification not supported"
-msgstr "ചവറ്റുകുട്ടയ്ക്കുള്ള അറിയിപ്പ് പിന്തുണയ്ക്കുന്നില്ല"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "സാധുവല്ലാത്ത ബാക്കെന്‍ഡ് രീതി"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "fd അയയ്ക്കുന്നതില്‍ പിശക്: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "ബാക്കെന്‍ഡ് പ്രവര്‍ത്തനം പിന്തുണയ്ക്കുന്നില്ല"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "ബാക്കെന്‍ഡ് സിംലിങ്കുകള്‍ പിന്തുണയ്ക്കുന്നില്ല"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "സാധുവല്ലാത്ത ഡിബസ് സന്ദേശം"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "പഴയ ഡെമണ്‍ മാറ്റി എഴുതുക."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "ഫ്യൂസ് തുടങ്ങുവാന്‍ പാടില്ല."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS ഡെമണ്‍"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GVFS-നുള്ള പ്രധാന ഡെമണ്‍"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "കൂടുതല്‍ വിവരങ്ങള്‍ക്കായി \"%s --help\" ഉപയോഗിക്കുക."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "സ്പോണ്‍ഡ് ചൈള്‍ഡില്‍ നിന്നും സാധുവല്ലാത്ത ആര്‍ഗ്യുമെന്റുകള്‍"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "ഓട്ടോമൌണ്ട് പരാജയപ്പെട്ടിരിക്കുന്നു: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "പറഞ്ഞിരിക്കുന്ന സ്ഥലം മൌണ്ട് ചെയ്തിട്ടില്ല"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "പറഞ്ഞിരിക്കുന്ന സ്ഥലം പിന്തുണയ്ക്കുന്നില്ല"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "സ്ഥലം നിലവില്‍ മൌണ്ട് ചെയ്തിരിക്കുന്നു"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "സ്ഥലം മൌണ്ട് ചെയ്യുവാന്‍ സാധ്യമല്ല"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "സിഡി-റോം"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "സിഡി-ആര്‍"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "സിഡി-ആര്‍ഡബ്ലിയു"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "ഡിവിഡി-റോം"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "ഡിവിഡി+ആര്‍"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "ഡിവിഡി+ആര്‍ഡബ്ലിയു"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "ഡിവിഡി-ആര്‍"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "ഡിവിഡി-ആര്‍ഡബ്ലിയു"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "ഡിവിഡി-റാം"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "ഡിവിഡി±ആര്‍"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "ഡിവിഡി±ആര്‍ഡബ്ലിയു"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "എച്ഡിഡിവിഡി"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "എച്ഡിഡിവിഡി-ആര്‍"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "എച്ഡിഡിവിഡി-ആര്‍ഡബ്ലിയു"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "ബ്ലു-റേ"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "ബ്ലു-റേ-ആര്‍"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "ബ്ലു-റേ-ആര്‍ഇ"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s ‍ഡ്രൈവ്"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "ഫ്ലോപ്പി ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "സോഫ്റ്റ്‌വെയര്‍ റെയിഡ് ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "യുഎസ്ബി ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "അടാ ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "സ്കസി ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "ഫയര്‍വയര്‍ ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "ടേപ്പ് ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "കോംപാക്ട്ഫ്ലാഷ് ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "മെമ്മറിസ്റ്റിക് ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "സ്മാര്‍ട്ട്മീഡിയാ ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "എസ്ഡി/എംഎംസി ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "സിപ്പ് ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "ജാസ് ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "തംബ് ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "മാസ് സ്റ്റോറേജ് ഡ്രൈവ്"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"സിഡി പുറത്തെടുക്കുന്നതില്‍ പരാജയപ്പെട്ടു; മീഡിയയിലുള്ള ഒന്നോ അതിലധികമോ വോള്യമുകള്‍ തിരക്കിലാണ്."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f കെബി"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f എംബി"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f ജിബി"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "മിക്സ്ഡ് ഓഡിയോ/ഡേറ്റാ ഡിസ്ക്"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "%s മീഡിയാ"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s എന്‍ക്രിപ്റ്റഡ് ഡേറ്റാ"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "സിഡി-റോം ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "ഒഴിഞ്ഞ സിഡി-റോം ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "സിഡി-ആര്‍ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "ഒഴിഞ്ഞ സിഡി-ആര്‍ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "സിഡി-ആര്‍ഡബ്ലിയു ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "ഒഴിഞ്ഞ സിഡി-ആര്‍ഡബ്ലിയു ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "ഡിവിഡി-റോം ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "ഒഴിഞ്ഞ ഡിവിഡി-റോം ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "ഡിവിഡി-റാം ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "ഒഴിഞ്ഞ ഡിവിഡി-റാം ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "ഡിവിഡി-ആര്‍ഡബ്ലിയു ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "ഒഴിഞ്ഞ ഡിവിഡി-ആര്‍ഡബ്ലിയു ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "ഡിവി‍ഡി+ആര്‍ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "ഒഴിഞ്ഞ ഡിവി‍ഡി+ആര്‍ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "ഡിവി‍ഡി+ആര്‍ഡബ്ലിയു ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "ഒഴിഞ്ഞ ഡിവി‍ഡി+ആര്‍ഡബ്ലിയു ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "ഡിവി‍ഡി+ആര്‍ ഡിഎല്‍ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "ഒഴിഞ്ഞ ഡിവി‍ഡി+ആര്‍ ഡിഎല്‍ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "ബ്ലു-റേ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "ഒഴിഞ്ഞ ബ്ലു-റേ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "ബ്ലു-റേ ആര്‍ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "ഒഴിഞ്ഞ ബ്ലു-റേ ആര്‍ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "ബ്ലു-റേ ആര്‍ഡബ്ലിയു ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "ഒഴിഞ്ഞ ബ്ലു-റേ ആര്‍ഡബ്ലിയു ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "എച്ഡി ഡിവിഡി ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "ഒഴിഞ്ഞ എച്ഡി ഡിവിഡി ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "എച്ഡി ഡിവിഡി-ആര്‍ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "ഒഴിഞ്ഞ എച്ഡി ഡിവിഡി-ആര്‍ഡബ്ലിയു ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "എച്ഡി ഡിവിഡി-ആര്‍ഡബ്ലിയു ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "ഒഴിഞ്ഞ എച്ഡി ഡിവിഡി-ആര്‍ഡബ്ലിയു ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "എംഓ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "ഒഴിഞ്ഞ എംഓ ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "ഡിസ്ക്"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "ഒഴിഞ്ഞ ഡിസ്ക്"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: ഫയല്‍ തുറക്കുന്നതില്‍ പിശക്: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, stdout-ലേക്ക് എഴുതുന്നതില്‍ പിശക്"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: വായിക്കുന്നതില്‍ പിശക്: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:അടയ്ക്കുന്നതില്‍ പിശക്: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "സ്ഥാനം... - സാധാരണ ഔട്ട്പുട്ടിലേക്ക് സ്ഥാനങ്ങള്‍ കൂട്ടിചേര്‍ക്കുക."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"സ്ഥാനങ്ങളില്‍ ഫയലുകള്‍ കൂട്ടിചേര്‍ത്ത് സാധാരണ ഔട്ട്പുട്ടിലേക്ക് പ്രിന്റ് ചെയ്യുക. പഴയ cat പോലെ തന്നെ "
-"പ്രവര്‍ത്തിക്കുന്നു, പക്ഷേ ലോക്കല്‍ ഫയലുകള്‍ക്ക് പകരം gvfs സ്ഥാനം ഉപയോഗിക്കുന്നു: ഉദാഹരണത്തിന്, "
-"നിങ്ങള്‍ക്ക് കൂട്ടിചേര്‍ക്കുന്നതിനുള്ള സ്ഥാനമായി smb://server/resource/file.txt എന്ന് "
-"ഉപയോഗിക്കാം."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"കുറിപ്പ്: -n, -T അല്ലെങ്കില്‍ other എന്നിങ്ങനെയുള്ള ഫോര്‍മാറ്റിങ് ഉപാധികള്‍ ആവശ്യമെങ്കില്‍ cat "
-"കമാന്‍ഡില്‍ | ഉപയോഗിക്കുക"
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: ലഭ്യമല്ലാത്ത സ്ഥലങ്ങള്‍"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: സ്ഥലം തുറക്കുന്നതില്‍ പിശക്: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: പ്രയോഗം ലഭ്യമാക്കുന്നതില്‍ പിശക്: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "ഫയലുകള്‍... - രജിസ്ടര്‍ ചെയ്തിരിക്കുന്ന പ്രയോഗങ്ങളുപയോഗിച്ച് ഫയലുകള്‍ തുറക്കുക."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr "ഇത്തരത്തിലുള്ള ഫയലുകള്‍ കൈകാര്യം ചെയ്യുന്നതിന് സ്വതവേയുള്ള പ്രയോഗം ഉപയോഗിച്ച് ഫയല്‍ തുറക്കുക."
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "%s-ലുള്ള ഓഡിയോ ഡിസ്ക്"
-
-#~ msgid "The file does not exist"
-#~ msgstr "ഫയല്‍ നിലവിലില്ല"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "%.1f kB മീഡിയാ"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "%.1f MB മീഡിയാ"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "%.1f GB മീഡിയാ"
diff --git a/po/mr.po b/po/mr.po
deleted file mode 100644
index 7fe9c570..00000000
--- a/po/mr.po
+++ /dev/null
@@ -1,1532 +0,0 @@
-# translation of mr.po to marathi
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Sandeep Shedmake <sandeep.shedmake@gmail.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: mr\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-05 07:54+0000\n"
-"PO-Revision-Date: 2008-09-11 12:05+0530\n"
-"Last-Translator: Sandeep Shedmake <sandeep.shedmake@gmail.com>\n"
-"Language-Team: marathi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "कार्यपध्दती समर्थीत नाही, अन्य आरोहणवरील फाइलं"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info पासून अवैध परतीचे मुल्य"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info पासून अवैध परतीचे मुल्य"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "स्ट्रीम फाइल वर्णनकर्ता प्राप्त करू शकला नाही"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "उघडा पासून अवैध परतीचे मुल्य"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "स्ट्रीम फाइल वर्णनकर्ता प्राप्त करू शकले नाही"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "call पासून अवैध परतीचे मुल्य"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info पासून अवैध परतीचे मुल्य"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "अंतर्भूतीत आरोहण शोधू शकले नाही"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "अवैध फाइलनाव %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info पासून अवैध परतीचे मुल्य"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir पासून अवैध परतीचे मुल्य"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file पासून अवैध परतीचे मुल्य"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "स्ट्रीम शिष्टाचारातील त्रुटी: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "स्ट्रीमचे शेवट"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "कार्य रद्द करण्यात आले"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "श्रृंखलेवर सीक समर्थित नाही"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "query info पध्दती समर्थीत नाही"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "स्ट्रीमवर चौकशी विषयक माहिती समर्थीत नाही"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "आरोहण माहिती प्राप्त करतेवेळी त्रुटी: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "डीमनशी जुळवणी करतेवेळी त्रुटी: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "सॉकेट बनवितेवेळी त्रुटी: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "सॉकेटशी जुळवणी करतेवेळी त्रुटी: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "अवैध फाइल माहिती स्वरूपन"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "अवैध गुणधर्म माहिती यादी अनुक्रम"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "D-Bus शी जुळवणी करतेवेळी त्रुटी: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s फाइलप्रणाली सेवा"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "चूक: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "वापरणी: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "वापरणी: %s गुणविशेष=मुल्य गुणविशेष=मुल्य ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "आरोहण प्रकार निर्धारीत नाही"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s करीता आरोहणकेंद्र आधिपासूनच कार्यरत आहे"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "आरोहण डीमन सुरू करण्यास त्रुटी"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ आढळल्यास %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "यजमाननाव निश्चित केले नाही"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "अवैध अनारोहण स्पेक"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "फाइल अस्तित्वात नाही"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "फाइल संचयीका नाही"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "बनवा"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "तात्पुरती संचयीका बनविण्यास अपयशी"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "या प्रकारची फाइल किंवा संचयीका नाही"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "संचयीका रिकामी नाही"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "संचयीकावर फाइलची प्रत बनवू शकला नाही"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD निर्माता"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "फाइल उपलब्ध आहे"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "बॅकऐंड द्वारे कार्यपध्दती समर्थीत नाही"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "लक्ष मार्गात फाइल किंवा संचयीका नाही"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "संचयीकेवर संचयीकेची प्रत बनवू शकत नाही"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "लक्ष्य फाइल अस्तित्वात आहे"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "संचयीकेची पुनः प्रत बनवू शकत नाही"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "समर्थीत नाही"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "प्रणाली बसशी जुळवणी स्थापीत करू शकत नाही"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "libhal संदर्भ बनवू शकत नाही"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "libhal प्रारंभ करू शकत नाही"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "ड्राइव्ह निर्धारीत नाही"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "ड्राइव्ह %s शोधू शकले नाही"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "ड्राइव्ह %s मध्ये आवाज फाइल समाविष्ट नाही"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "%s वर cdda आरोहण"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "श्राव्य डिस्क"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "फाइल प्रणाली व्यस्थ आहे: %d उघडे फाइल"
-msgstr[1] "फाइल प्रणाली व्यस्थ आहे: %d उघडे फाइलं"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "ड्राइव्ह %s वरील फाइल %s नाही"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "ड्राइव्ह %s वरील 'paranoia' मध्ये त्रुटी"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "ड्राइव्ह %s वरील स्ट्रीम संचयनवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "या प्रकारची फाइल नाही"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "फाइल जी अस्तित्वात नाही किंवा ती संगीत फाइल नाही"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "ऑडीओ CD फाइलप्रणाली सेवा"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "संगणक"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "फाइलप्रणाली"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "संचयीका उघडू शकत नाही"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "आरोहण फाइल उघडू शकले नाही"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "आंतरीक त्रुटी: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "फाइल आरोहण जोगी नाही"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "ड्राइव्ह मध्ये मिडीया नाही"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "आरोहणजोगी फाइल नाही"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "फाइल अनारोहीत करू शकत नाही"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "फाइल बाहेर काढू शकत नाही"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP त्रुटी: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "प्रतिसाद वाचू शकले नाही"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "प्रतिसाद रिकामे करा"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "सर्वर पासून अनपेक्षीत प्रतिसाद"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "अवैध प्रतिसाद"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV साठा"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "%s करीता गुप्तशब्द प्रविष्ट करा"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "कृपया प्रॉक्सी गुप्तशब्द प्रविष्ट करा"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "WebDAV कार्यान्वीत साठा नाही"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "%s वरील WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "विनंती बनवू शकला नाही"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "लक्ष्य फाइल आधिपासूनच अस्तित्वात आहे"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "फाइल बाहेरुन संपादित करण्यात आली"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "प्रतिकृत फाइल निर्माण अपयशी"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "फाइल किंवा संचयीकेवर नियंत्रण नाही."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "संजाळ"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "खाते समर्थीत नाही"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "यजमानने जुळवणी बंद केली"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "माहिती जुळवणी उघडू शकत नाही. कदाचीत तुमचे फायरवॉल हे करण्यास नकारते?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "माहिती जुळवणी बंद झाली"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "कार्यपध्दती अपयशी"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "सर्वरवर रिकामी जागा नाही"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "कार्यपध्दती समर्थीत नाही"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "परवानगी नाकारली"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "पान प्रकार अपरिचीत"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "अवैध फाइलनाव"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "अवैध प्रतिसाद"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "खंडीत स्थानांतरन"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "यजमानशी जुळवणी प्राप्त करू शकला नाही"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "%s वर ftp करीता गुप्तशब्द प्रविष्ट करा"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "गुप्तशब्द संवाद रद्द केले"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "%s वरील ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "%s वर %s ftp म्हणून"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "फाइल संयीका आहे"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "बॅकऐंड अजूनही समर्थीत नाही"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "फाइलनाव खूप लांब आहे"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "अवैध लक्ष्यनीय फाइलनाव"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: संचयीका किंवा फाइल अस्तित्वात आहे"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: यानुरूप फाइल किंवा संचयीका नाही"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: अवैध फाइलनाव"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: समर्थीत नाही"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "डीजीटल कॅमेरा (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s कॅमेरा"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s ऑडिओ वादक"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "कैमेरा"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "ऑडिओ वादक"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "संचयीका यादी प्राप्त करण्यास अपयशी"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "साधन निश्चित केले नाही"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "gphoto2 संदर्भ बनवू शकत नाही"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "कॅमेरा बनवितेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "साधन विषयी माहिती दाखल करतेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "साधन विषयी माहिती गोळा करतेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "साधन विषयी माहिती प्राप्त करतेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "कॅमेरा संभाषण पोर्ट स्थापीत करतेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "कॅमेरा प्रारंभ करतेवेळी त्रुटी"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "%s वर gphoto2 आरोहीत"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "कॅमेरा निश्चित केले नाही"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "फाइल घटक बनवितेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "फाइल प्राप्त करतेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "फाइल पासून माहिती प्राप्त करतेवेळी त्रूटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "कॅमेरा %s वरील स्ट्रीम करतेवेळी त्रुटी आढळली"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "संचयीका नाही"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "फाइल यादी प्राप्त करण्यास अपयशी"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "संचयीका बनवितेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "नाव आधिपासूनच अस्तित्वात आहे"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "नविन नाव खूपच लांब आहे"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "संचयीका पुन्हनामांकन करतेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "फाइल पुन्हनामांकीत करतेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "संचयीका '%s' रिकामी नाही"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "संचयीका काढून टाकतेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "फाइल काढूण टाकतेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "संचयीकावर लिहू शकत नाही"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "जोडण्याकरीता नविन फाइन पुरवू शकले नाही"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "जोडण्याकरीता फाइल वाचू शकत नाही"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "जोडण्याकरीता फाइलची माहिती प्राप्त करू शकत नाही"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "फाइल लिहीतेवेळी त्रुटी"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "समर्थीन नाही (समान संचयीका नाही)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "समर्थीत नाही (src संचयीका आहे, dst संचयीका आहे)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "समर्थीत नाही (src संचयीका आहे, dst अस्तित्वातील फाइल आहे)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "समर्थीत नाही (src फाइल आहे, dst संचयीका आहे)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP क्लाऐंट त्रुटी: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (अवैध ऐंकोडींग)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "संचयीका सूचना समर्थीत नाही"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows संजाळ"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "स्थानीक संजाळ"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "संजाळ स्थान नियंत्रण"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s वर %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "साधनाशी जुळवणी तुटली"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "साधनास सॉफ्टवेअर अद्ययावताची आवश्यकता आहे"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh कार्यक्रम अनपेक्षीतरित्या समाप्त झाले"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "यजमाननाव परिचीत नाही"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "यजमान करीता मार्ग नाही"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "सर्वर द्वारे नकारलेली जुळवणी"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "यजमान किल्ली तपास अपयशी"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "ssh कार्याक्रम गुंडाळण्यास अपयशी"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ssh कार्याक्रम गुंडाळण्यास अपयशी: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "दाखलन करतेवेळी कालबाह्यता"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "किल्ली करीता गुप्तवाक्यरचना प्रविष्ट करा"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "गुप्तशब्द द्या"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "गुप्तशब्द पाठवू शकले नाही"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "कसेही करून दाखल करा"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "दाखलन रद्द करा"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"दूरस्थ संगणकाची ओळख (%s) अपरिचीत आहे.\n"
-"हे तेव्हा होते जेव्हा तुम्ही संगणकावर दाखलन करता.\n"
-"\n"
-"दूरस्थ संगणकाने पाठविलेली ओळख %s आहे. पुढे जाणे सुरक्षीत आहे हे निश्चित करण्याकरीता, प्रणाली "
-"प्रशासकाशी संपर्क करा."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "दाखलन संवाद रद्द केले"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "यजमान ओळख निश्चितता पाठवू शकत नाही"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "शिष्टाचार त्रुटी"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "%s आढळल्यास sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "समर्थीत ssh आदेश शोधण्यास अपयशी"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "अफयशी"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "अवैध प्रतिसाद प्राप्त"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "प्रतिकृत फाइल बनवितेवेळी त्रुटी: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "तात्पुरती फाइल बनवू शकत नाही"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "संचयीकेवर संचयीका हलवू शकत नाही"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "%2$s वरील साठा %1$s करीता गुप्तशब्द आवश्यक"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "आंतरीक त्रुटी (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Windows साठा आरोहीत करण्यास अपयशी"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "असमर्थीत संचयन प्रकार"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "प्रतिकृत फाइल बनविण्यास अपयशी: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "फाइल काढूण टाकतेवेळी त्रुटी: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "फाइल स्थानांतरन करतेवेळी त्रूटी: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "लक्ष्य फाइल काढून टाकतेवेळी त्रूटी: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "संचयीका वारंवाररीत्या काढू शकत नाही"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows सहभागीय फाइलप्रणाली सेवा"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "%s वरील Windows साठा"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "फाइल आरोहणजोगी नाही"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "नियमीत फाइल नाही"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windows संजाळ फाइलप्रणाली सेवा"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "कचरापेटी"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (कचरापेटीत)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "कचरापेटी काढूण टाकू शकत नाही"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "कचरापेटी संचयीका सूचना समर्थीत नाही"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "अवैध प्रतिकृत प्रकार"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "fd पाठवितेवेळी त्रुटी: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "बॅकऐंड द्वारे Symlinks समर्थीत नाही"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "अवैध dbus संदेश"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "जुने डीमन बदलवा."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "फ्युज सुरू करू नका."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS डीमन"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GVFS करीता मुख्य डीमन"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "अधिक माहिती करीता \"%s --help\" वापरू पहा."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "बांधणीतील उपघटकाचे अवैध बाबी"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "स्वआरोहण अपयशी: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "निर्धारीत स्थान आरोहीत नाही"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "निर्धारीत स्थान अनारोहीत नाही"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "स्थान आधिपासूनच आरोहीत आहे"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "स्थान आधिपासूनच आरोहणजोगी नाही"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s ड्राइव्ह"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "फ्लॉपी ड्राईव्ह"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "सॉफ्टवेअर RAID ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Tape ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "झीप ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Thumb ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "व्यापक संचयन ड्राइव्ह"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "मिडीया बाहेर काढण्यास अपयशी; एक किंवा त्यापेक्षा जास्त मिडीयावरील खंड व्यस्थ आहे."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "मिश्र ऑडिओ/माहिती डीस्क"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "%s मिडीया"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s कुटलिपीक माहिती"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "सीडी-रॉम डिस्क"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "रिकामी CD-ROM डीस्क"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "सीडी-आर डिस्क"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "रिकामी CD-R डिस्क"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW डिस्क"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "रिकामी CD-RW डिस्क"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "डिव्हीडी-रॉम डिस्क"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "रिकामी DVD-ROM डीस्क"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "डिव्हीडी-रॅम डिस्क"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "रिकामी डिव्हीडी-रॅम डिस्क"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW डिस्क"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "रिकामी DVD-RW डिस्क"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R डिस्क"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "रिकामी DVD+R डिस्क"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW डिस्क"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "रिकामी DVD+RW डिस्क"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL डीस्क"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "रिकामी DVD+R DL डीस्क"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray डीस्क"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "रिकामी Blu-Ray डीस्क"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R डीस्क"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "रिकामी Blu-Ray R डीस्क"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW डीस्क"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "रिकामी Blu-Ray RW डीस्क"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD डीस्क"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "रिकामी HD DVD डीस्क"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R डीस्क"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "रिकामी HD DVD-R डीस्क"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW डीस्क"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "रिकामी HD DVD-RW डीस्क"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO डीस्क"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "रिकामी MO डीस्क"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "डीस्क"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "रिकामी डीस्क"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: फाइल उघडतेवेळी त्रुटी: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, stdout ला लिहीतेवेळी त्रुटी"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: वाचतेवेळी त्रुटी: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:बंद करतेवेळी त्रुट: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "स्थान... - स्थान यांना मानक आउटपुट करीता एकत्र लिहा."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"फाइलला स्थानास एकत्र करा व त्यास मानक आउटपुट करीता छपाई द्या. हे पारंपरीक cat "
-"उपकार्यक्रम सारखेच आहे, पण स्थानीक फाइल ऐवजी gvfs स्थानाचे वापर करते: उदाहरणार्थ तुम्ही "
-"एकत्र करण्याकरीताsmb://server/resource/file.txt स्थान वापरू शकता."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr "टिप: स्वरूपण पर्याय जसे की -n, -T किंवा अन्यची आवश्यकता असल्यास त्यास cat शी पाईप करा."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: न आढळलेली स्थान"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: स्थान उघडतेवेळी त्रुटी: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: अनुप्रयोग दाखल करतेवेळी त्रुटी: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "फाइल... - पंजीकृत अनुप्रयोगशी फाइल उघडा."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr "फाइल प्रकार हाताळणी करीता पंजीकृत मुलभूत अनुप्रयोगशी फाइल उघडा."
-
diff --git a/po/nb.po b/po/nb.po
deleted file mode 100644
index ea00bba4..00000000
--- a/po/nb.po
+++ /dev/null
@@ -1,1536 +0,0 @@
-# Norwegian translation of gvfs (bokmål dialect).
-# Copyright (C) 1999-2003 Free Software Foundation, Inc.
-# Kjartan Maraas <kmaraas@gnome.org>, 1999-2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs 0.1.x\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-04 15:28+0200\n"
-"PO-Revision-Date: 2008-09-04 15:29+0200\n"
-"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
-"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "Operasjonen er ikke støttet. Filer på forskjellige monteringspunkter"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Ugyldig returverdi fra get_info"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Ugyldig returverdi fra query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Kunne ikke finne fildeskriptor for strøm"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "Ugyldig returverdi fra open"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "Fant ikke fildeskriptor for strøm"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Ugyldig returverdi fra kall"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Ugyldig returverdi fra get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Kan ikke finne omsluttende montering"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Ugyldig filnavn %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Ugyldig returverdi fra query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "Ugyldig returverdi fra monitor_dir"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "Ugyldig returverdi fra monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Feil i protokoll for strøm: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Slutt på strømmen"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Operasjonen ble avbrutt"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Søking ikke støttet på strøm"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Spørreoperasjonen er ikke støttet"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Spørringsinformasjon ikke støttet på strøm"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Feil ved henting av informasjon om monteringspunkt: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Feil ved tilkobling til tjenesten: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Feil ved oppretting av plugg: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Feil ved tilkobling til plugg: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Ugyldig format for filinformasjon"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Ugyldig listeinnhold for attributtinformasjon"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Feil under tilkobling til D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Filsystemtjeneste for %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Feil: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Bruk %s --spawner dbus-id objekt_sti"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Bruk: %s key=verdi key=verdi..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Ingen monteringstype oppgitt"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "monteringspunkt for %s kjører allerede"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "feil under oppstart av monteringstjenesten"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ på %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Ingen vertsnavn oppgitt"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Ugyldige monteringsspesifikasjon"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Filen eksisterer ikke"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Filen er ikke en katalog"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Brenn"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Kan ikke opprette midlertidig katalog"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Filen eller katalogen finnes ikke"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Katalogen er ikke tom"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "Kan ikke kopiere fil over katalog"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD-oppretting"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Filen eksisterer"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Operasjonen ikke tillatt av motoren"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "Fil eller katalog finnes ikke i målsti"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "Kan ikke kopiere katalog over katalog"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "Målfilen eksisterer"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "Kan ikke kopiere katalog rekursivt"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Ikke støttet"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Kunne ikke koble til systembussen"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Kan ikke lage libhal-kontekst"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Kan ikke initiere libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Ingen stasjon oppgitt"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Kan ikke finne stasjon %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Stasjon %s inneholder ikke lydfiler"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda montert på %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Lyd-plate"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Filsystemet er opptatt: %d åpen fil"
-msgstr[1] "Filsystemet er opptatt: %d åpne filer"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Fil %s finnes ikke på lager %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Feil fra «paranoia» på stasjon %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Feil ved søking i strøm på stasjon %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Filen finnes ikke"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Filen eksisterer ikke eller er ikke et lydspor"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Filsystemtjeneste for lyd-CD"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Datamaskin"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Filsystem"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "Kan ikke åpne katalog"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Kan ikke åpne monterbar fil"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Intern feil: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Kan ikke montere fil"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Ingen medie i stasjonen"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Ikke en monterbar fil"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Kan ikke avmontere fil"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Kan ikke løse ut fil"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP-feil: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Kan ikke fortolke svar"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Tomt svar"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Uventet svar fra tjener"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Ugyldig svar"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV-ressurs"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Skriv inn passord for %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Skriv inn passord for proxy"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Ressursen støtter ikke WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV på %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Kan ikke opprette forespørsel"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Målfilen eksisterer allerede"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Filen er endret eksternt"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Oppretting av sikkerhetskopi feilet"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Kan ikke overvåke fil eller katalog."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Nettverk"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Kontoer er ikke støttet"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Vert lukket forbindelsen"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Kan ikke åpne dataforbindelse. Kanskje en brannmur forhindrer dette?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Dataforbindelse lukket"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Operasjonen feilet"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Ikke mer plass på tjener"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Operasjonen støttes ikke"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Tilgang nektet"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Ukjent sidetype"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Ugyldig filnavn"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Ugyldig svar"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "avbrutt overføring"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Kunne ikke koble til vert"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Skriv inn passord for ftp på %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Passorddialog avbrutt"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp på %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp som %s på %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Filen er en katalog"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "sikkerhetskopier er ikke støttet ennå"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "for langt filnavn"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Ugyldig filnavn for mål"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Katalog eller fil eksisterer"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Filen eller katalogen finnes ikke"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Ugyldig filnavn"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Ikke støttet"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digitalt kamera (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s kamera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s lydspiller"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Lydspiller"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Fikk ikke mappeliste"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Ingen enhet oppgitt"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Kan ikke opprette gphoto2-kontekst"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Feil ved oppretting av kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Feil ved lasting av enhetsinformasjon"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Feil ved oppslag på enhetsinformasjon"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Feil ved henting av enhetsinformasjon"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Feil ved oppsett av kommunikasjonsport for kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Feil ved initiering av kamera"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 montert på %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Ingen kamera oppgitt"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Feil under oppretting av filobjekt"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Feil under henting av fil"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Feil under henting av data fra fil"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Feil ved søking i strøm på kamera %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Ikke en katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Fant ikke filliste"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Feil ved oppretting av katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Navnet eksisterer allerede"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Nytt navn er for langt"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Feil ved endring av navn på katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Feil under endring av navn på fil"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Katalog «%s» er ikke tom"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Feil under sletting av katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Feil under sletting av fil"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "Kan ikke skrive til katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Kan ikke lage ny fil å legge til i"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Kan ikke lese fil for å legge til"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Kan ikke finne data om filen vi skal legge til"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Feil under skriving til fil"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Ikke støttet (ikke samme katalog)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Ikke støttet (kilde er en katalog, mål er en katalog)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Ikke støttet (kilde er en katalog, mål er en eksisterende fil)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Ikke støttet (kilde er fil, mål er katalog)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP-klientfeil: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (ugyldig koding)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Varsling for kataloger er ikke støttet"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows nettverk"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Lokalt nettverk"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Vis nettverkslokasjoner"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s på %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Mistet forbindelsen til enheten"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Enheten krever en programvareoppdatering"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "SSH-program avsluttet uventet"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Vertsnavn ikke kjent"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Ingen rute til vert"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Tilkobling nektet av tjener"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Verifisering av vertsnøkkel feilet"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Kan ikke starte SSH-program"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Kan ikke starte ssh-program: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Tidsavbrudd ved innlogging"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Oppgi passord for nøkkel"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Skriv inn passord"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Kunne ikke sende passord"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Logg inn likevel"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Avbryt pålogging"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Ekstern datamaskins identitet (%s) er ukjent.\n"
-"Dette skjer første gang du logger inn på en datamaskin.\n"
-"\n"
-"Identiteten som oversendes av ekstern datamaskin er %s. Kontakt "
-"systemadministrator hvis du vil være helt sikker på at det er trygt å "
-"fortsette."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Påloggingsdialog avbrutt"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Kan ikke sende bekreftelse på vertsidentifikasjon"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Feil i protokoll"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp på %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Kan ikke finne støttet ssh-kommando"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Feil"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Ugyldig svar mottatt"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Feil under oppretting av sikkerhetskopi: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Kan ikke opprette midlertidig fil"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Kan ikke flytte katalog over katalog"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Passord kreves for delt ressurs %s på %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Intern feil (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Klarte ikke å montere Windows-ressurs"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Søketype ikke støttet"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Oppretting av sikkerhetskopi feilet: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Feil under sletting av fil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Feil under flytting av fil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Feil under fjerning av målfil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Kan ikke flytte katalog rekursivt"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Filsystemtjeneste for delte Windows-ressurser"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Delt Windows-ressurs på %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Filen er ikke monterbar"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Ikke en vanlig fil"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Filsystemtjeneste for Windows nettverk"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Papirkurv"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (i papirkurv)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Kan ikke slette søppel"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Versling i papirkurv er ikke støttet"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Ugyldige type motor"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Feil ved sending av fd: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Symbolske lenker er ikke støttet av motoren"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Ugyldig dbus-melding"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Erstatt kjørende tjeneste."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Ikke start fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS-tjeneste"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Hovedtjeneste for GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Prøv «%s --help» for mer informasjon."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Ugyldige argumenter fra startet underprosess"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automatisk montering feilet: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Spesifisert lokasjon er ikke montert"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Spesifisert lokasjon er ikke støttet"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Lokasjonen er allerede montert"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Lokasjonen kan ikke monteres"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s-stasjon"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s-stasjon"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Diskettstasjon"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Stasjon med programvare-RAID"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB-disk"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA-stasjon"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI-stasjon"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Firewire-stasjon"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Tape-stasjon"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Compact Flash-stasjon"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Minnepinne"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia-stasjon"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip-stasjon"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz-stasjon"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Tommelstasjon"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Masselagringsenhet"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Klarte ikke å løse ut medie. Ett eller flere volum på mediet er opptatt."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "Blandet lyd- og dataplate"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "%s medie"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s krypterte data"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM-plate"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Tom CD-ROM plate"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R plate"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Tom CD-R plate"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW plate"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Tom CD-RW plate"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM plate"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Tom DVD-ROM plate"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM plate"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Tom DVD-RAM plate"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW plate"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Tom DVD-RW plate"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R plate"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Tom DVD+R plate"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW plate"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Tom DVD+RW plate"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL plate"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Tom DVD+R DL plate"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray plate"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Tom Blu-Ray plate"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R plate"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Tom Blu-Ray R plate"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW plate"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Tom Blu-Ray RW plate"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD plate"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Tom HD-DVD plate"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R plate"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Tom HD DVD-R plate"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW plate"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Tom HD DVD-RW plate"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO-plate"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Tom MO plate"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Disk"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Tom disk"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s feil ved åpning av fil: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, feil ved skriving til stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: feil ved lesing: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: feil ved lukking: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOKASJON... - slå sammen LOKASJONER til standard utdata."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Slå sammen filer ved lokasjoner og skriv ut til standard utdata. Fungerer "
-"som det vanlige cat-verktøyet, men bruker gvfs lokasjoner i stedet for "
-"lokale filer. Du kan for eksempel bruke smb://tjener/ressurs/fil.txt som en "
-"lokasjon som skal vises."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Merk: bare send dette gjennom cat hvis du trenger formateringsalternativene "
-"som -n -T eller annet."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: mangler lokasjoner"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: feil under åpning av lokasjon: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: feil under start av program: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILER... - åpne FILER med registrert program."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Åpner filen(e) med programmet som er registrert som forvalg for å håndtere "
-"denne type fil."
diff --git a/po/nl.po b/po/nl.po
deleted file mode 100644
index 7df500c0..00000000
--- a/po/nl.po
+++ /dev/null
@@ -1,1567 +0,0 @@
-# Dutch translation for gvfs
-#
-# This file is distributed under the same license as the gvfs package.
-#
-# Wouter Bolsterlee <wbolster@gnome.org>, 2008
-#
-# LET OP! Wouter wil graag de controle over dit bestand houden. Neem
-# a.u.b. eerst even contact op voordat je wijzigingen doorvoert.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-07 17:36+0200\n"
-"PO-Revision-Date: 2008-09-07 17:36+0200\n"
-"Last-Translator: Wouter Bolsterlee <wbolster@gnome.org>\n"
-"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "Bewerking niet ondersteund; bestanden op verschillende koppelpunten"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Ongeldig resultaat van ‘get_info’"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Ongeldig resultaat van ‘query_info’"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Kon ‘stream file descriptor’ niet verkrijgen"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "Ongeldig resultaat van ‘open’"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "Kon ‘stream file descriptor’ niet verkrijgen"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Ongeldig resultaat van aanroep"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Ongeldig resultaat van ‘get_filesystem_info’"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Kon omvattend koppelpunt niet vinden"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Ongeldige bestandsnaam: ‘%s’"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Ongeldig resultaat van ‘query_filesystem_info’"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "Ongeldig resultaat van ‘monitor_dir’"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "Ongeldig resultaat van ‘monitor_file’"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Fout in stream-protocol: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Einde van stream"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Bewerking is geannuleerd"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Zoeken in stream niet ondersteund"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Bewerking voor opvragen van informatie wordt niet ondersteund"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Opvragen van informatie van stream niet ondersteund"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Kon koppelingsinfo niet verkrijgen: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Fout bij verbinden naar voorziening: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Fout bij maken van socket: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Fout bij verbinden met socket: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Ongeldig formaat bestandsinformatie"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Ongeldige inhoud in eigenschappenlijst"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Fout bij verbinden met D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Bestandssysteemvoorziening voor %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Fout: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Gebruik: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Gebruik: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Geen koppeltype opgegeven"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "koppelpunt voor %s reeds actief"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "fout bij starten van koppelvoorziening"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ op %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Geen hostnaam opgegeven"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Ongeldige aankoppelspecificatie"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:921
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Bestand bestaat niet"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Het bestand is geen map"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Branden"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Kon tijdelijke map niet aanmaken"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Bestand of map bestaat niet"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Map is niet leeg"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "Kan bestand niet over map heen kopiëren"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Cd/dvd branden"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Bestand bestaat al"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Bewerking niet door backend ondersteund"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "Bestand of map niet in doelmap gevonden"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "Kan map niet over map heen kopiëren"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "Doelbestand bestaat al"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "Kan map niet recursief kopiëren"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Niet ondersteund"
-
-#: ../daemon/gvfsbackendcdda.c:299 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Kon niet met ‘system bus’ verbinden"
-
-#: ../daemon/gvfsbackendcdda.c:310 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Kon libhal-context niet aanmaken"
-
-#: ../daemon/gvfsbackendcdda.c:324 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Kon libhal niet initialiseren"
-
-#: ../daemon/gvfsbackendcdda.c:339 ../daemon/gvfsbackendcdda.c:415
-msgid "No drive specified"
-msgstr "Geen station opgegeven"
-
-#: ../daemon/gvfsbackendcdda.c:355
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Can station %s niet vinden"
-
-#: ../daemon/gvfsbackendcdda.c:368
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Station %s bevat geen audiobestanden"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:377
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda-koppeling op %s"
-
-#: ../daemon/gvfsbackendcdda.c:378 ../daemon/gvfsbackendcdda.c:895
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Audio-cd"
-
-#: ../daemon/gvfsbackendcdda.c:439 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Bestandssysteem is bezig: %d open bestand"
-msgstr[1] "Bestandssysteem is bezig: %d open bestanden"
-
-#: ../daemon/gvfsbackendcdda.c:630
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Geen bestand %s op station %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:739
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Fout van ‘paranoia’ op station %s"
-
-#: ../daemon/gvfsbackendcdda.c:802
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Fout bij zoeken in stream op station %s"
-
-#: ../daemon/gvfsbackendcdda.c:914 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Bestand bestaat niet"
-
-#: ../daemon/gvfsbackendcdda.c:928
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Het bestand bestaat niet of is geen muziekbestand"
-
-#: ../daemon/gvfsbackendcdda.c:1034
-msgid "Audio CD Filesystem Service"
-msgstr "Bestandssysteemvoorziening voor audio-cd's"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Computer"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Bestandssysteem"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "Kan map niet openen"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Kan aankoppelbaar bestand niet openen"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Interne fout: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Kan bestand niet aankoppelen"
-
-# Vrij vertaald (Wouter Bolsterlee)
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Geen media in schijf of lade"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Geen aankoppelbaar bestand"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Kan bestand niet ontkoppelen"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Kan bestand niet uitwerpen"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP-fout: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Kan antwoord niet verwerken"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Leeg antwoord"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Onverwacht antwoord van server"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Ongeldig antwoord"
-
-# Vrij vertaald (Wouter Bolsterlee)
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV-map"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Voer wachtwoord voor %s in"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Voer uw proxy-wachtwoord in"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Geen WebDAV-schijf"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV op %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Kon aanvraag niet aanmaken"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Doelbestand bestaat al"
-
-# Vrij vertaald (Wouter Bolsterlee)
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Het bestand is tussentijds gewijzigd"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Aanmaken reservekopie"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Kan bestand of map niet monitoren."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Netwerk"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Accounts worden niet ondersteund"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "De host heeft de verbinding verbroken"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Kan dataverbinding niet openen. Wellicht blokkeert uw firewall dit."
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Dataverbinding gesloten"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Bewerking is mislukt"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Geen vrije ruimte meer op server"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Bewerking niet ondersteund"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Toegang geweiger"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Paginatype onbekend"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Ongeldige bestandsnaam"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Ongeldig antwoord"
-
-# Vrij vertaald (Wouter Bolsterlee)
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "verzenden mislukt"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Kon niet met host verbinden"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Voer wachtwoord voor ftp op %s in"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Wachtwoordvenster geannuleerd"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp op %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp als %s op %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Bestand is een map"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "backups (nog) niet ondersteund"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "bestandsnaam te lang"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Ongeldige doelbestandsnaam"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Bestand of map bestaat al"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Bestand of map bestaat niet"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Ongeldige bestandsnaam"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Niet ondersteund"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digitale camera (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s-camera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s-muziekspeler"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Camera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Muziekspeler"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Opvragen van mappenlijst mislukt"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Geen apparaat opgegeven"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Kon gphoto2-context niet aanmaken"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Kon camera niet aanmaken"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Fout bij opvragen van apparaatinformatie"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Fout bij opvragen van apparaatinformatie"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Fout bij verkrijgen van apparaatinformatie"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Instellen communicatiepoort voor camera mislukt"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Fout bij initialiseren camera"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2-koppeling op %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Geen camera opgegeven"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Fout bij aanmaken bestandobject"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Fout bij ophalen bestand"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Fout bij verkrijgen data van bestand"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Fout bij zoeken in stream op camera %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Geen map"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Opvragen van bestandenlijst mislukt"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Fout bij aanmaken van map"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Naam bestaat al"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Nieuwe naam te lang"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Fout bij hernoemen van map"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Fout bij hernoemen van bestand"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Map ‘%s’ is niet leeg"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Fout bij verwijderen van map"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Fout bij verwijderen van bestand"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "Kan niet in map schrijven"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Kan geen nieuw bestand om naar te schrijven aanmaken"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Kan bestand om naar te schrijven niet lezen"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Kan data in bestand om naar te schrijven niet opvragen"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Fout bij schrijven van bestand"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Niet ondersteund (niet dezelfde map)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Niet ondersteund (bron is map, doel is map)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Niet ondersteund (bron is map, doel is bestaand bestand)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Niet ondersteund (bron is bestand, doel is map)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP-clientfout: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (ongeldige codering)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Mapwijzigingsmeldingen niet ondersteund"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows-netwerk"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Lokaal netwerk"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Monitor voor netwerklokaties"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s op %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Verbinding met apparaat verloren"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Het apparaat heeft een software-update nodig"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "SSH-programma werd onverwacht afgesloten"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Hostnaam onbekend"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Geen route naar host"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Verbinding geweigerd door server"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Controle van hostsleutel mislukt"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Kon SSH-programma niet starten"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Kon SSH-programma niet starten: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Wachttijd voor aanmelden overschreven"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Voer wachtwoordzin voor sleutel in"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Voer wachtwoord in"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Kon wachtwoord niet zenden"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Toch aanmelden"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Aanmelden annuleren"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"De identiteit van de computer op afstand (%s) is onbekend.\n"
-"Dit gebeurt wanneer u zich voor de eerste keer bij een computer aanmeldt.\n"
-"\n"
-"De identiteit die door de computer op afstand is verzonden is %s. Indien u "
-"absoluut zeker wilt weten of het veilig is om door te gaan, neem dan contact "
-"op met de systeembeheerder."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Aanmeldvenster geannuleerd"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Kan informatie over host-identiteit niet zenden"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Protocolfout"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp op %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Kon geen ondersteund SSH-programma vinden"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Mislukt"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Ongeldig antwoord ontvangen"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Fout bij maken reservekopie: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Kon tijdelijk bestand niet maken"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Kan map niet over andere map heen verplaatsen"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Wachtwoord benodigd voor gedeelde map %s op %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Interne fout (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Kon gedeelde Windows-map niet aankoppelen"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Niet ondersteund zoektype"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Kon reservekopiebestand niet maken: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Fout bij verwijderen van bestand: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Fout bij verplaatsen van bestand: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Fout bij verwijderen doelbestand: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Kan map niet recursief verplaatsen"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Bestandssysteemvoorziening voor gedeelde Windows-mappen"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Gedeelde Windows-mappen op %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Het bestand is niet aankoppelbaar"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Geen normaal bestand"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Bestandssysteemvoorziening voor Windows-netwerken"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Prullenbak"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (in prullenbak)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Kan prullenbak niet legen"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Prullenbakwijzigingsmeldingen niet ondersteund"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Ongeldig backend-type"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Fout bij zenden naar ‘file descriptor’: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Symbolische verwijzingen niet door backend ondersteund"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Ongeldig D-Bus-bericht"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Oude voorziending vervangen."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Fuse niet starten."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS-voorziening"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Hoofdvoorziening voor GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Probeer ‘%s --help’ voor meer informatie."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Ongeldige parameters van opgestart dochterproces"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Auto-aankoppelen mislukt: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "De opgegeven locatie is niet aangekoppeld"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "De opgegeven locatie wordt niet ondersteund"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Locatie is reeds aangekoppeld"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Locatie is niet aankoppelbaar"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "Cd-rom"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "Cd-r"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "Cd-rw"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "Dvd-rom"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "Dvd+r"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "Dvd+rw"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "Dvd-r"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "Dvd-rw"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "Dvd-ram"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "Dvd±r"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "Dvd±rw"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "Hd-dvd"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "Hd-dvd-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "Hd-dvd-rw"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s-station"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s-station"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Diskettestation"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Software RAID-schijf"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB-schijf"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA-schijf"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI-schijf"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire-schijf"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Tape-station"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash-station"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick-station"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia-station"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC-station"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip-station"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz-station"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Thumb-station"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Opslagstation"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Kon media niet uitwerpen; een of meerdere volumina zijn bezig."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "Schijf met audio en data"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "Media van %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s versleutelde gegevens"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Cd-rom-schijf"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Lege cd-rom-schijf"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Cd-r-schijf"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Lege cd-r-schijf"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Cd-rw-schijf"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Lege cd-rw-schijf"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Dvd-rom-schijf"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Lege dvd-rom-schijf"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Dvd-ram-schijf"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Lege dvd-ram-schijf"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Dvd-rw-schijf"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Lege dvd-rw-schijf"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Dvd-r-schijf"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Lege dvd-r-schijf"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Dvd+rw-schijf"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Lege dvd+rw-schijf"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Dvd+r DL-schijf"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Lege dvd+r dl-schijf"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-ray-schijf"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Lege Blu-ray-schijf"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-ray-r-schijf"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Lege Blu-ray-r-schijf"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-ray-rw-schijf"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Lege Blu-ray-rw-schijf"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Hd-dvd-schijf"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Lege hd-dvd-schijf"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Hd-dvd-r-schijf"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Lege hd-dvd-r-schijf"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Hd-dvd-rw-schijf"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Lege hd-dvd-rw-schijf"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO-schijf"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Lege MO-schijf"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Schijf"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Lege schijf"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: fout bij openen van bestand: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, schrijffout op ‘stdout’"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: leesfout: %s\n"
-
-# Er moet een spatie in het origineel bij (Wouter Bolsterlee)
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: fout bij sluiten: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATIE… - LOCATIES achter elkaar weergeven op standaarduitvoer"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Bestanden op bepaalde locaties achter elkaar weergeven en op de "
-"standaarduitvoer tonen. Dit werkt net als het ‘cat’-programma, maar gebruikt "
-"gvfs-locaties in plaats van lokale bestanden. U kunt bijvoorbeeld iets als "
-"‘smb://server/map/naar/bestand.txt’ gebruiken als locatie."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Let op: gebruik een ‘pipe’ als u opmaakopties zoals ‘-n’ of ‘-T’ wilt "
-"gebruiken."
-
-# Vrij vertaald (Wouter Bolsterlee)
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: locatie ontbreekt"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: fout bij openen locatie: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: fout bij opstarten van toepassing: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "BESTANDEN… — BESTANDEN openen met standaardtoepassing."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Een of meerdere bestanden met de standaardtoepassing voor dit bestandstype "
-"openen."
-
-#~ msgid "Error listing folders"
-#~ msgstr "Fout bij opvragen van mappen"
-
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "Bestandssysteem is bezig: %d geopende bestanden"
-
-#~ msgid "File unavailable"
-#~ msgstr "Bestand niet beschikbaar"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "Media van %.1f kB"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "Media van %.1f MB"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "Media van %.1f GB"
-
-#~ msgid "Invalid reply from server."
-#~ msgstr "Ongeldig antwoord ontvangen van server."
diff --git a/po/nn.po b/po/nn.po
deleted file mode 100644
index 055c08c8..00000000
--- a/po/nn.po
+++ /dev/null
@@ -1,1350 +0,0 @@
-# Norwegian translation of gvfs (nynorsk dialect).
-# Copyright (C) 1999-2003 Free Software Foundation, Inc.
-# Kjartan Maraas <kmaraas@gnome.org>, 1999-2008.
-# Eskild Hustvedt <eskildh@gnome.org>, 2008
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs 0.1.x\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-09 15:18+0100\n"
-"PO-Revision-Date: 2008-03-31 10:17+0200\n"
-"Last-Translator: Eskild Hustvedt <eskildh@gnome.org>\n"
-"Language-Team: Norwegian nynorsk <i18n-no@lister.ping.uio.no>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:464 ../client/gdaemonfile.c:1867
-msgid "Operation not supported, files on different mounts"
-msgstr "Operasjonen er ikkje støtta. Filer på ulike monteringspunkt"
-
-#: ../client/gdaemonfile.c:758
-msgid "Invalid return value from get_info"
-msgstr "Ugyldig returverdi frå get_info"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from query_info"
-msgstr "Ugyldig returverdi frå query_info"
-
-#: ../client/gdaemonfile.c:865
-msgid "Couldn't get stream file descriptor"
-msgstr "Kunne ikkje finna fildeskriptor for straum"
-
-#: ../client/gdaemonfile.c:897 ../client/gdaemonfile.c:967
-#: ../client/gdaemonfile.c:1026 ../client/gdaemonfile.c:1085
-#: ../client/gdaemonfile.c:1147
-msgid "Invalid return value from open"
-msgstr "Ugyldig returverdi frå open"
-
-#: ../client/gdaemonfile.c:977 ../client/gdaemonfile.c:1036
-#: ../client/gdaemonfile.c:1095 ../client/gdaemonfile.c:1157
-msgid "Didn't get stream file descriptor"
-msgstr "Fann ikkje fildeskriptor for straum"
-
-#: ../client/gdaemonfile.c:1209 ../client/gdaemonfile.c:1226
-msgid "Invalid return value from call"
-msgstr "Ugyldig returverdi frå kall"
-
-#: ../client/gdaemonfile.c:1505
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Ugyldig returverdi frå get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1549
-msgid "Could not find enclosing mount"
-msgstr "Kan ikkje finna omsluttende montering"
-
-#: ../client/gdaemonfile.c:1579
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Ugyldig filnamn %s"
-
-#: ../client/gdaemonfile.c:1621
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Ugyldig returverdi frå query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2012
-msgid "Invalid return value from monitor_dir"
-msgstr "Ugyldig returverdi frå monitor_dir"
-
-#: ../client/gdaemonfile.c:2061
-msgid "Invalid return value from monitor_file"
-msgstr "Ugyldig returverdi frå monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Feil i protokoll for straum: %s"
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr "Slutt på straummen"
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendobexftp.c:774
-#: ../daemon/gvfsbackendobexftp.c:795 ../daemon/gvfsbackendobexftp.c:914
-#: ../daemon/gvfsbackendobexftp.c:1051 ../daemon/gvfsbackendobexftp.c:1115
-#: ../daemon/gvfsbackendobexftp.c:1252 ../daemon/gvfsbackendobexftp.c:1279
-#: ../daemon/gvfsbackendobexftp.c:1338 ../daemon/gvfsbackendobexftp.c:1360
-#: ../daemon/gvfsbackendobexftp.c:1420 ../daemon/gvfsbackendobexftp.c:1439
-#: ../daemon/gvfsbackendsmb.c:1015 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:297
-msgid "Operation was cancelled"
-msgstr "Operasjonen vart avbrota"
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr "Søking ikkje støtta på straum"
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr "Spørreoperasjonen er ikkje støtta"
-
-#: ../client/gdaemonvfs.c:731
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Feil ved henting av informasjon om monteringspunkt: %s"
-
-#: ../client/gvfsdaemondbus.c:559 ../client/gvfsdaemondbus.c:946
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Feil ved tilkopling til tenesten: %s"
-
-#: ../common/gsysutils.c:133
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Feil ved oppretting av plugg: %s"
-
-#: ../common/gsysutils.c:171
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Feil ved tilkopling til plugg: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Ugyldig format for filinformasjon"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Ugyldig listeinnhald for attributtinformasjon"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Feil under tilkopling til D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Filsystemteneste for %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Feil: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Bruk %s --spawner dbus-id objekt_stig"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Bruk: %s key=verdi key=verdi ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Inga monteringstype oppgjeven"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "monteringspunkt for %s køyrer allereie"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "feil under oppstart av monteringstenesten"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr "Brenn"
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr "Kan ikkje oppretta mellombels mappe"
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr "Fila eller mappa finst ikkje"
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1804
-msgid "Directory not empty"
-msgstr "Mappa er ikkje tom"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr "Kan ikkje kopiere fil over mappe"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "CD/DVD-oppretting"
-
-#: ../daemon/gvfsbackendburn.c:681 ../daemon/gvfsbackendcomputer.c:652
-#: ../daemon/gvfsbackenddnssd.c:393 ../daemon/gvfsbackendftp.c:846
-#: ../daemon/gvfsbackendnetwork.c:637
-#, c-format
-msgid "The file is not a directory"
-msgstr "Fila er ikkje ei mappe"
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "Fila eksisterer"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr "Fil eller mappe finst ikkje i målstig"
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr "Kan ikkje kopiere mappe over mappe"
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr "Målfila eksisterer"
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr "Kan ikkje kopiere mappe rekursivt"
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr "Ikkje støtta"
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr "Inga stasjon oppgjeven"
-
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Kan ikkje finna stasjon %s"
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Stasjon %s inneheld ikkje lydfiler"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda montert på %s"
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:492 ../hal/ghalvolume.c:299 ../hal/ghalvolume.c:320
-#, c-format
-msgid "Audio Disc"
-msgstr "Lyd-plate"
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Filsystemet er opptatt: %d open fil"
-msgstr[1] "Filsystemet er opptatt: %d opna filer"
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Fil %s finst ikkje på lagar %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Feil frå «paranoia» på stasjon %s"
-
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Feil ved søking i straum på stasjon %s"
-
-#: ../daemon/gvfsbackendcdda.c:818 ../daemon/gvfsbackendgphoto2.c:1695
-#, c-format
-msgid "No such file"
-msgstr "Fila finst ikkje"
-
-#: ../daemon/gvfsbackendcdda.c:825 ../daemon/gvfsbackendcomputer.c:573
-#: ../daemon/gvfsbackenddnssd.c:345 ../daemon/gvfsbackendftp.c:1956
-#: ../daemon/gvfsbackendnetwork.c:590 ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:866 ../daemon/gvfsbackendsmbbrowse.c:1037
-#: ../daemon/gvfsbackendsmbbrowse.c:1111
-#, c-format
-msgid "File doesn't exist"
-msgstr "Fila eksisterer ikkje"
-
-#: ../daemon/gvfsbackendcdda.c:832
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Fila eksisterer ikkje eller er ikkje eit lydspor"
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr "Filsystemteneste for lyd-CD"
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr "Datamaskin"
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr "Filsystem"
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendgphoto2.c:1687
-#: ../daemon/gvfsbackendobexftp.c:760 ../daemon/gvfsbackendtrash.c:638
-msgid "Can't open directory"
-msgstr "Kan ikkje opna mappe"
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr "Kan ikkje opna monterbar fil"
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr "Intern feil: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:930
-msgid "Can't mount file"
-msgstr "Kan ikkje montere fil"
-
-#: ../daemon/gvfsbackendcomputer.c:825
-msgid "No media in the drive"
-msgstr "Inga medie i stasjonen"
-
-#: ../daemon/gvfsbackendcomputer.c:882 ../daemon/gvfsbackendcomputer.c:973
-#: ../daemon/gvfsbackendcomputer.c:1073
-msgid "Not a mountable file"
-msgstr "Ikkje ein monterbar fil"
-
-#: ../daemon/gvfsbackendcomputer.c:988
-msgid "Can't unmount file"
-msgstr "Kan ikkje avmontere fil"
-
-#: ../daemon/gvfsbackendcomputer.c:1104
-msgid "Can't eject file"
-msgstr "Kan ikkje lause ut fil"
-
-#: ../daemon/gvfsbackenddav.c:269 ../daemon/gvfsbackenddav.c:1289
-#: ../daemon/gvfsbackendhttp.c:220
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP-feil: %s"
-
-#: ../daemon/gvfsbackenddav.c:285
-msgid "Could not parse response"
-msgstr "Kan ikkje fortolke svar"
-
-#: ../daemon/gvfsbackenddav.c:294
-msgid "Empty response"
-msgstr "Tomt svar"
-
-#: ../daemon/gvfsbackenddav.c:301
-msgid "Unexpected reply from server"
-msgstr "Uventet svar frå tenar"
-
-#: ../daemon/gvfsbackenddav.c:944 ../daemon/gvfsbackenddav.c:1421
-#, c-format
-msgid "Response invalid"
-msgstr "Ugyldig svar"
-
-#: ../daemon/gvfsbackenddav.c:1087
-msgid "WebDAV share"
-msgstr "WebDAV-ressurs"
-
-#: ../daemon/gvfsbackenddav.c:1089
-#, c-format
-msgid "Enter password for %s"
-msgstr "Skriv inn passord for %s"
-
-#: ../daemon/gvfsbackenddav.c:1092
-msgid "Please enter proxy password"
-msgstr "Skriv inn passord for mellomtenar"
-
-#: ../daemon/gvfsbackenddav.c:1206 ../daemon/gvfsbackendhttp.c:273
-#: ../daemon/gvfsbackendobexftp.c:605 ../daemon/gvfsbackendobexftp.c:616
-#: ../daemon/gvfsbackendsmb.c:595
-msgid "Invalid mount spec"
-msgstr "Ugyldige monteringsspesifikasjon"
-
-#: ../daemon/gvfsbackenddav.c:1293 ../daemon/gvfsbackenddav.c:1297
-msgid "Not a WebDAV enabled share"
-msgstr "Ressursen støttar ikkje WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1319
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV på %s"
-
-#: ../daemon/gvfsbackenddav.c:1377 ../daemon/gvfsbackenddav.c:1448
-msgid "Could not create request"
-msgstr "Kan ikkje oppretta førespurnad"
-
-#: ../daemon/gvfsbackenddav.c:1511 ../daemon/gvfsbackenddav.c:1764
-#: ../daemon/gvfsbackendftp.c:1559 ../daemon/gvfsbackendftp.c:2190
-#: ../daemon/gvfsbackendsmb.c:1701
-#, c-format
-msgid "Target file already exists"
-msgstr "Målfila eksisterer allereie"
-
-#: ../daemon/gvfsbackenddav.c:1584 ../daemon/gvfsbackendsftp.c:2662
-#: ../daemon/gvfsbackendsmb.c:983
-msgid "The file was externally modified"
-msgstr "Fila er endra eksternt"
-
-#: ../daemon/gvfsbackenddav.c:1615 ../daemon/gvfsbackendsmb.c:1021
-#: ../daemon/gvfsbackendsmb.c:1718
-msgid "Backup file creation failed"
-msgstr "Oppretting av sikkerhetskopi mislukkast"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Kan ikkje overvåke fil eller mappe."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Nettverk"
-
-#: ../daemon/gvfsbackendftp.c:224
-msgid "Accounts are unsupported"
-msgstr "Kontoer er ikkje støtta"
-
-#: ../daemon/gvfsbackendftp.c:228
-msgid "Host closed connection"
-msgstr "Vert lukka forbindelsen"
-
-#: ../daemon/gvfsbackendftp.c:232
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Kan ikkje opna datasamband. Kanskje ein brannmur forhindrer dette?"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Data connection closed"
-msgstr "Datasamband lukka"
-
-#: ../daemon/gvfsbackendftp.c:242
-msgid "File unavailable"
-msgstr "Fila er ikkje tilgjengeleg"
-
-#: ../daemon/gvfsbackendftp.c:246
-msgid "Operation failed"
-msgstr "Operasjonen mislukkast"
-
-#: ../daemon/gvfsbackendftp.c:251
-msgid "No space left on server"
-msgstr "Ikkje meir plass på tenar"
-
-#: ../daemon/gvfsbackendftp.c:259 ../daemon/gvfsbackendsftp.c:3685
-msgid "Operation unsupported"
-msgstr "Operasjonen støttes ikkje"
-
-#: ../daemon/gvfsbackendftp.c:263 ../daemon/gvfsbackendsftp.c:259
-msgid "Permission denied"
-msgstr "Tilgang nekta"
-
-#: ../daemon/gvfsbackendftp.c:267
-msgid "Page type unknown"
-msgstr "Ukjend sidetype"
-
-#: ../daemon/gvfsbackendftp.c:271 ../daemon/gvfsbackendftp.c:2060
-#, c-format
-msgid "Invalid filename"
-msgstr "Ugyldig filnamn"
-
-#: ../daemon/gvfsbackendftp.c:275 ../daemon/gvfsbackendftp.c:349
-#: ../daemon/gvfsbackendftp.c:378 ../daemon/gvfsbackendftp.c:397
-#: ../daemon/gvfsbackendftp.c:410 ../daemon/gvfsbackendftp.c:751
-#, c-format
-msgid "Invalid reply"
-msgstr "Ugyldig svar"
-
-#: ../daemon/gvfsbackendftp.c:517
-#, c-format
-msgid "broken transmission"
-msgstr "avbrota overføring"
-
-#: ../daemon/gvfsbackendftp.c:611 ../daemon/gvfsbackendftp.c:771
-#, c-format
-msgid "Could not connect to host"
-msgstr "Kunne ikkje kopla til vert"
-
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendftp.c:897 ../daemon/gvfsbackendsftp.c:1736
-#, c-format
-msgid "/ on %s"
-msgstr "/ på %s"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1259
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Skriv inn passord for ftp på %s"
-
-#: ../daemon/gvfsbackendftp.c:1279 ../daemon/gvfsbackendsftp.c:833
-msgid "Password dialog cancelled"
-msgstr "Passorddialog avbrota"
-
-#: ../daemon/gvfsbackendftp.c:1345
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp på %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1351
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp som %s på %s"
-
-#: ../daemon/gvfsbackendftp.c:1385 ../daemon/gvfsbackendsftp.c:1410
-msgid "No hostname specified"
-msgstr "Inga vertsnamn oppgjeven"
-
-#: ../daemon/gvfsbackendftp.c:1609 ../daemon/gvfsbackendftp.c:2151
-msgid "backups not supported yet"
-msgstr "sikkerhetskopier er ikkje støtta ennå"
-
-#: ../daemon/gvfsbackendftp.c:1685
-#, c-format
-msgid "filename too long"
-msgstr "for langt filnamn"
-
-#: ../daemon/gvfsbackendftp.c:2170
-#, c-format
-msgid "Invalid destination filename"
-msgstr "Ugyldig filnamn for mål"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:697
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digitalt kamera (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:843 ../hal/ghalvolume.c:399
-#, c-format
-msgid "%s Camera"
-msgstr "%s kamera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:846 ../hal/ghalvolume.c:394
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s lydspelar"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../hal/ghalvolume.c:408
-msgid "Camera"
-msgstr "Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:857 ../hal/ghalvolume.c:406
-msgid "Audio Player"
-msgstr "Lydspelar"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1539
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 montert på %s"
-
-#: ../daemon/gvfsbackendhttp.c:216
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP-klientfeil: %s"
-
-#: ../daemon/gvfsbackendhttp.c:534 ../daemon/gvfsbackendsftp.c:1724
-#: ../daemon/gvfsbackendsmb.c:1230 ../daemon/gvfsbackendtrash.c:963
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (ugyldig koding)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Varsling for kataloger er ikkje støtta"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:694
-msgid "Windows Network"
-msgstr "Windows nettverk"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Lokalt nettverk"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Vis nettverkslokasjonar"
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:444 ../daemon/gvfsbackendsmb.c:514
-#: ../daemon/gvfsbackendsmb.c:1223
-#, c-format
-msgid "%s on %s"
-msgstr "%s på %s"
-
-#: ../daemon/gvfsbackendsftp.c:251
-msgid "ssh program unexpectedly exited"
-msgstr "SSH-program avslutta uventet"
-
-#: ../daemon/gvfsbackendsftp.c:266
-msgid "Hostname not known"
-msgstr "Vertsnamn ikkje kjent"
-
-#: ../daemon/gvfsbackendsftp.c:273
-msgid "No route to host"
-msgstr "Inga rute til vert"
-
-#: ../daemon/gvfsbackendsftp.c:280
-msgid "Connection refused by server"
-msgstr "Tilkopling nekta av tenar"
-
-#: ../daemon/gvfsbackendsftp.c:287
-msgid "Host key verification failed"
-msgstr "Verifisering av vertsnøkkel mislukkast"
-
-#: ../daemon/gvfsbackendsftp.c:370
-msgid "Unable to spawn ssh program"
-msgstr "Kan ikkje starta SSH-program"
-
-#: ../daemon/gvfsbackendsftp.c:386
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Kan ikkje starta ssh-program: %s"
-
-#: ../daemon/gvfsbackendsftp.c:489 ../daemon/gvfsbackendsftp.c:741
-msgid "Timed out when logging in"
-msgstr "Tidsavbrudd ved innlogging"
-
-#: ../daemon/gvfsbackendsftp.c:817
-msgid "Enter passphrase for key"
-msgstr "Oppgi passord for nøkkel"
-
-#: ../daemon/gvfsbackendsftp.c:819
-msgid "Enter password"
-msgstr "Skriv inn passord"
-
-#: ../daemon/gvfsbackendsftp.c:880
-msgid "Can't send password"
-msgstr "Kunne ikkje sende passord"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Log In Anyway"
-msgstr "Logg inn likevel"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Cancel Login"
-msgstr "Avbryt pålogging"
-
-#: ../daemon/gvfsbackendsftp.c:898
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Ekstern datamaskins identitet (%s) er ukjend.\n"
-"Dette skjer første gong du logger inn på ein datamaskin.\n"
-"\n"
-"Identiteten som oversendes av ekstern datamaskin er %s. Kontakt systemadministrator viss du vil vera helt sikker på at det er trygt å halda fram."
-
-#: ../daemon/gvfsbackendsftp.c:918
-msgid "Login dialog cancelled"
-msgstr "Påloggingsdialog avbrota"
-
-#: ../daemon/gvfsbackendsftp.c:938
-msgid "Can't send host identity confirmation"
-msgstr "Kan ikkje sende bekreftelse på vertsidentifikasjon"
-
-#: ../daemon/gvfsbackendsftp.c:1329 ../daemon/gvfsbackendsftp.c:1352
-msgid "Protocol error"
-msgstr "Feil i protokoll"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1376
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp på %s"
-
-#: ../daemon/gvfsbackendsftp.c:1400
-msgid "Unable to find supported ssh command"
-msgstr "Kan ikkje finna støtta ssh-kommando"
-
-#: ../daemon/gvfsbackendsftp.c:1800
-msgid "File is directory"
-msgstr "Fila er ei mappe"
-
-#: ../daemon/gvfsbackendsftp.c:1809
-msgid "Failure"
-msgstr "Feil"
-
-#: ../daemon/gvfsbackendsftp.c:1874 ../daemon/gvfsbackendsftp.c:1936
-#: ../daemon/gvfsbackendsftp.c:1947 ../daemon/gvfsbackendsftp.c:2005
-#: ../daemon/gvfsbackendsftp.c:2095 ../daemon/gvfsbackendsftp.c:2124
-#: ../daemon/gvfsbackendsftp.c:2172 ../daemon/gvfsbackendsftp.c:2251
-#: ../daemon/gvfsbackendsftp.c:2362 ../daemon/gvfsbackendsftp.c:2403
-#: ../daemon/gvfsbackendsftp.c:2455 ../daemon/gvfsbackendsftp.c:2526
-#: ../daemon/gvfsbackendsftp.c:2546 ../daemon/gvfsbackendsftp.c:2700
-#: ../daemon/gvfsbackendsftp.c:2726 ../daemon/gvfsbackendsftp.c:2783
-#: ../daemon/gvfsbackendsftp.c:2842 ../daemon/gvfsbackendsftp.c:3122
-#: ../daemon/gvfsbackendsftp.c:3251 ../daemon/gvfsbackendsftp.c:3284
-#: ../daemon/gvfsbackendsftp.c:3386 ../daemon/gvfsbackendsftp.c:3427
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3519
-#: ../daemon/gvfsbackendsftp.c:3553 ../daemon/gvfsbackendsftp.c:3568
-#: ../daemon/gvfsbackendsftp.c:3587 ../daemon/gvfsbackendsftp.c:3665
-msgid "Invalid reply received"
-msgstr "Ugyldig svar motteken"
-
-#: ../daemon/gvfsbackendsftp.c:2193
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Feil under oppretting av sikkerhetskopi: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2608
-msgid "Unable to create temporary file"
-msgstr "Kan ikkje oppretta mellombels fil"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:214
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Passord kreves for delt ressurs %s på %s"
-
-#: ../daemon/gvfsbackendsmb.c:466 ../daemon/gvfsbackendsmb.c:506
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Intern feil (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:561
-msgid "Failed to mount Windows share"
-msgstr "Klarte ikkje å montere Windows-ressurs"
-
-#: ../daemon/gvfsbackendsmb.c:686 ../daemon/gvfsbackendsmb.c:1117
-msgid "Unsupported seek type"
-msgstr "Søkjetype ikkje støtta"
-
-#: ../daemon/gvfsbackendsmb.c:1171
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Oppretting av sikkerhetskopi mislukkast: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1602
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Feil under sletting av fil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1666
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Feil under flytting av fil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1690
-msgid "Can't move directory over directory"
-msgstr "Kan ikkje flytta mappe over mappe"
-
-#: ../daemon/gvfsbackendsmb.c:1738
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Feil under fjerning av målfil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1762
-msgid "Can't recursively move directory"
-msgstr "Kan ikkje flytta mappe rekursivt"
-
-#: ../daemon/gvfsbackendsmb.c:1825
-msgid "Windows Shares Filesystem Service"
-msgstr "Filsystemteneste for delte Windows-ressurser"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:702
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Delt Windows-ressurs på %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:794 ../daemon/gvfsbackendsmbbrowse.c:840
-msgid "The file is not a mountable"
-msgstr "Fila er ikkje monterbar"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:862
-msgid "Not a regular file"
-msgstr "Ikkje ein vanleg fil"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1107
-msgid "Not a directory"
-msgstr "Ikkje ei mappe"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1219
-msgid "Windows Network Filesystem Service"
-msgstr "Filsystemteneste for Windows nettverk"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:601 ../daemon/gvfsbackendtrash.c:1191
-msgid "Trash"
-msgstr "Papirkurv"
-
-#: ../daemon/gvfsbackendtrash.c:973
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (i papirkurv)"
-
-#: ../daemon/gvfsbackendtrash.c:1292
-msgid "Can't delete trash"
-msgstr "Kan ikkje slette søppel"
-
-#: ../daemon/gvfsbackendtrash.c:1639 ../daemon/gvfsbackendtrash.c:1714
-msgid "Trash directory notification not supported"
-msgstr "Varsling i papirkurv er ikkje støtta"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Ugyldige type-motor"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Feil ved sending av fd: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:119
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:169 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Operasjonen ikkje tillatt av motoren"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Symbolske lenkjer er ikkje støtta av motoren"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Ugyldig dbus-melding"
-
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr "Byt ut køyrande teneste."
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr "Ikkje start fuse."
-
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "GVFS-teneste"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr "Hovudteneste for GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:74
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:76 ../programs/gvfs-cat.c:165 ../programs/gvfs-cat.c:178
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:388 ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:133 ../programs/gvfs-open.c:146
-#: ../programs/gvfs-save.c:165 ../programs/gvfs-tree.c:253
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Prøv «%s --help» for meir informasjon."
-
-#: ../daemon/mount.c:432
-msgid "Invalid arguments from spawned child"
-msgstr "Ugyldige argumenter frå starta underprosess"
-
-#: ../daemon/mount.c:731
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automatisk montering mislukkast: %s"
-
-#: ../daemon/mount.c:776
-msgid "The specified location is not mounted"
-msgstr "Spesifisert stad er ikkje montert"
-
-#: ../daemon/mount.c:781
-msgid "The specified location is not supported"
-msgstr "Spesifisert stad er ikkje støtta"
-
-#: ../daemon/mount.c:944
-msgid "Location is already mounted"
-msgstr "Lokasjonen er allereie montert"
-
-#: ../daemon/mount.c:952
-msgid "Location is not mountable"
-msgstr "Lokasjonen kan ikkje monterast"
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:148
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:162
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:165
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:168
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../hal/ghaldrive.c:174
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../hal/ghaldrive.c:180
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:186
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s-stasjon"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:192
-#, c-format
-msgid "%s Drive"
-msgstr "%s-stasjon"
-
-#: ../hal/ghaldrive.c:196
-msgid "Floppy Drive"
-msgstr "Diskettstasjon"
-
-#: ../hal/ghaldrive.c:202
-msgid "Software RAID Drive"
-msgstr "Stasjon med programvare-RAID"
-
-#: ../hal/ghaldrive.c:204
-msgid "USB Drive"
-msgstr "USB-disk"
-
-#: ../hal/ghaldrive.c:206
-msgid "ATA Drive"
-msgstr "ATA-stasjon"
-
-#: ../hal/ghaldrive.c:208
-msgid "SCSI Drive"
-msgstr "SCSI-stasjon"
-
-#: ../hal/ghaldrive.c:210
-msgid "FireWire Drive"
-msgstr "Firewire-stasjon"
-
-#: ../hal/ghaldrive.c:214
-msgid "Tape Drive"
-msgstr "Tape-stasjon"
-
-#: ../hal/ghaldrive.c:216
-msgid "CompactFlash Drive"
-msgstr "Compact Flash-stasjon"
-
-#: ../hal/ghaldrive.c:218
-msgid "MemoryStick Drive"
-msgstr "Minnepinne"
-
-#: ../hal/ghaldrive.c:220
-msgid "SmartMedia Drive"
-msgstr "SmartMedia-stasjon"
-
-#: ../hal/ghaldrive.c:222
-msgid "SD/MMC Drive"
-msgstr "SD/MMC"
-
-#: ../hal/ghaldrive.c:224
-msgid "Zip Drive"
-msgstr "Zip-stasjon"
-
-#: ../hal/ghaldrive.c:226
-msgid "Jaz Drive"
-msgstr "Jaz-stasjon"
-
-#: ../hal/ghaldrive.c:228
-msgid "Thumb Drive"
-msgstr "Tommelstasjon"
-
-#: ../hal/ghaldrive.c:231
-msgid "Mass Storage Drive"
-msgstr "Masselagringseining"
-
-#: ../hal/ghaldrive.c:730
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Klarte ikkje å lause ut medie. Eitt eller fleire volum på mediet er opptatt."
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "CD-ROM Disc"
-msgstr "CD-ROM-plate"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "Blank CD-ROM Disc"
-msgstr "Tom CD-ROM plate"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "CD-R Disc"
-msgstr "CD-R plate"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "Blank CD-R Disc"
-msgstr "Tom CD-R plate"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "CD-RW Disc"
-msgstr "CD-RW plate"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "Blank CD-RW Disc"
-msgstr "Tom CD-RW plate"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM plate"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "Blank DVD-ROM Disc"
-msgstr "Tom DVD-ROM plate"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM plate"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "Blank DVD-RAM Disc"
-msgstr "Tom DVD-RAM plate"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "DVD-RW Disc"
-msgstr "DVD-RW plate"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "Blank DVD-RW Disc"
-msgstr "Tom DVD-RW plate"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "DVD+R Disc"
-msgstr "DVD+R plate"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "Blank DVD+R Disc"
-msgstr "Tom DVD+R plate"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "DVD+RW Disc"
-msgstr "DVD+RW plate"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "Blank DVD+RW Disc"
-msgstr "Tom DVD+RW plate"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL plate"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "Blank DVD+R DL Disc"
-msgstr "Tom DVD+R DL plate"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray plate"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blank Blu-Ray Disc"
-msgstr "Tom Blu-Ray plate"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R plate"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blank Blu-Ray R Disc"
-msgstr "Tom Blu-Ray R plate"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW plate"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Tom Blu-Ray RW plate"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "HD DVD Disc"
-msgstr "HD DVD plate"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "Blank HD DVD Disc"
-msgstr "Tom HD-DVD plate"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R plate"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "Blank HD DVD-R Disc"
-msgstr "Tom HD DVD-R plate"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW plate"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "Blank HD DVD-RW Disc"
-msgstr "Tom HD DVD-RW plate"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "MO Disc"
-msgstr "MO-plate"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "Blank MO Disc"
-msgstr "Tom MO plate"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Disc"
-msgstr "Disk"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Blank Disc"
-msgstr "Tom disk"
-
-#: ../hal/ghalmount.c:368
-#, c-format
-msgid "%.1f kB Media"
-msgstr "%.1f kB medie"
-
-#: ../hal/ghalmount.c:373
-#, c-format
-msgid "%.1f MB Media"
-msgstr "%.1f MB medie"
-
-#: ../hal/ghalmount.c:378
-#, c-format
-msgid "%.1f GB Media"
-msgstr "%.1f GB medie"
-
-#: ../hal/ghalmount.c:490 ../hal/ghalvolume.c:318
-msgid "Mixed Audio/Data Disc"
-msgstr "Blanda lyd- og dataplate"
-
-#: ../hal/ghalvolume.c:206
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../hal/ghalvolume.c:211
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../hal/ghalvolume.c:216
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:306
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s krypterte data"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:329
-#, c-format
-msgid "%s Media"
-msgstr "%s medie"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s feil ved opning av fil: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, feil ved skriving til stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: feil ved lesing: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: feil ved lukking: %s\n"
-
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOKASJON ... - slå saman LOKASJONER til standard utdata."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid "Concatenate files at locations and print to the standard output. Works just like the traditional cat utility, but using gvfs location instead local files: for example you can use something like smb://server/resource/file.txt as location to concatenate."
-msgstr "Slå saman filer ved lokasjonar og skriv ut til standard utdata. Fungerer som det vanlege cat-verktøyet, men brukar gvfs lokasjonar i staden for lokale filer. Du kan til dømes bruka smb://tenar/ressurs/fil.txt som ein stad som skal vert viste."
-
-#: ../programs/gvfs-cat.c:150
-msgid "Note: just pipe through cat if you need its formatting option like -n, -T or other."
-msgstr "Merk: berre send dette gjennom cat viss du treng formateringsalternativa som -n -T eller anna."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:176 ../programs/gvfs-open.c:144
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: manglar lokasjonar"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: feil under opning av stad: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: feil under start av program: %s\n"
-
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr "FILER ... - opna FILER med registrert program."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid "Opens the file(s) with the default application registered to handle the type of the file."
-msgstr "Opnar fila(e) med programmet som er registrert som forval for å handtere denne type fil."
diff --git a/po/pa.po b/po/pa.po
deleted file mode 100644
index c18795d2..00000000
--- a/po/pa.po
+++ /dev/null
@@ -1,1547 +0,0 @@
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Amanpreet Singh Alam <apreet.alam@gmail.com>, 2008.
-# Amanpreet Singh Alam <aalam@users.sf.net>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs.HEAD\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-05 07:54+0000\n"
-"PO-Revision-Date: 2008-09-14 19:38+0000\n"
-"Last-Translator: Amanpreet Singh Alam <aalam@users.sf.net>\n"
-"Language-Team: Punjabi/Panjabi <kde-i18n-doc@lists.kde.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: LoKalize 0.2\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "ਓਪਰੇਸ਼ਨ ਸਹਾਇਕ ਨਹੀਂ ਹੈ, ਫਾਇਲਾਂ ਵੱਖਰੇ ਮਾਊਂਟ ਉੱਤੇ ਹਨ"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info ਤੋਂ ਗਲਤ ਜਵਾਬ ਆਇਆ"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info ਤੋਂ ਗਲਤ ਜਵਾਬ ਆਇਆ"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "ਸਟਰੀਮ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ ਲਈ ਨਹੀਂ ਜਾ ਸਕੀ"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "ਖੋਲ੍ਹਣ ਤੋਂ ਗਲਤ ਮੁੱਲ ਮਿਲਿਆ"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "ਸਟਰੀਮ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ ਲਈ ਨਹੀਂ ਜਾ ਸਕਦੀ"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "ਕਾਲ ਤੋਂ ਗਲਤ ਵਾਪਿਸ"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info ਤੋਂ ਗਲਤ ਜਵਾਬ ਮੁੱਲ"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "ਇਨਕਲੋਜ਼ਿੰਗ ਮਾਊਂਟ ਨਹੀਂ ਲੱਭਿਆ ਜਾ ਸਕਿਆ"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "ਗਲਤ ਫਾਇਲ ਨਾਂ %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info ਤੋਂ ਗਲਤ ਜਵਾਬ ਮੁੱਲ"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "ਮਾਨੀਟਰ ਡਾਇਰੈਕਟਰੀ ਤੋਂ ਗਲਤ ਜਵਾਬ(_d)"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "ਮਾਨੀਟਰ ਫਾਈਲ ਤੋਂ ਗਲਤ ਜਵਾਬ ਆਇਆ(_f)"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "ਸਟਰੀਮ ਪਰੋਟੋਕਾਲ ਵਿੱਚ ਗਲਤੀ: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "ਸਟਰੀਮ ਖਤਮ ਹੋਈ"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "ਓਪਰੇਸ਼ਨ ਰੱਦ ਕੀਤਾ ਗਿਆ"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "ਸਟਰੀਮ ਉੱਤੇ ਸਹਿਯੋਗ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "ਕਿਊਰੀ ਜਾਣਕਾਰੀ ਓਪਰੇਸ਼ਨ ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "ਸਟਰੀਮ ਉੱਤੇ ਸਹਿਯੋਗ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "ਮਾਊਂਟ ਜਾਣਕਾਰੀ ਲੈਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "ਡੈਮਨ ਨਾਲ ਕੁਨੈਕਟ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "ਸਾਕਟ ਬਣਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "ਸਾਕਟ ਨਾਲ ਕੁਨੈਕਟ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "ਗਲਤ ਫਾਇਲ ਜਾਣਕਾਰੀ ਫਾਰਮੈਟ"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "ਗਲਤ ਗੁਣ ਜਾਣਕਾਰੀ ਲਿਸਟ ਸਮੱਗਰੀ"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "ਡੀ-ਬੱਸ ਨਾਲ ਕੁਨੈਕਟ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s ਫਾਈਲ ਸਿਸਟਮ ਸਰਵਿਸ"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "ਗਲਤੀ: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "ਵਰਤੋਂ: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "ਵਰਤੋਂ: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "ਕੋਈ ਮਾਊਂਟ ਟਾਈਪ ਨਹੀਂ ਦਿੱਤੀ"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s ਲਈ ਮਾਊਂਟ-ਪੁਆਇੰਟ ਪਹਿਲਾਂ ਹੀ ਚੱਲ ਰਿਹਾ ਹੈ"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "ਮਾਊਂਟ ਡੈਮਨ ਸਟਾਰਟ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "%s ਉੱਤੇ /"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "ਕੋਈ ਹੋਸਟ-ਨਾਂ ਨਹੀਂ ਦਿੱਤਾ"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "ਗਲਤ ਮਾਊਂਟ ਹਦਾਇਤਾਂ"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "ਫਾਇਲ ਮੌਜੂਦ ਨਹੀਂ"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "ਫਾਇਲ ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ ਹੈ"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "ਲਿਖੋ"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "ਆਰਜ਼ੀ ਡਾਇਰੈਕਟਰੀ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "ਕੋਈ ਇੰਝ ਦੀ ਫਾਇਲ ਜਾਂ ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "ਡਾਇਰੈਕਟਰੀ ਖਾਲੀ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "ਫਾਇਲ ਡਾਇਰੈਕਟਰੀ ਕਾਪੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD ਕਰੀਏਟਰ"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "ਫਾਇਲ ਮੌਜੂਦ ਹੈ"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "ਬੈਕਐਂਡ ਰਾਹੀਂ ਓਪਰੇਸ਼ਨ ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "ਟਾਰਗੇਟ ਪਾਥ ਵਿੱਚ ਫਾਇਲ ਜਾਂ ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "ਡਾਇਰੈਕਟਰੀ ਡਾਇਰੈਕਟਰੀ ਉੱਤੇ ਕਾਪੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "ਟਾਰਗੇਟ ਫਾਇਲ ਮੌਜੂਦ ਹੈ"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "ਡਾਇਰੈਕਟਰੀ ਲਗਾਤਾਰ ਕਾਪੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "ਸਹਾਇਕ ਨਹੀਂ"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "ਸਿਸਟਮ ਬੱਸ ਨਾਲ ਕੁਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "libhal ਪਰਸੰਗ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "libhal ਸ਼ੁਰੂ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦਾ"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "ਡਰਾਈਵ ਨਹੀਂ ਦਿੱਤੀ ਹੈ"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "ਡਰਾਈਵ %s ਨਹੀਂ ਲੱਭੀ ਜਾ ਸਕਦੀ"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "ਡਰਾਈਵ %s ਆਡੀਓ ਫਾਈਲਾਂ ਨਹੀਂ ਰੱਖਦੀ ਹੈ"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda %s ਉੱਤੇ ਮਾਊਂਟ ਹੈ"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "ਆਡੀਓ ਡਿਸਕ"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "ਫਾਇਲ ਸਿਸਟਮ ਬਿਜ਼ੀ ਹੈ: %d ਫਾਇਲ ਖੁੱਲ੍ਹੀ"
-msgstr[1] "ਫਾਇਲ ਸਿਸਟਮ ਬਿਜ਼ੀ ਹੈ: %d ਫਾਇਲਾਂ ਖੁੱਲ੍ਹੀਆਂ"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "ਡਰਾਈਵ %2$s ਉੱਤੇ ਫਾਈਲ %1$s ਨਹੀਂ ਹੈ"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "ਡਰਾਈਵ %s ਉੱਤੇ 'paranoia' ਤੋਂ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "ਡਰਾਈਵ %s ਤੋਂ ਸਟਰੀਮ ਲੈਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "ਏਦਾਂ ਦੀ ਕੋਈ ਫਾਇਲ ਨਹੀਂ"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "ਫਾਈਲ ਮੌਜੂਦ ਨਹੀਂ ਹੈ ਜਾਂ ਇੱਕ ਆਡੀਓ ਟਰੈਕ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "ਆਡੀਓ CD ਫਾਈਲ-ਸਿਸਟਮ ਸਰਵਿਸ"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "ਕੰਪਿਊਟਰ"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "ਫਾਇਲ ਸਿਸਟਮ"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "ਡਾਇਰੈਕਟਰੀ ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕਦੀ"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "ਮਾਊਂਟ-ਯੋਗ ਫਾਈਲ ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕਦੀ ਹੈ"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "ਅੰਦਰੂਨੀ ਗਲਤੀ: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "ਫਾਈਲ ਮਾਊਂਟ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "ਡਰਾਈਵ ਵਿੱਚ ਮੀਡਿਆ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "ਇੱਕ ਮਾਊਂਟ-ਯੋਗ ਫਾਈਲ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "ਫਾਈਲ ਅਣ-ਮਾਊਂਟ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "ਫਾਈਲ ਰੱਦ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP ਗਲਤੀ: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "ਜਵਾਬ ਪਾਰਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "ਖਾਲੀ ਜਵਾਬ"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "ਸਰਵਰ ਤੋਂ ਗਲਤ ਜਵਾਬ"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "ਗਲਤ ਜਵਾਬ"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV ਸ਼ੇਅਰ"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "%s ਲਈ ਪਾਸਵਰਡ ਦਿਓ"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "ਆਪਣਾ ਪਰਾਕਸੀ ਪਾਸਵਰਡ ਦਿਓ ਜੀ"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "ਇੱਕ WebDAV ਯੋਗ ਕੀਤਾ ਸ਼ੇਅਰ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "%s ਉੱਤੇ WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "ਮੰਗ ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕੀ ਹੈ"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "ਟਾਰਗੇਟ ਫਾਈਲ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "ਫਾਈਲ ਬਾਹਰੋ ਸੋਧੀ ਗਈ ਹੈ"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "ਬੈਕਅੱਪ ਫਾਈਲ ਬਣਉਣ ਫੇਲ੍ਹ ਹੈ"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "ਫਾਈਲ ਜਾਂ ਡਾਇਰੈਕਟਰੀ ਮਾਨੀਟਰ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "ਨੈੱਟਵਰਕ"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "ਅਕਾਊਂਟ ਗ਼ੈਰ-ਸਹਾਇਕ ਹੈ"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "ਹੋਸਟ ਨੇ ਕੁਨੈਕਸ਼ਨ ਬੰਦ ਕਰ ਦਿੱਤਾ"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "ਡਾਟਾ ਕੁਨੈਕਸ਼ਨ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ। ਸ਼ਾਇਦ ਤੁਹਾਡੀ ਫਾਇਰਵਾਲ ਓਹਲੇ ਕਰ ਰਹੀ ਹੈ?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "ਡਾਟਾ ਕੁਨੈਕਸ਼ਨ ਬੰਦ ਕੀਤਾ ਗਿਆ ਹੈ"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "ਓਪਰੇਸ਼ਨ ਫੇਲ੍ਹ ਹੋਇਆ"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "ਸਰਵਰ ਉੱਤੇ ਥਾਂ ਬਾਕੀ ਨਹੀਂ ਬਚੀ ਹੈ"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "ਓਪਰੇਸ਼ਨ ਗ਼ੈਰ-ਸਹਾਇਕ"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "ਅਧਿਕਾਰ ਪਾਬੰਦੀ ਹੈ"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "ਪੇਜ਼ ਟਾਈਪ ਅਣਜਾਣ"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "ਗਲਤ ਫਾਈਲ ਨਾਂ"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "ਗਲਤ ਜਵਾਬ"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "ਟੁੱਟੀ ਟਰਾਂਸਮਿਸ਼ਨ"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "ਹੋਸਟ ਨਾਲ ਕੁਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "%s ਉੱਤੇ ftp ਲਈ ਪਾਸਵਰਡ ਦਿਓ"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "ਪਾਸਵਰਡ ਡਾਈਲਾਗ ਰੱਦ ਕੀਤਾ ਗਿਆ"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "%s ਉੱਤੇ ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "%s ਉੱਤੇ %s ਵਾਂਗ ftp"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "ਫਾਈਲ ਡਾਇਰੈਕਟਰੀ ਹੈ"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "ਬੈਕਅੱਪ ਹਾਲੇ ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "ਫਾਈਲ-ਨਾਂ ਲੰਮਾ ਹੈ"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "ਗਲਤ ਟਿਕਾਣਾ ਫਾਈਲ ਨਾਂ"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d ਡਾਇਰੈਕਟਰੀ ਜਾਂ ਫਾਇਲ ਮੌਜੂਦ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: ਕੋਈ ਫਾਇਲ ਜਾਂ ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: ਗਲਤ ਫਾਈਲ ਨਾਂ"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: ਸਹਾਇਕ ਨਹੀਂ"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "ਡਿਜ਼ੀਟਲ ਕੈਮਰਾ (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s ਕੈਮਰਾ"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s ਆਡੀਓ ਪਲੇਅਰ"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "ਕੈਮਰਾ"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "ਆਡੀਓ ਪਲੇਅਰ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "ਫੋਲਡਰ ਲਿਸਟ ਨਹੀਂ ਲਈ ਜਾ ਸਕੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "ਡਰਾਈਵ ਨਹੀਂ ਦਿੱਤੀ ਹੈ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "gphoto2 ਪਰਸੰਗ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "ਕੈਮਰਾ ਬਣਾਉਣ ਲਈ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "ਜੰਤਰ ਜਾਣਕਾਰੀ ਲੋਡ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "ਜੰਤਰ ਜਾਣਕਾਰੀ ਖੋਜਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "ਜੰਤਰ ਜਾਣਕਾਰੀ ਲੈਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "ਕੈਮਰਾ ਸੰਚਾਰ ਪੋਰਟ ਸੈੱਟਅੱਪ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "ਕੈਮਰਾ ਸ਼ੁਰੂ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "%s ਉੱਤੇ gphoto2 ਮਾਊਂਟ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "ਕੈਮਰਾ ਨਹੀਂ ਦਿੱਤਾ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "ਫਾਇਲ ਆਬਜੈਕਟ ਬਣਾਉਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "ਫਾਇਲ ਬਣਾਉਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "ਫਾਇਲ ਤੋਂ ਡਾਟਾ ਲੈਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "ਕੈਮਰੇ %s ਤੋਂ ਸਟਰੀਮ ਲੈਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "ਇੱਕ ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "ਫਾਇਲ ਲਿਸਟ ਲੈਣ ਲਈ ਫੇਲ੍ਹ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "ਡਾਇਰੈਕਟਰੀ ਬਣਾਉਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "ਨਵਾਂ ਨਾਂ ਬਹੁਤ ਲੰਮਾ ਹੈ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "dir ਨਾਂ ਬਦਲਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "ਫਾਇਲ ਨਾਂ ਬਦਲਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "ਡਾਇਰੈਕਟਰੀ '%s' ਖਾਲੀ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "ਡਾਇਰੈਕਟਰੀ ਹਟਾਉਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "ਫਾਈਲ ਹਟਾਉਣ 'ਚ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "ਡਾਇਰੈਕਟਰੀ ਪੜ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕਦੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "ਫਾਇਲ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "ਫਾਇਲ ਦਾ ਡਾਟਾ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "ਫਾਇਲ ਲਿਖਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "ਸਹਾਇਕ ਨਹੀਂ (ਇੱਕੋ ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "ਸਹਾਇਕ ਨਹੀਂ (src dir ਹੈ, dst dir ਹੈ)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "ਸਹਾਇਕ ਨਹੀਂ (src dir ਨਹੀਂ, dst ਮੌਜੂਦਾ ਫਾਇਲ)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "ਸਹਾਇਕ ਨਹੀਂ (src ਫਾਇਲ ਨਹੀਂ, dst dir ਹੈ)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP ਕਲਾਇਟ ਗਲਤੀ: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr "(ਗਲਤ ਇੰਕੋਡਿੰਗ)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "ਡਾਇਰੈਕਟਰੀ ਨੋਟੀਫਿਕੇਸ਼ਨ ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "ਵਿੰਡੋਜ਼ ਨੈੱਟਵਰਕ"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "ਲੋਕਲ ਨੈੱਟਵਰਕ"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "ਨੈੱਟਵਰਕ ਟਿਕਾਣਾ ਮਾਨੀਟਰ"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s ਉੱਤੇ %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "ਜੰਤਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਖਤਮ ਹੋਇਆ"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "ਜੰਤਰ ਨੇ ਸਾਫਟਵੇਅਰ ਅੱਪਡੇਟ ਲਈ ਮੰਗ ਕੀਤੀ"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh ਪਰੋਗਰਾਮ ਅਚਾਨਕ ਖਤਮ ਹੋ ਗਿਆ"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "ਹੋਸਟ-ਨਾਂ ਪਤਾ ਨਹੀਂ"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "ਹੋਸਟ ਲਈ ਰਾਊਟ ਨਹੀਂ"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "ਸਰਵਰ ਨੇ ਕੁਨੈਕਸ਼ਨ ਤੋਂ ਇਨਕਾਰ ਕੀਤਾ ਹੈ"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "ਹੋਸਟ ਕੁੰਜੀ ਵੇਰੀਫਿਕੇਸ਼ਨ ਫੇਲ੍ਹੀ ਹੋਈ"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "ssh ਪਰੋਗਰਾਮ ਸਵੈਪ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ssh ਪਰੋਗਰਾਮ ਸਵੈਪ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "ਲਾਗਇਨ ਕਰਨ ਦੌਰਾਨ ਟਾਈਮ ਆਉਟ"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "ਕੁੰਜੀ ਲਈ ਪ੍ਹੈਰਾ ਦਿਓ"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "ਪਾਸਵਰਡ ਦਿਓ"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "ਪਾਸਵਰਡ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "ਕਿਵੇਂ ਵੀ ਲਾਗਇਨ"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "ਲਾਗਇਨ ਰੱਦ ਕਰੋ"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"ਰਿਮੋਟ ਕੰਪਿਊਟਰ (%s) ਦੀ ਪਛਾਣ ਅਣਜਾਣ ਹੈ।\n"
-"ਇਹ ਅਕਸਰ ਹੁੰਦਾ ਹੈ, ਜੋ ਕਿ ਤੁਸੀਂ ਕੰਪਿਊਟਰ ਉੱਤੇ ਪਹਿਲਾਂ ਵਾਰੀ ਲਾਗਇਨ ਕਰਦੇ ਹੋ।\n"
-"\n"
-"ਰਿਮੋਟ ਕੰਪਿਟਊਰ ਵਲੋਂ ਭੇਜੀ ਪਛਾਣ %s ਹੈ। ਜੇ ਤੁਹਾਨੂੰ ਪੂਰਾ ਭਰੋਸਾ ਹੈ ਕਿ ਇਹ ਸੁਰੱਖਿਅਤ ਹੈ ਤਾਂ "
-"ਜਾਰੀ ਰੱਖੋ, ਸਿਸਟਮ ਪਰਸ਼ਾਸ਼ਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "ਲਾਗਇਨ ਡਾਈਲਾਗ ਰੱਦ ਕੀਤਾ ਗਿਆ"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "ਹੋਸਟ ਪਛਾਣ ਜਾਣਕਾਰੀ ਭੇਜੀ ਨਹੀਂ ਜਾ ਸਕਦੀ"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "ਪਰੋਟੋਕਾਲ ਗਲਤੀ"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "%s ਉੱਤੇ sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "ssh ਕਮਾਂਡ ਲਈ ਸਹਿਯੋਗ ਲੱਭਣ ਲਈ ਅਸਮਰੱਥ"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "ਫੇਲ੍ਹ"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "ਗਲਤ ਜਵਾਬ ਮਿਲਿਆ"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "ਬੈਕਅੱਪ ਫਾਈਲ ਬਣਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "ਆਰਜ਼ੀ ਡਾਇਰੈਕਟਰੀ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "ਡਾਇਰੈਕਟਰੀ ਉੱਤੇ ਡਾਇਰੈਕਟਰੀ ਭੇਜੀ ਨਹੀਂ ਜਾ ਸਕਦੀ"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "%2$s ਉੱਤੇ %1$s ਸ਼ੇਅਰ ਵਾਸਤੇ ਪਾਸਵਰਡ ਲੋੜੀਦਾ ਹੈ"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "ਅੰਦਰੂਨੀ ਗਲਤੀ (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "ਵਿੰਡੋਜ਼ ਸ਼ੇਅਰ ਮਾਊਂਟ ਕਰਨ ਲਈ ਫੇਲ੍ਹ"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "ਗ਼ੈਰ-ਸਹਾਇਕ ਸੀਕ ਟਾਈਪ"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "ਬੈਕਅੱਪ ਫਾਈਲ ਬਣਾਉਣਾ ਫੇਲ੍ਹ: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "ਫਾਈਲ ਹਟਾਉਣ 'ਚ ਗਲਤੀ: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "ਫਾਈਲ ਹਿਲਾਉਣ 'ਚ ਗਲਤੀ: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "ਟਾਰਗੇਟ ਫਾਈਲ ਹਟਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "ਡਾਇਰੈਕਟਰੀ ਲਗਾਤਾਰ ਭੇਜੀ ਨਹੀਂ ਜਾ ਸਕਦੀ"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "ਵਿੰਡੋਜ਼ ਸ਼ੇਅਰ ਫਾਈਲ-ਸਿਸਟਮ ਸਰਵਿਸ"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "%s ਉੱਤੇ ਵਿੰਡੋਜ਼ ਸ਼ੇਅਰ"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "ਫਾਈਲ ਮਾਊਂਟ-ਯੋਗ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "ਰੈਗੂਲਰ ਫਾਇਲ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "ਵਿੰਡੋਜ਼ ਨੈੱਟਵਰਕ ਫਾਈਲ-ਸਿਸਟਮ ਸਰਵਿਸ"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "ਰੱਦੀ"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (ਰੱਦੀ ਵਿੱਚ)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "ਰੱਦੀ ਹਟਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "ਰੱਦੀ ਡਾਇਰੈਕਟਰੀ ਨੋਟੀਫਿਕੇਸ਼ਨ ਸਹਾਇਕ ਨਹੀਂ ਹ"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "ਗਲਤ ਬੈਕਅੱਪ ਟਾਈਪ"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "fd ਭੇਜਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "ਸਿਮਲਿੰਕ ਬੈਕਐਂਡ ਵਲੋਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "ਗਲਤ ਡੀਬੱਸ ਸੁਨੇਹਾ"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "ਪੁਰਾਣੀ ਡੈਮਨ ਬਦਲੋ।"
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "fuse ਸਟਾਰਟ ਨਾ ਕਰੋ।"
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS ਡੈਮਨ"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GVFS ਲਈ ਮੇਨ ਡੈਮਨ"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ \"%s --help\" ਵਰਤੋਂ"
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "spawned child ਤੋਂ ਗਲਤ ਆਰਗੂਮੈਂਟ"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "ਆਟੋ-ਮਾਊਂਟ ਫੇਲ੍ਹ: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "ਦਿੱਤਾ ਟਿਕਾਣਾ ਮਾਊਂਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "ਦਿੱਤਾ ਟਿਕਾਣਾ ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "ਟਿਕਾਣਾ ਪਹਿਲਾਂ ਹੀ ਮਾਊਂਟ ਹੈ"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "ਟਿਕਾਣਾ ਮਾਊਂਟ-ਯੋਗ ਨਹੀਂ ਹੈ"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "ਬਲਿਊ-ਰੇ"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "ਬਲਿਊ-ਰੇ-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "ਬਲਿਊ-ਰੇ-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s ਡਰਾਈਵ"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "ਫਲਾਪੀ ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "ਸਾਫਟਵੇਅਰ RAID ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "ਫਾਇਰਵੇਅਰ ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "ਟੇਪ ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "ਕੰਪੈਕਟ-ਫਲੈਸ਼ ਡਰਾਇਵ"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "ਮੈਮੋਰੀ-ਸਟਿੱਕ ਡਰਾਇਵ"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "ਸਮਾਰਟ-ਮੀਡਿਆ ਡਰਾਇਵ"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC ਡਰਾਇਵ"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "ਜ਼ਿੱਪ ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "ਜੇਜ਼ ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "ਥੰਮ ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "ਮਾਸ ਸਟੋਰੇਜ਼ ਡਰਾਈਵ"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "ਮੀਡਿਆ ਕੱਢਣ ਲਈ ਅਸਮਰੱਥ; ਮੀਡਿਆ ਤੋਂ ਇੱਕ ਜਾਂ ਵੱਧ ਵਾਲੀਅਮ ਰੁੱਝੇ ਹਨ।"
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "ਮਿਕਸਡ ਆਡੀਓ/ਡਾਟਾ ਡਿਸਕ"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "%s ਮੀਡਿਆ"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s ਇੰਕ੍ਰਿਪਟਡ ਡਾਟਾ"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "ਖਾਲੀ CD-ROM ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "ਖਾਲੀ CD-R ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "ਖਾਲੀ CD-RW ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "ਖਾਲੀ DVD-ROM ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "ਖਾਲੀ DVD-RAM ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "ਖਾਲੀ DVD-RW ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "ਖਾਲੀ DVD+R ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "ਖਾਲੀ DVD+RW ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "ਖਾਲੀ DVD+R DL ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "ਬਲਿਉ-ਰੇ ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "ਖਾਲੀ ਬਲਿਉ-ਰੇ ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "ਬਲਿਉ-ਰੇ R ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "ਖਾਲੀ ਬਲਿਉ-ਰੇ R ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "ਬਲਿਉ-ਰੇ RW ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "ਖਾਲੀ ਬਲਿਉ-ਰੇ RW ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "ਖਾਲੀ HD DVD ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "ਖਾਲੀ HD DVD-R ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "ਖਾਲੀ HD DVD-RW ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "ਖਾਲੀ MO ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "ਡਿਸਕ"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "ਖਾਲੀ ਡਿਸਕ"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s ਫਾਈਲ ਖੋਲ੍ਹਣ ਦੌਰਾਨ ਗਲਤੀ: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, stdout ਲਿਖਣ ਦੌਰਾਨ ਗਲਤੀ"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: ਪੜ੍ਹਨ ਦੌਰਾਨ ਗਲਤੀ: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: ਬੰਦ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATION... - concatenate LOCATIONS to standard output."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: ਗੁੰਮ ਟਿਕਾਣੇ"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: ਟਿਕਾਣਾ ਖੋਲ੍ਹਣ ਦੌਰਾਨ ਗਲਤੀ: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: ਐਪਲੀਕੇਸ਼ਨ ਲਾਂਚ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - open FILES with registered application."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr "ਇਸ ਟਾਈਪ ਦੀਆਂ ਫਾਈਲਾਂ ਖੋਲ੍ਹਣ ਲਈ ਰਜਿਸਟਰ ਡਿਫਾਲਟ ਐਪਲੀਕੇਸ਼ਨ ਨਾਲ ਇਹ ਫਾਈਲ ਖੋਲ੍ਹਦਾ ਹੈ।"
-
-#~ msgid "File unavailable"
-#~ msgstr "ਫਾਈਲ ਉਪਲੱਬਧ ਨਹੀਂ"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "%.1f kB ਮੀਡਿਆ"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "%.1f MB ਮੀਡਿਆ"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "%.1f GB ਮੀਡਿਆ"
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "%s ਉੱਤੇ ਆਡੀਓ ਡਿਸਕ"
-
-#~ msgid "The file does not exist"
-#~ msgstr "ਫਾਇਲ ਮੌਜੂਦ ਨਹੀਂ"
-
diff --git a/po/pl.po b/po/pl.po
deleted file mode 100644
index 7a0373d8..00000000
--- a/po/pl.po
+++ /dev/null
@@ -1,1745 +0,0 @@
-# Polish translation of gvfs.
-# Copyright (C) 2007-2008 Tomasz Dominikowski
-# This file is distributed under the same license as the gvfs package.
-# Tomasz Dominikowski <tdominikowski@aviary.pl>, 2007, 2008
-#
-# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-# Aviary.pl
-# Jeśli masz jakiekolwiek uwagi odnoszące się do tłumaczenia lub chcesz
-# pomóc w jego rozwijaniu i pielęgnowaniu, napisz do nas:
-# gnomepl@aviary.pl
-# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-05 15:26+0200\n"
-"PO-Revision-Date: 2008-09-05 15:29+0100\n"
-"Last-Translator: Tomasz Dominikowski <dominikowski@gmail.com>\n"
-"Language-Team: Aviary.pl <gnomepl@aviary.pl>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Poedit-Language: Polish\n"
-"X-Poedit-Country: Poland\n"
-
-#: ../client/gdaemonfile.c:482
-#: ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "Nieobsługiwana operacja, pliki znajdują się na różnych punktach montowania"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Niepoprawna wartość zwrotna od get_info"
-
-#: ../client/gdaemonfile.c:816
-#: ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Niepoprawna wartość zwrotna od query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Nie można uzyskać opisu pliku strumienia"
-
-#: ../client/gdaemonfile.c:926
-#: ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055
-#: ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176
-#: ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330
-#: ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "Niepoprawna zwrócona wartość z funkcji open"
-
-#: ../client/gdaemonfile.c:1006
-#: ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124
-#: ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "Nie otrzymano opisu pliku strumienia"
-
-#: ../client/gdaemonfile.c:1238
-#: ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Niepoprawna zwrócona wartość z funkcji call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Niepoprawna zwrócona wartość z funkcji get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Nie można odnaleźć zawierającego punktu montowania"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Niepoprawna nazwa pliku %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Niepoprawna zwrócona wartość z funkcji query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "Niepoprawna zwrócona wartość z funkcji monitor_dir"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "Niepoprawna zwrócona wartość z funkcji monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Błąd w protokole strumienia: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Koniec strumienia"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831
-#: ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793
-#: ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049
-#: ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250
-#: ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336
-#: ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418
-#: ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069
-#: ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120
-#: ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Działanie zostało anulowane"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Wyszukiwanie nie jest obsługiwane w strumieniu"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Działanie query info nie jest obsługiwane"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Wyszukiwanie nie jest obsługiwane w strumieniu"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Błąd podczas uzyskiwania informacji o montowaniu: %s"
-
-#: ../client/gvfsdaemondbus.c:568
-#: ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Błąd podczas łączenia z usługą: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Błąd podczas tworzenia gniazda: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Błąd podczas łączenia z gniazdem: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Niepoprawny format informacji o pliku"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Niepoprawny atrybut zawartości "
-
-#: ../daemon/daemon-main.c:63
-#: ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Błąd podczas łączenia z D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Usługa systemu plików %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Błąd: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Użycie: %s --spawner dbus-id ścieżka_obiektu"
-
-#: ../daemon/daemon-main.c:155
-#: ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Użycie: %s key=wartość key=wartość ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Nie podano typu montowania"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "punkt montowania dla %s już uruchomiony"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "błąd podczas uruchamiania usługi montowania"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315
-#: ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ na %s"
-
-#: ../daemon/gvfsbackendarchive.c:515
-#: ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Nie podano nazwy hosta"
-
-#: ../daemon/gvfsbackendarchive.c:526
-#: ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456
-#: ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603
-#: ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Niepoprawna specyfikacja montowania"
-
-#: ../daemon/gvfsbackendarchive.c:636
-#: ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715
-#: ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572
-#: ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101
-#: ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804
-#: ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042
-#: ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Plik nie istnieje"
-
-#: ../daemon/gvfsbackendarchive.c:724
-#: ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651
-#: ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912
-#: ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Plik nie jest katalogiem"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Nagrywanie"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Nie można utworzyć tymczasowego katalogu"
-
-#: ../daemon/gvfsbackendburn.c:405
-#: ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451
-#: ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719
-#: ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783
-#: ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987
-#: ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Nie ma takiego pliku lub katalogu"
-
-#: ../daemon/gvfsbackendburn.c:425
-#: ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Katalog nie jest pusty"
-
-#: ../daemon/gvfsbackendburn.c:459
-#: ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "Nie można skopiować pliku na katalog"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Asystent CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755
-#: ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926
-#: ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Plik istnieje"
-
-#: ../daemon/gvfsbackendburn.c:829
-#: ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173
-#: ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150
-#: ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Działanie nieobsługiwane przez mechanizm przetwarzający"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "Nie ma takiego pliku lub katalogu na ścieżce docelowej"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "Nie można skopiować katalogu na katalog"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "Plik docelowy istnieje"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "Nie można rekursywnie skopiować katalogu"
-
-#: ../daemon/gvfsbackendburn.c:952
-#: ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569
-#: ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Nieobsługiwane"
-
-#: ../daemon/gvfsbackendcdda.c:223
-#: ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Nie można połączyć się z szyną systemową"
-
-#: ../daemon/gvfsbackendcdda.c:233
-#: ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Nie można utworzyć kontekstu libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246
-#: ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Nie można zainicjować libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261
-#: ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Nie określono napędu"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Nie można odnaleźć napędu %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Napęd %s nie zawiera plików dźwiękowych"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "Punkt montowania cdda na %s"
-
-#: ../daemon/gvfsbackendcdda.c:295
-#: ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435
-#: ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Płyta CD-Audio"
-
-#: ../daemon/gvfsbackendcdda.c:356
-#: ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "System plików jest zajęty: %d otwarty plik"
-msgstr[1] "System plików jest zajęty: %d otwarte pliki"
-msgstr[2] "System plików jest zajęty: %d otwartych plików"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Nie ma pliku %s w napędzie %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Błąd od \"paranoia\" w napędzie %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Błąd podczas wyszukiwania w strumieniu w napędzie %s"
-
-#: ../daemon/gvfsbackendcdda.c:815
-#: ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Nie ma takiego pliku"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Plik nie istnieje lub nie jest ścieżką dźwiękową"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Usługa systemu plików CD-Audio"
-
-#: ../daemon/gvfsbackendcomputer.c:179
-#: ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Komputer"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "System plików"
-
-#: ../daemon/gvfsbackendcomputer.c:590
-#: ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758
-#: ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-#: ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "Nie można otworzyć katalogu"
-
-#: ../daemon/gvfsbackendcomputer.c:594
-#: ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Nie można otworzyć montowalnego pliku"
-
-#: ../daemon/gvfsbackendcomputer.c:780
-#: ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Błąd wewnętrzny: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812
-#: ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Nie można zamontować pliku"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Brak nośnika w napędzie"
-
-#: ../daemon/gvfsbackendcomputer.c:881
-#: ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "To nie jest montowalny plik"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Nie można odmontować pliku"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Nie można wysunąć pliku"
-
-#: ../daemon/gvfsbackenddav.c:503
-#: ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Błąd HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Nie można przetworzyć odpowiedzi"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Pusta odpowiedź"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Nieoczekiwana odpowiedź od serwera"
-
-#: ../daemon/gvfsbackenddav.c:1156
-#: ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Niepoprawna odpowiedź"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "Zasób WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Proszę wprowadzić hasło dla %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Proszę wprowadzić hasło pośrednika sieciowego"
-
-#: ../daemon/gvfsbackenddav.c:1527
-#: ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Nie jest to zasób WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "Zasób WebDAV na %s"
-
-#: ../daemon/gvfsbackenddav.c:1614
-#: ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Nie można utworzyć żądania"
-
-#: ../daemon/gvfsbackenddav.c:1750
-#: ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114
-#: ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365
-#: ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Plik docelowy już istnieje"
-
-#: ../daemon/gvfsbackenddav.c:1823
-#: ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Plik został zmodyfikowany z zewnątrz"
-
-#: ../daemon/gvfsbackenddav.c:1854
-#: ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Utworzenie kopii zapasowej pliku nieudane"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669
-#: ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Nie można obserwować pliku lub katalogu."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688
-#: ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814
-#: ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Sieć"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Konta są nieobsługiwane"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Zdalny komputer zamknął połączenie"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Nie można otworzyć połączenia danych. Proszę sprawdzić ustawienia zapory sieciowej."
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Połączenie danych zamknięte"
-
-#: ../daemon/gvfsbackendftp.c:255
-#: ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Działanie nieudane"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Brak miejsca na serwerze"
-
-#: ../daemon/gvfsbackendftp.c:272
-#: ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Działanie nieobsługiwane"
-
-#: ../daemon/gvfsbackendftp.c:276
-#: ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Dostęp zabroniony"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Rodzaj strony nieznany"
-
-#: ../daemon/gvfsbackendftp.c:284
-#: ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Niepoprawna nazwa pliku"
-
-#: ../daemon/gvfsbackendftp.c:288
-#: ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393
-#: ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425
-#: ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Niepoprawna odpowiedź"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "transmisja przerwana"
-
-#: ../daemon/gvfsbackendftp.c:677
-#: ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Nie można połączyć się z komputerem"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Proszę wprowadzić hasło dla ftp na %s"
-
-#: ../daemon/gvfsbackendftp.c:1362
-#: ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Okno dialogowe hasła anulowane"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp na %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp jako %s na %s"
-
-#: ../daemon/gvfsbackendftp.c:1529
-#: ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Plik jest katalogiem"
-
-#: ../daemon/gvfsbackendftp.c:1751
-#: ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "kopie zapasowe nie są jeszcze obsługiwane"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "nazwa pliku zbyt długa"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Niepoprawna docelowa nazwa pliku"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Katalog lub plik już istnieje"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Nie ma takiego pliku lub katalogu"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Niepoprawna nazwa pliku"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Nieobsługiwane"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Aparat cyfrowy (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841
-#: ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Aparat %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844
-#: ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Odtwarzacz muzyki %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853
-#: ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Aparat"
-
-#: ../daemon/gvfsbackendgphoto2.c:855
-#: ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Odtwarzacz muzyki"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325
-#: ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Nie udało się uzyskać listy katalogów"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Nie określono urządzenia"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Nie można utworzyć kontekstu gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Błąd podczas tworzenia obiektu aparatu cyfrowego"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483
-#: ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Błąd podczas wczytywania informacji o urządzeniu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Błąd podczas uzyskiwania informacji o urządzeniu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Błąd podczas pobierania danych o urządzeniu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Błąd podczas ustawiania portu komunikacyjnego aparatu"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Błąd podczas inicjowania aparatu cyfrowego"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "Punkt montowania gphoto2 na %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Nie określono aparatu cyfrowego"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Błąd podczas tworzenia obiektu pliku"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Błąd podczas pobierania pliku"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Błąd podczas pobierania danych z pliku"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841
-#: ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Błąd podczas wyszukiwania w strumieniu w aparacie cyfrowym %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981
-#: ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "To nie jest katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Nie udało się uzyskać listy plików"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Błąd podczas tworzenia katalogu"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Nazwa już istnieje"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592
-#: ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Nowa nazwa jest za długa"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602
-#: ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Błąd podczas zmieniania nazwy katalogu"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615
-#: ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Błąd podczas zmieniania nazwy pliku"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Katalog \"%s\" nie jest pusty"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Błąd podczas usuwania katalogu"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Błąd podczas usuwania pliku"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "Nie można zapisać do katalogu"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Nie można przydzielić nowego pliku, aby dodać do"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Nie można odczytać pliku, aby dodać do"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Nie można uzyskać danych pliku, aby dodać do"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Błąd podczas zapisywania pliku"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Nieobsługiwane (nie ten sam katalog)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Nieobsługiwane (źródło jest katalogiem, cel jest katalogiem)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Nieobsługiwane (źródłem jest katalog, celem jest istniejący plik)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Nieobsługiwane (źródłem jest plik, celem jest katalog)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Błąd klienta HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560
-#: ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301
-#: ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (niepoprawne kodowanie)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Powiadamianie o katalogach nie jest obsługiwane"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268
-#: ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Sieć Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Sieć lokalna"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Monitor sieci lokalnej"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442
-#: ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s na %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Połączenie z urządzeniem utracone"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Urządzenie wymaga aktualizacji oprogramowania"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "program ssh nieoczekiwanie zakończył pracę"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Nazwa hosta jest nieznana"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Brak ścieżki do hosta"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Odmowa połączenia z serwerem"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Uwierzytelnienie klucza hosta nieudane"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Nie można uruchomić programu ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Nie można uruchomić programu ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528
-#: ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Przekroczono czas oczekiwania podczas logowania do"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Proszę wprowadzić hasło dla klucza"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Proszę wprowadzić hasło"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Nie można wysłać hasła"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Zaloguj mimo wszystko"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Anuluj logowanie"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Tożsamość zdalnego komputera (%s) jest nieznana.\n"
-"To się zdarza, jeśli do komputera zalogowano się po raz pierwszy.\n"
-"\n"
-"Tożsamość wysłana przez zdalny komputer to %s. Aby uzyskać całkowitą pewność dotyczącą bezpieczeństwa, należy się skontaktować z administratorem systemu."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Okno dialogowe logowania anulowane"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Nie można wysłać potwierdzenia tożsamości"
-
-#: ../daemon/gvfsbackendsftp.c:1472
-#: ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Błąd protokołu"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp na %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Nie można odnaleźć obsługiwanego polecenia ssh"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Nieudane"
-
-#: ../daemon/gvfsbackendsftp.c:2023
-#: ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093
-#: ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235
-#: ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331
-#: ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513
-#: ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603
-#: ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692
-#: ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869
-#: ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981
-#: ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319
-#: ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483
-#: ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619
-#: ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707
-#: ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756
-#: ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Otrzymano niepoprawną odpowiedź"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Błąd podczas tworzenia kopii zapasowej: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Nie można utworzyć tymczasowego pliku"
-
-#: ../daemon/gvfsbackendsftp.c:3545
-#: ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Nie można przenieść katalogu na katalog"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Wymagane hasło dla zasobu %s na %s"
-
-#: ../daemon/gvfsbackendsmb.c:471
-#: ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Błąd wewnętrzny (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Zamontowanie zasobu Windows nieudane"
-
-#: ../daemon/gvfsbackendsmb.c:717
-#: ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Typ wyszukiwania nieobsługiwany"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Utworzenie pliku kopii zapasowej nieudane: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Błąd podczas usuwania pliku: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Błąd podczas przenoszenia pliku: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Błąd podczas usuwania pliku docelowego: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Nie można rekursywnie przenieść katalogu"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Usługa systemu plików zasobów sieciowych Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Zasoby Windows na %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Plik nie jest montowalny"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "To nie jest zwykły plik"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Usługa systemu plików sieci Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641
-#: ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Kosz"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (w koszu)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Nie można opróżnić kosza"
-
-#: ../daemon/gvfsbackendtrash.c:1677
-#: ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Powiadamianie o katalogu kosza nie jest obsługiwane"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Niepoprawny typ mechanizmu przetwarzającego"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Błąd podczas wysyłania fd: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Dowiązania symboliczne nieobsługiwane przez mechanizm przetwarzający"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Błędny komunikat dbus"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Zamiana starej usługi."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Bez uruchamiania fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Usługa GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Główna usługa dla GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78
-#: ../programs/gvfs-cat.c:163
-#: ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101
-#: ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386
-#: ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144
-#: ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Więcej informacji: \"%s --help\""
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Niepoprawne parametry od utworzonego elementu zależnego"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automatyczne montowanie nie powiodło się: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Podane położenie nie jest zamontowane"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Podane położenie nie jest obsługiwane"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Położenie jest już zamontowane"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Położenie nie jest montowalne"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-R"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Napęd %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Napęd %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Stacja dyskietek"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Programowy napęd RAID"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Napęd USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Napęd ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Napęd SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Napęd FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Napęd taśmowy"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Karta CompactFlash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Karta MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Karta SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Karta SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Napęd Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Napęd Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Pamięć przenośna"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Napęd pamięci masowej"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Wysunięcie nośnika nieudane; jeden lub więcej woluminów na nośniku jest zajętych."
-
-#: ../monitor/hal/ghalmount.c:301
-#: ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306
-#: ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311
-#: ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433
-#: ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "Mieszana płyta CD-Audio/Dane"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446
-#: ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "Nośnik %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s zaszyfrowanych danych"
-
-#: ../monitor/hal/hal-utils.c:40
-#: ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Płyta CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40
-#: ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Pusta płyta CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:41
-#: ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Płyta CD-R"
-
-#: ../monitor/hal/hal-utils.c:41
-#: ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Pusta płyta CD-R"
-
-#: ../monitor/hal/hal-utils.c:42
-#: ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Płyta CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42
-#: ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Pusta płyta CD-RW"
-
-#: ../monitor/hal/hal-utils.c:43
-#: ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43
-#: ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Płyta DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43
-#: ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43
-#: ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Pusta płyta DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:44
-#: ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Płyta DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44
-#: ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Pusta płyta DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:46
-#: ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Płyta DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46
-#: ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Pusta płyta DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:47
-#: ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Płyta DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47
-#: ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Pusta płyta DVD+R"
-
-#: ../monitor/hal/hal-utils.c:48
-#: ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Płyta DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48
-#: ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Pusta płyta DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:49
-#: ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Płyta DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49
-#: ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Pusta płyta DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:50
-#: ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Płyta Blu-ray"
-
-#: ../monitor/hal/hal-utils.c:50
-#: ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Pusta płyta Blu-ray"
-
-#: ../monitor/hal/hal-utils.c:51
-#: ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Płyta Blu-ray R"
-
-#: ../monitor/hal/hal-utils.c:51
-#: ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Pusta płyta Blu-ray R"
-
-#: ../monitor/hal/hal-utils.c:52
-#: ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Płyta Blu-ray RW"
-
-#: ../monitor/hal/hal-utils.c:52
-#: ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Pusta płyta Blu-ray RW"
-
-#: ../monitor/hal/hal-utils.c:53
-#: ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Płyta HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53
-#: ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Pusta płyta HD-DVD"
-
-#: ../monitor/hal/hal-utils.c:54
-#: ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Płyta HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54
-#: ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Pusta płyta HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:55
-#: ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Płyta HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55
-#: ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Pusta płyta HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:56
-#: ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Dysk MO"
-
-#: ../monitor/hal/hal-utils.c:56
-#: ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Pusty dysk MO"
-
-#: ../monitor/hal/hal-utils.c:57
-#: ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Płyta"
-
-#: ../monitor/hal/hal-utils.c:57
-#: ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Pusta płyta"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: błąd podczas otwierania pliku: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, błąd podczas zapisywania do stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: błąd podczas odczytywania: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:błąd podczas zamykania: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "POŁOŻENIE... - dołączenie POŁOŻEŃ do standardowego wyjścia."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid "Concatenate files at locations and print to the standard output. Works just like the traditional cat utility, but using gvfs location instead local files: for example you can use something like smb://server/resource/file.txt as location to concatenate."
-msgstr "Dołączenie plików w położeniach i odpowiedź na standardowe wyjście. Działa jak zwykłe narzędzie cat, ale używając położenia gvfs zamiast plików lokalnych: przykładowo można użyć czegoś takiego jak smb://serwer/zasób/plik.txt jako położenia do powiązania."
-
-#: ../programs/gvfs-cat.c:148
-msgid "Note: just pipe through cat if you need its formatting option like -n, -T or other."
-msgstr "Uwaga: w razie potrzeby opcji formatowania -n, -T lub innych, należy tunelować przez cat."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174
-#: ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: brakujące położenia"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: błąd podczas otwierania położenia: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: błąd podczas uruchamiania programu: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "PLIKI... - otwiera PLIKi za pomocą zarejestrowanego programu."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid "Opens the file(s) with the default application registered to handle the type of the file."
-msgstr "Otwiera plik(i) za pomocą domyślnego programu zarejestrowanego do obsługi danego typu pliku."
-
-#~ msgid "Error listing folders to figure out ignore prefix"
-#~ msgstr ""
-#~ "Błąd podczas przedstawiania katalogów w celu uzyskania prefiksu "
-#~ "ignorowania"
-#~ msgid "Error creating port info list"
-#~ msgstr "Błąd podczas tworzenia listy portów"
-#~ msgid "Error getting port info from port info list"
-#~ msgstr "Błąd podczas uzyskiwania informacji o portach z listy portów"
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "System plików jest zajęty: %d otwartych plików"
-#~ msgid "Error listing folders"
-#~ msgstr "Błąd podczas przedstawiania katalogów"
-#~ msgid "Error listing files in folder"
-#~ msgstr "Błąd podczas przedstawiania plików w katalogu"
-#~ msgid "File unavailable"
-#~ msgstr "Plik niedostępny"
-#~ msgid "%.1f kB Media"
-#~ msgstr "Nośnik %.1f kB"
-#~ msgid "%.1f MB Media"
-#~ msgstr "Nośnik %.1f MB"
-#~ msgid "%.1f GB Media"
-#~ msgstr "Nośnik %.1f GB"
-#~ msgid "Invalid reply from server"
-#~ msgstr "Niepoprawna odpowiedź od serwera"
-#~ msgid "File does not exist"
-#~ msgstr "Plik nie istnieje"
-#~ msgid "Audio Disc on %s"
-#~ msgstr "Płyta CD-Audio w %s"
-#~ msgid "The file does not exist"
-#~ msgstr "Plik nie istnieje"
-#~ msgid "CD Burner"
-#~ msgstr "Nagrywarka CD"
-
diff --git a/po/pt.po b/po/pt.po
deleted file mode 100644
index 55a9e891..00000000
--- a/po/pt.po
+++ /dev/null
@@ -1,1586 +0,0 @@
-# gvfs's Portuguese translation.
-# Copyright © 2008 gvfs
-# This file is distributed under the same license as the gvfs package.
-# Duarte Loreto <happyguy_pt@hotmail.com>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: 2.24\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-07 23:17+0100\n"
-"PO-Revision-Date: 2008-09-07 23:10+0000\n"
-"Last-Translator: Duarte Loreto <happyguy_pt@hotmail.com>\n"
-"Language-Team: Portuguese <gnome_pt@yahoogroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "Operação não suportada, ficheiros em montagens diferentes"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Valor devolvido por get_info é inválido"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Valor devolvido por query_info é inválido"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Incapaz de obter o ficheiro descritor do fluxo"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "Valor devolvido por open é inválido"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "Incapaz de obter o ficheiro descritor do fluxo"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Valor devolvido por call é inválido"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Valor devolvido por get_filesystem_info é inválido"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Incapaz de encontrar o ponto de montagem"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Nome de ficheiro %s inválido"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Valor devolvido por query_filesystem_info é inválido"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "Valor devolvido por monitor_dir é inválido"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "Valor devolvido por monitor_file é inválido"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Erro no protocolo de fluxo: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Final do fluxo"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "A operação foi cancelada"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Fluxo não suporta procura"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "A operação de consulta de informação não é suportada"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Fluxo não suporta consulta de informação"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Erro ao obter informação de montagem: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Erro ao se ligar ao daemon: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Erro ao criar o socket: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Erro ao se ligar ao socket: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Formato de ficheiro de informação inválido"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Conteúdo da lista de informação de atributos inválido"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Erro ao se ligar ao D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Serviço de Sistema de Ficheiros de %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Erro: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Utilização: %s -- spawner id-dbus caminho_objecto"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Utilização: %s chave=valor chave=valor ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Nenhum tipo de montagem especificado"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "o ponto de montagem de %s já está em execução"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "Erro ao iniciar o daemon de montagem"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ em %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Nenhum nome de máquina especificado"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Especificação de montagem inválida"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Ficheiro não existe"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "O ficheiro não é um directório"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Gravar"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Incapaz de criar o directório temporário"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Ficheiro ou directório inexistente"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Directório não vazio"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "Incapaz de copiar um ficheiro sobre um directório"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Criador de CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Ficheiro existe"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Operação não é suportada pelo motor"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "Ficheiro ou directório inexistente no caminho de destino"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "Incapaz de copiar um directório sobre um directório"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "Ficheiro de destino já existe"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "Incapaz de copiar directório recursivamente"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Não suportado"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Incapaz de se ligar ao bus de sistema"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Incapaz de criar contexto de libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Incapaz de inicializar a libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Nenhuma unidade especificada"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Incapaz de encontrar a unidade %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Unidade %s não contém quaisquer ficheiros audio"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "ponto de montagem cdda em %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Disco Audio"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Sistema de ficheiros está ocupado: %d ficheiro aberto"
-msgstr[1] "Sistema de ficheiros está ocupado: %d ficheiros abertos"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Ficheiro %s inexistente na unidade %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Erro de 'paranoia' na unidade %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Erro ao procurar no fluxo na unidade %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Ficheiro inexistente"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "O ficheiro não existe ou não é uma faixa audio"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Serviço de Sistema de Ficheiros de CD Áudio"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Computador"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Sistema de Ficheiros"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "Incapaz de abrir o directório"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Incapaz de abrir o ficheiro montável"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Erro interno: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Incapaz de montar o ficheiro"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Nenhum media no dispositivo"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Não é um ficheiro montável"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Incapaz de desmontar o ficheiro"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Incapaz de ejectar o ficheiro"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Erro HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Incapaz de processar a resposta"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Resposta vazia"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Resposta inesperada do servidor"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Resposta inválida"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "Partilha WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Introduza a senha para %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Introduza a senha de proxy"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Partilha som WebDAV activo"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV em %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Incapaz de criar pedido"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Já existe o ficheiro de destino"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "O ficheiro foi alterado externamente"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Falha ao criar o ficheiro de cópia de segurança"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Incapaz de monitorizar um ficheiro ou um directório."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Rede"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Não são suportadas contas"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "A máquina fechou a ligação"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Incapaz de abrir a ligação de dados. Talvez a sua firewall esteja a bloqueá-"
-"la?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Ligação de dados fechada"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Falha na operação"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Servidor sem espaço disponível"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Operação não é suportada"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Permissão negada"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Tipo de página desconhecido"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Nome de ficheiro inválido"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Resposta inválida"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "transmissão quebrada"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Incapaz de se ligar à máquina"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Introduza a senha de ftp para %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Diálogo de senha cancelado"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp em %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp como %s em %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Ficheiro é um directório"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "ainda não são suportadas cópias de segurança"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "nome de ficheiro demasiado extenso"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Nome de ficheiro de destino inválido"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Directório ou ficheiro já existe"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Ficheiro ou directório inexistente"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Nome de ficheiro inválido"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Não Suportado"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Câmara Digital (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Câmara %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Reprodutor Áudio %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Câmara"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Reprodutor Áudio"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Falha ao obter a lista de pastas"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Nenhum dispositivo especificado"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Incapaz de criar contexto gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Erro ao criar a câmara"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Erro ao ler a informação do dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Erro ao procurar a informação de dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Erro ao obter a informação do dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Erro ao definir o porto de comunicação da câmara"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Erro ao inicializar a câmara"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "ponto de montagem gphoto2 em %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Nenhuma câmara especificada"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Erro ao criar objecto de ficheiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Erro ao obter o ficheiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Erro ao obter dados do ficheiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Erro ao procurar no fluxo na câmara %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Não é um directório"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Falha ao obter a lista de ficheiros"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Erro ao criar directório"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Nome já existe"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Novo nome demasiado extenso"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Erro ao renomear directório"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Erro ao renomear ficheiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Directório '%s' não está vazio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Erro ao apagar o directório"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Erro ao apagar o ficheiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "Incapaz de gravar no directório"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Incapaz de alocar novo ficheiro ao qual acrescentar"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Incapaz de ler o ficheiro ao qual acrescentar"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Incapaz de obter dados do ficheiro ao qual acrescentar"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Erro ao gravar o ficheiro"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Não suportado (não é o mesmo directório)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Não suportado (origem é directório, destino é directório)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Não suportado (origem é directório, destino é ficheiro existente)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Não suportado (origem é ficheiro, destino é directório)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Erro de Cliente HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (codificação inválida)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Notificação de directório não suportada"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Rede Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Rede Local"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Monitor de Localizações na Rede"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s em %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Perdida a ligação ao dispositivo"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Dispositivo requer uma actualização da aplicação"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "Aplicação ssh terminou inesperadamente"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Nome de máquina desconhecido"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Nenhum caminho para a máquina"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Ligação recusada pelo servidor"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Falha na verificação da chave da máquina"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Incapaz de iniciar aplicação ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Incapaz de iniciar aplicação ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Tempo expirou ao iniciar sessão"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Introduza a frase-senha para a chave"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Introduza a senha"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Incapaz de enviar a senha"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Ainda Assim Iniciar Sessão"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Cancelar o Início de Sessão"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"A identidade do computador remoto (%s) é desconhecida.\n"
-"Tal acontece quando inicia uma sessão num computador pela primeira vez.\n"
-"\n"
-"A identidade enviada pelo computador remoto é %s. Caso queira ter a certeza "
-"absoluta de que é seguro prosseguir, contacto o administrador de sistemas."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Diálogo de início de sessão cancelado"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Incapaz de enviar a confirmação de identidade da máquina"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Erro de protocolo"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp em %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Incapaz de encontrar comando ssh suportado"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Falha"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Recebida uma resposta inválida"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Erro ao criar ficheiro de cópia de segurança: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Incapaz de criar o ficheiro temporário"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Incapaz de mover um directório sobre um directório"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Senha necessária para a partilha %s em %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Erro Interno (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Falha ao montar partilha Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Tipo de procura não suportado"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Falha ao criar o ficheiro de cópia de segurança: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Erro ao apagar o ficheiro: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Erro ao mover o ficheiro: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Erro ao remover o ficheiro de destino: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Incapaz de mover directório recursivamente"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Serviço de Sistema de Ficheiros Partilhado Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Partilha Windows em %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "O ficheiro não é montável"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Não é um ficheiro comum"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Serviço de Sistema de Ficheiros de Rede Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Lixo"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (no lixo)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Incapaz de apagar o Lixo"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Não é suportada a notificação de directório de Lixo"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Tipo de motor inválido"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Erro ao enviar fd: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Atalhos não são suportados pelo motor"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Mensagem dbus inválida"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Substituir o daemon antigo."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Não iniciar o fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Daemon GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Daemon principal do GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Tente \"%s --help\" para mais informações."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Argumentos inválidos oriundos de um processo filho (spawned)"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Falha ao montar automaticamente: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "A localização especificada não está montada"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "A localização especificada não é suportada"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "A localização já se encontra montada"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "A localização não é montável"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-R"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Dispositivo %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Dispositivo %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Dispositivo de Disquette"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Unidade RAID por Software"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Unidade USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Unidade ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Unidade SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Unidade FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Unidate de Fita"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Unidade de Flash Compacta"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Unidade de Caneta de Memória"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Unidade de Smart Media"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Unidade SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Unidade Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Unidade Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Unidade Thumb"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Dispositivo de Armazenamento"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Falha ao ejectar o media; um ou mais volumes no media estão ocupados."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "Disco de Áudio e Dados Misturados"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "Media %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s de Dados Encriptados"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Disco CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Disco CD-ROM Virgem"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Disco CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Disco CD-R Virgem"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Disco CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Disco CD-RW Virgem"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Disco CVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Disco DVD-ROM Virgem"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Disco DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Disco DVD-RAM Virgem"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Disco DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Disco DVD-RW Virgem"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Disco DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Disco DVD+R Virgem"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Disco DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Disco DVD+RW Virgem"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Disco DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Disco DVD+R DL Virgem"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Disco Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Disco Blu-Ray Virgem"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Disco Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Disco Blu-Ray R Virgem"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Disco Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Disco Blu-Ray RW Virgem"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Disco HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Disco HD DVD Virgem"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Disco HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Disco HD DVD-R Virgem"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Disco HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Disco HD DVD-RW Virgem"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Disco MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Disco MO Virgem"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Disco"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Disco Virgem"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: erro ao abrir o ficheiro: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, erro ao escrever para o stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: erro ao ler: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: erro ao fechar: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCALIZAÇÃO... - concatenar LOCALIZAÇÕES na consola de saída."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Concatenar os ficheiros nas localizações e imprimir para a consola de saída. "
-"Funciona tal como o utilitário cat, mas utiliza a localização gvfs em vez de "
-"ficheiros locais: por exemplo, pode utilizar algo como smb://servidor/"
-"recurso/ficheiro.txt como uma localização a concatenar."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Nota: envie o resultado para o cat caso necessite das suas opções de "
-"formatação tais como -n, -T ou outra."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: localizações inexistentes"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: erro ao abrir a localização: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: erro ao iniciar a aplicação: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FICHEIROS... - abrir FICHEIROS com a aplicação registada."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Abrir o(s) ficheiro(s) com a aplicação por omissão registada para manipular "
-"este tipo de ficheiros."
-
-#~ msgid "Error listing folders to figure out ignore prefix"
-#~ msgstr "Erro ao listar as pastas para compreender prefixo de ignorar"
-
-#~ msgid "Error creating port info list"
-#~ msgstr "Erro ao criar lista de informação de portos"
-
-#~ msgid "Error getting port info from port info list"
-#~ msgstr ""
-#~ "Erro ao obter a informação de portos da lista de informação de portos"
-
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "Sistema de ficheiros está ocupado: %d ficheiros abertos"
-
-#~ msgid "Error listing folders"
-#~ msgstr "Erro ao listar as pastas"
-
-#~ msgid "Error listing files in folder"
-#~ msgstr "Erro ao listar os ficheiros nas pastas"
-
-#~ msgid "File unavailable"
-#~ msgstr "Ficheiro indisponível"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "Media de %.1f kB"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "Media de %.1f MB"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "Media de %.1f GB"
-
-#~ msgid "File does not exist"
-#~ msgstr "Ficheiro não existe"
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "Disco Audio em %s"
-
-#~ msgid "The file does not exist"
-#~ msgstr "O ficheiro não existe"
-
-#~ msgid "CD Burner"
-#~ msgstr "Gravador de CD"
-
-#~ msgid "Error connecting dbus: %s\n"
-#~ msgstr "Erro ao se ligar ao dbus: %s\n"
-
-#~ msgid "No fd passing socket available"
-#~ msgstr "Nenhum socket fd de passagem disponível"
diff --git a/po/pt_BR.po b/po/pt_BR.po
deleted file mode 100644
index 3995a47e..00000000
--- a/po/pt_BR.po
+++ /dev/null
@@ -1,1602 +0,0 @@
-# Brazilian Portuguese translation of Gvfs
-# Copyright (C) 2000-2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the Gvfs package.
-# Enrico Nicoletto <liverig@gmail.com>, 2008.
-# Jonh Wendell <wendell@bani.com.br>, 2008.
-# Vladimir Melo <vladimirmelo.psi@gmail.com>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs 0.1.8\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-21 15:25+0000\n"
-"PO-Revision-Date: 2008-08-21 19:39-0300\n"
-"Last-Translator: Vladimir Melo <vladimirmelo.psi@gmail.com>\n"
-"Language-Team: Portuguese/Brazil <gnome-l10n-br@listas.cipsga.org.br>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Poedit-Language: Portuguese\n"
-"X-Poedit-Country: BRAZIL\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-"Operação sem suporte, os arquivos estão em diferentes pontos de montagem"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Valor de retorno inválido de get_info"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Valor de retorno inválido de query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Não foi possível obter o descritor de arquivo"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "Valor de retorno inválido de open"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Não obteve o descritor do arquivo de fluxo"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Valor de retorno inválido de call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Valor de retorno inválido de get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Não foi localizado um ponto de montagem"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Nome de arquivo %s inválido"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Valor de retorno inválido de query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "Valor de retorno inválido de monitor_dir"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "Valor de retorno inválido de monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Erro no protocolo de fluxo: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Fim do fluxo"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "A operação foi cancelada"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Busca sem suporte no fluxo"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "A operação de consulta não tem suporte"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Informações de consulta sem suporte no fluxo"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Erro ao obter as informações de montagem: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Erro ao conectar ao daemon: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Erro ao criar o soquete: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Erro ao se conectar com o soquete: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Formato de informações de arquivo inválido"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Atributo inválido da lista de conteúdo"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Erro ao conectar ao D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Sistema de arquivos %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Erro: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Uso: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Uso: %s chave=valor chave=valor ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Nenhum tipo de montagem especificado"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "o ponto de montagem para %s já está ativo"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "erro ao iniciar o daemon de montagem"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ em %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Nenhum nome de máquina especificado"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Especificação inválida de montagem"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "O arquivo não existe"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "O arquivo não é um diretório"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Gravação"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Não foi possível criar o diretório temporário"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendgphoto2.c:2690
-#, c-format
-msgid "No such file or directory"
-msgstr "Nenhum arquivo ou diretório"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "Diretório não vazio"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "Não foi possível copiar o arquivo sobre o diretório"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Criador de CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2763
-msgid "File exists"
-msgstr "O arquivo existe"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "Nenhum arquivo ou diretório no caminho de destino"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "Não foi possível copiar o diretório sobre outro diretório"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "O arquivo de destino existe"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "Não foi possível copiar o diretório recursivamente"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2348
-#: ../daemon/gvfsbackendgphoto2.c:2556 ../daemon/gvfsbackendgphoto2.c:2651
-#: ../daemon/gvfsbackendgphoto2.c:2742
-msgid "Not supported"
-msgstr "Sem suporte"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "Não foi possível conectar ao bus do sistema"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "Não foi possível criar o contexto libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "Não foi possível inicializar libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Nenhuma unidade especificada"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Não foi possível localizar a unidade %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Não há arquivos de áudio na unidade %s"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda montado em %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Disco de Áudio"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "O sistema de arquivos está ocupado: %d arquivo aberto"
-msgstr[1] "O sistema de arquivos está ocupado: %d arquivos abertos"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Nenhum arquivo %s na unidade %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Erro do aplicativo 'paranoia' na unidade %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Erro ao buscar no fluxo da unidade %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1711
-#, c-format
-msgid "No such file"
-msgstr "Nenhum arquivo"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "O arquivo não existe ou não é uma faixa de áudio"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Serviço de sistema de arquivos de CD de Áudio"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Computador"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Sistema de arquivos"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1703
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "Não foi possível abrir o diretório"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Não foi possível abrir o arquivo de montagem"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Erro interno: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Não foi possível montar arquivo"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Nenhuma mídia na unidade"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Não é um arquivo de montagem"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Não foi possível desmontar o arquivo"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Não é possível ejetar o arquivo"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Erro de HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Não foi possível analisar a resposta"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Resposta vazia"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Resposta inesperada do servidor"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "Resposta inválida"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "Compartilhamento WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "Digite a senha para %s"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "Digite a senha do proxy"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr "Não é um compartilhamento WebDAV habilitado"
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV em %s"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "Não foi possível criar a requisição"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "O arquivo de destino já existe"
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "O arquivo foi modificado externamente"
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Criação de arquivo de backup falhou"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Não foi possível monitorar o arquivo ou o diretório."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Rede"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "As contas não têm suporte"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "A máquina fechou a conexão"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Não foi possível abrir a conexão de dados. O seu firewall pode evitar isso?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Conexão de dados fechada"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "A operação falhou"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Não há espaço no servidor"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "A operação não tem suporte"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Permissão negada"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Tipo de página desconhecido"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Nome de arquivo inválido"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Resposta inválida"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "transmissão encerrada"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Não foi possível conectar à máquina"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Digite a senha para o ftp em %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Diálogo de senha cancelado"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp em %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp como %s em %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "O arquivo é um diretório"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "Ainda sem suporte para backups"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "nome do arquivo muito longo"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Nome de arquivo de destino inválido"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: diretório ou arquivo existe"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: nenhum arquivo ou diretório"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: nome de arquivo inválido"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: sem suporte"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Câmera Digital (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Câmera %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Reprodutor de áudio %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Câmera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Reprodutor de áudio"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2008
-msgid "Failed to get folder list"
-msgstr "Falha ao obter a lista de pastas"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "Nenhum dispositivo especificado"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "Não foi possível criar o contexto gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "Erro ao criar a câmera"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482 ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading device information"
-msgstr "Erro ao carregar as informações do dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up device information"
-msgstr "Erro ao procurar as informações do dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting device information"
-msgstr "Erro ao obter as informações do dispositivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting up camera communications port"
-msgstr "Erro ao configurar a porta de comunicações da câmera"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "Erro ao inicializar a câmera"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "Ponto de montagem gphoto2 em %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "Nenhuma câmera especificada"
-
-#: ../daemon/gvfsbackendgphoto2.c:1719
-msgid "Error creating file object"
-msgstr "Erro ao criar o objeto do arquivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1733
-msgid "Error getting file"
-msgstr "Erro ao obter o arquivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1742
-msgid "Error getting data from file"
-msgstr "Erro ao obter os dados do arquivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:1836 ../daemon/gvfsbackendgphoto2.c:3010
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Erro ao buscar no fluxo da câmera %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1975 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Não é um diretório"
-
-#: ../daemon/gvfsbackendgphoto2.c:2071
-msgid "Failed to get file list"
-msgstr "Falha ao obter a lista de arquivos"
-
-#: ../daemon/gvfsbackendgphoto2.c:2360
-msgid "Error creating directory"
-msgstr "Erro ao criar o diretório"
-
-#: ../daemon/gvfsbackendgphoto2.c:2568
-msgid "Name already exists"
-msgstr "O arquivo já existe"
-
-#: ../daemon/gvfsbackendgphoto2.c:2579 ../daemon/gvfsbackendgphoto2.c:3200
-msgid "New name too long"
-msgstr "Nome novo muito longo"
-
-#: ../daemon/gvfsbackendgphoto2.c:2589 ../daemon/gvfsbackendgphoto2.c:3211
-msgid "Error renaming dir"
-msgstr "Erro ao renomear o diretório"
-
-#: ../daemon/gvfsbackendgphoto2.c:2601 ../daemon/gvfsbackendgphoto2.c:3223
-msgid "Error renaming file"
-msgstr "Erro ao renomear o arquivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:2664
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "O diretório '%s' não está vazio"
-
-#: ../daemon/gvfsbackendgphoto2.c:2675
-msgid "Error deleting directory"
-msgstr "Erro ao excluir o diretório"
-
-#: ../daemon/gvfsbackendgphoto2.c:2700
-msgid "Error deleting file"
-msgstr "Erro ao excluir o arquivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:2752
-msgid "Can't write to directory"
-msgstr "Não é possível escrever para o diretório"
-
-#: ../daemon/gvfsbackendgphoto2.c:2799
-msgid "Cannot allocate new file to append to"
-msgstr "Não foi possível alocar o novo arquivo a ser acrescentado"
-
-#: ../daemon/gvfsbackendgphoto2.c:2813
-msgid "Cannot read file to append to"
-msgstr "Não foi possível ler o arquivo a ser acrescentado"
-
-#: ../daemon/gvfsbackendgphoto2.c:2823
-msgid "Cannot get data of file to append to"
-msgstr "Não é possível obter dados do arquivo a ser acrescentado"
-
-#: ../daemon/gvfsbackendgphoto2.c:3109
-msgid "Error writing file"
-msgstr "Erro ao escrever arquivo"
-
-#: ../daemon/gvfsbackendgphoto2.c:3156
-msgid "Not supported (not same directory)"
-msgstr "Sem suporte (não é o mesmo diretório)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3168
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Sem suporte (src é diretório, dst é diretório)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3176
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Sem suporte (src é diretório, dst é arquivo existente)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3188
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Sem suporte (src é arquivo, dst é diretório)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Erro de cliente HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (codificação inválida)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Notificação de diretório sem suporte"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Rede Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Rede local"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Monitor de localização de rede"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s em %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "A conexão ao dispositivo foi perdida"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "O dispositivo requer uma atualização de software"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "programa ssh fechou inesperadamente"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Nome de máquina desconhecido"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Sem rota para a máquina"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Conexão cancelada pelo servidor"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "A verificação da chave de máquina falhou"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Não foi possível criar o programa ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Não foi possível criar o programa ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Tempo esgotado ao efetuar o login"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Digite a senha para a chave"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Digite a senha"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Não foi possível enviar a senha"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Efetuar login mesmo assim"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Cancelar login"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"A identidade do computador remoto (%s) é desconhecida.\n"
-"Isso acontece quando você se conecta a um computador pela primeira vez.\n"
-"\n"
-"A identificação enviada pelo outro computador é %s. Se você quer ter a "
-"certeza que é ou não seguro continuar, pergunte ao administrador do sistema."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Diálogo de login cancelado"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Não foi possível enviar a confirmação da identidade de máquina"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Erro de protocolo"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp em %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Não foi possível localizar nenhum programa ssh com suporte"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Falha"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "A resposta recebida é inválida"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Erro ao criar arquivo de backup: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Não foi possível criar o arquivo temporário"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Não foi possível mover o diretório sobre outro diretório"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Senha requerida para compartilhar %s em %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Erro Interno (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Falha ao montar o compartilhamento Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Tipo de pesquisa sem suporte"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "A criação de arquivo de backup falhou: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Erro ao excluir o arquivo: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Erro ao mover o arquivo: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Erro ao remover o arquivo de destino: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Não foi possível mover um diretório recursivamente"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Compartilhamentos Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Compartilhamentos Windows em %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Este arquivo não é um montável"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Não é um arquivo normal"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Rede Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Lixeira"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (na lixeira)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "A lixeira não pode ser excluída"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Notificação do diretório da lixeira sem suporte"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Tipo de backend inválido"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Erro ao enviar fd: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Operação sem suporte pelo backend"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Links simbólicos não tem suporte pelo backend"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Mensagem D-Bus inválida"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Substitui o daemon atual."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Não inicia o fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Servidor GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Daemon principal para o GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Tente \"%s --help\" para mais informações."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Argumentos inválidos para um filho lançado"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "A montagem automática falhou: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "A localização especificada não está montada"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "A localização especificada não tem suporte"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "A localização já está montada"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "A localização não está montada"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Unidade de %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Unidade de %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Drive de Disquete"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "RAID via Software"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Disco USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Disco ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Disco SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Unidade FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Unidade de fita"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Unidade CompactFlash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Unidade MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Unidade SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Unidade SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Disco Zip Drive"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Unidade Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Unidade Thumb"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Unidade de armazenamento em massa"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Falha ao ejetar mídia; um ou mais volumes na mídia estão ocupados."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Disco misturado de áudio/dados"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "Mídia de %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s de Dados criptografados"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Disco CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Disco de CD-ROM vazio"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Disco Gravável CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Disco Gravável CD-R Vazio"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Disco Regravável CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Disco Regravável CD-RW Vazio"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Disco de DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Disco de DVD-ROM vazio"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Disco de DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Disco de DVD-RAM vazio"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Disco de DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Disco de DVD-RW vazio"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Disco de DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Disco de DVD+R vazio"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Disco de DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Disco de DVD+RW vazio"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Disco de DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Disco de DVD+R DL vazio"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Disco de Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Disco de Blu-Ray vazio"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Disco de Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Disco de Blu-Ray R vazio"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Disco de Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Disco de Blu-Ray RW vazio"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Disco de HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Disco de HD DVD vazio"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Disco de HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Disco de HD DVD-R vazio"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Disco de HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Disco de HD DVD-RW vazio"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Disco MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Disco MO vazio"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Disco"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Disco vazio"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: erro ao abrir o arquivo: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, erro ao escrever na saída padrão"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: erro ao ler: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:erro ao fechar: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCALIZAÇÃO... - junta (concatena) as LOCALIZAÇÕES na saída padrão."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Concatena arquivos e os imprime na saída padrão. Funciona exatamente como o "
-"tradicional cat, porém usando uma URL gvfs ao invés de arquivos locais: por "
-"exemplo,você pode usar algo como smb://servidor/compartilhamento/arquivo.txt "
-"como um arquivo para concatenar."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Nota: simplesmente faça uso do pipe (|) com o cat se você precisa das suas "
-"opções de formatação, como -n, -T ou outra qualquer."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: faltando as localizações"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: erro ao abrir a localização: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: erro ao lançar o aplicativo: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "ARQUIVOS... - abre os ARQUIVOS com o aplicativo registrado."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Abre o(s) arquivo(s) com o aplicativo padrão registrado para gerenciar o "
-"tipo mime do arquivo."
-
-#~ msgid "Error listing folders to figure out ignore prefix"
-#~ msgstr "Erro ao listar pastas para averiguar o prefixo de ignorado"
-
-#~ msgid "Error creating port info list"
-#~ msgstr "Erro ao criar a lista de informações da porta"
-
-#~ msgid "Error getting port info from port info list"
-#~ msgstr ""
-#~ "Erro ao obter as informações da porta da lista de informações da porta"
-
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "O sistema de arquivos está ocupado: %d arquivos abertos"
-
-#~ msgid "Error listing folders"
-#~ msgstr "Erro ao listar as pastas"
-
-#~ msgid "Error listing files in folder"
-#~ msgstr "Erro ao listar os arquivos na pasta"
-
-#~ msgid "File unavailable"
-#~ msgstr "Arquivo indisponível"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "Mídia de %.1f kB"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "Mídia de %.1f MB"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "Mídia de %.1f GB"
-
-#~ msgid "Invalid reply from server"
-#~ msgstr "Resposta inválida do servidor"
-
-#~ msgid "File does not exist"
-#~ msgstr "O arquivo não existe"
-
-#~ msgid "Invalid username"
-#~ msgstr "Nome de usuário inválido"
-
-#~ msgid "Invalid password"
-#~ msgstr "Senha inválida"
-
-#~ msgid "Operation cancelled"
-#~ msgstr "Operação cancelada"
-
-#~ msgid "Enter passsword for %s"
-#~ msgstr "Digite a senha para %s"
-
-#~ msgid "FTP on %s"
-#~ msgstr "FTP em %s"
-
-#~ msgid "FTP on %s:%u"
-#~ msgstr "FTP em %s:%u"
-
-#~ msgid "The file does not exist"
-#~ msgstr "O arquivo não existe"
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "Disco de Áudio em %s"
diff --git a/po/ru.po b/po/ru.po
deleted file mode 100644
index d195aa66..00000000
--- a/po/ru.po
+++ /dev/null
@@ -1,1344 +0,0 @@
-# translation of ru.po to Russian
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Leonid Kanter <leon@asplinux.ru>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: ru\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-03 13:23+0200\n"
-"PO-Revision-Date: 2008-03-03 14:54+0200\n"
-"Last-Translator: Leonid Kanter <leon@asplinux.ru>\n"
-"Language-Team: Russian <en@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: ../client/gdaemonfile.c:464 ../client/gdaemonfile.c:1867
-msgid "Operation not supported, files on different mounts"
-msgstr "Действие не поддерживается, файлы на разных точках монтирования"
-
-#: ../client/gdaemonfile.c:758
-msgid "Invalid return value from get_info"
-msgstr "Функция get_info вернула неверное значение"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from query_info"
-msgstr "Функция query_info вернула неверное значение"
-
-#: ../client/gdaemonfile.c:865
-msgid "Couldn't get stream file descriptor"
-msgstr "Не удаётся получить описание файла потока"
-
-#: ../client/gdaemonfile.c:897 ../client/gdaemonfile.c:967
-#: ../client/gdaemonfile.c:1026 ../client/gdaemonfile.c:1085
-#: ../client/gdaemonfile.c:1147
-msgid "Invalid return value from open"
-msgstr "Функция open вернула неверное значение"
-
-#: ../client/gdaemonfile.c:977 ../client/gdaemonfile.c:1036
-#: ../client/gdaemonfile.c:1095 ../client/gdaemonfile.c:1157
-msgid "Didn't get stream file descriptor"
-msgstr "Дескриптор файла потока не был получен"
-
-#: ../client/gdaemonfile.c:1209 ../client/gdaemonfile.c:1226
-msgid "Invalid return value from call"
-msgstr "Функция call вернула неверное значение"
-
-#: ../client/gdaemonfile.c:1505
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Функция get_filesystem_info вернула неверное значение"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1549
-msgid "Could not find enclosing mount"
-msgstr "Не удаётся найти точку монтирования"
-
-#: ../client/gdaemonfile.c:1579
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Неверное имя файла %s"
-
-#: ../client/gdaemonfile.c:1621
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Функция query_filesystem_info вернула неверное значение"
-
-#: ../client/gdaemonfile.c:2012
-msgid "Invalid return value from monitor_dir"
-msgstr "Получено неверное значение от функции monitor_dir"
-
-#: ../client/gdaemonfile.c:2061
-msgid "Invalid return value from monitor_file"
-msgstr "Получено неверное значение от функции monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Ошибка в протоколе потока: %s"
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr "Конец потока"
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendftp.c:824
-#: ../daemon/gvfsbackendobexftp.c:753 ../daemon/gvfsbackendobexftp.c:774
-#: ../daemon/gvfsbackendobexftp.c:893 ../daemon/gvfsbackendobexftp.c:1030
-#: ../daemon/gvfsbackendobexftp.c:1094 ../daemon/gvfsbackendobexftp.c:1220
-#: ../daemon/gvfsbackendobexftp.c:1247 ../daemon/gvfsbackendobexftp.c:1306
-#: ../daemon/gvfsbackendobexftp.c:1328 ../daemon/gvfsbackendobexftp.c:1388
-#: ../daemon/gvfsbackendobexftp.c:1407 ../daemon/gvfsbackendsmb.c:1014
-#: ../daemon/gvfsbackendtest.c:87 ../daemon/gvfsbackendtest.c:120
-#: ../daemon/gvfsbackendtest.c:183 ../daemon/gvfschannel.c:297
-msgid "Operation was cancelled"
-msgstr "Действие было прервано"
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr "Поиск в потоке не поддерживается"
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr "Операция запроса информации не поддерживается"
-
-#: ../client/gdaemonvfs.c:604
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Ошибка получения информации о монтировании: %s"
-
-#: ../client/gvfsdaemondbus.c:559 ../client/gvfsdaemondbus.c:946
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Ошибка подключения к демону: %s"
-
-#: ../common/gsysutils.c:127
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Ошибка создания сокета: %s"
-
-#: ../common/gsysutils.c:165
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Ошибка подключения к сокету: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Неверный формат информации о файле"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Неверное содержимое списка информации об атрибутах."
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Ошибка подключения к D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Служба файловой системы %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Ошибка: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Применение: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Применение: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-msgid "No mount type specified"
-msgstr "Тип монтирования не указан"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "точка монтирования для %s уже запущена"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "ошибка запуска демона монтирования"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr "Записать"
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr "Не удаётся создать временный каталог"
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr "Нет такого файла или каталога"
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1757
-msgid "Directory not empty"
-msgstr "Каталог не пустой"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr "Не удаётся скопировать файл поверх каталога"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "Создание CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:681 ../daemon/gvfsbackendcomputer.c:652
-#: ../daemon/gvfsbackenddnssd.c:393 ../daemon/gvfsbackendftp.c:742
-#: ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Этот файл не является каталогом"
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "Файл существует"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr "Нет такого файла или каталога в пути назначения"
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr "Не удаётся скопировать каталог поверх каталога"
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr "Файл назначения уже существует"
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr "Не удаётся скопировать каталог рекурсивно"
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr "Не поддерживается"
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr "Устройство не указано"
-
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Не удаётся найти устройство %s"
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Устройство %s не содержит звуковых файлов"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr "подключение cdda на %s"
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:488 ../hal/ghalvolume.c:286 ../hal/ghalvolume.c:307
-msgid "Audio Disc"
-msgstr "Звуковой диск"
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Файловая система занята: %d открытый файл"
-msgstr[1] "Файловая система занята: %d открытых файла"
-msgstr[2] "Файловая система занята: %d открытых файлов"
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Нет такого файла %s на устройстве %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Ошибка программы \"paranoia\" на устройстве %s"
-
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Ошибка поиска в потоке на устройстве %s"
-
-#: ../daemon/gvfsbackendcdda.c:818
-msgid "No such file"
-msgstr "Нет такого файла"
-
-#: ../daemon/gvfsbackendcdda.c:825 ../daemon/gvfsbackendcomputer.c:573
-#: ../daemon/gvfsbackenddnssd.c:345 ../daemon/gvfsbackendftp.c:1765
-#: ../daemon/gvfsbackendnetwork.c:590 ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:866 ../daemon/gvfsbackendsmbbrowse.c:1037
-#: ../daemon/gvfsbackendsmbbrowse.c:1111
-msgid "File doesn't exist"
-msgstr "Файл не существует"
-
-#: ../daemon/gvfsbackendcdda.c:832
-msgid "The file does not exist or isn't an audio track"
-msgstr "Файл не существует или не является звуковой дорожкой"
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr "Служба файловой системы Audio CD"
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr "Компьютер"
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr "Файловая система"
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendobexftp.c:739
-#: ../daemon/gvfsbackendtrash.c:635
-msgid "Can't open directory"
-msgstr "Не удаётся открыть каталог"
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr "Не удаётся открыть монтируемый файл"
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr "Внутренняя ошибка: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:927
-msgid "Can't mount file"
-msgstr "Не удаётся смонтировать файл"
-
-#: ../daemon/gvfsbackendcomputer.c:822
-msgid "No media in the drive"
-msgstr "В устройстве нет диска"
-
-#: ../daemon/gvfsbackendcomputer.c:879 ../daemon/gvfsbackendcomputer.c:970
-#: ../daemon/gvfsbackendcomputer.c:1070
-msgid "Not a mountable file"
-msgstr "Файл не является монтируемым"
-
-#: ../daemon/gvfsbackendcomputer.c:985
-msgid "Can't unmount file"
-msgstr "Не удаётся отмонтировать файл"
-
-#: ../daemon/gvfsbackendcomputer.c:1101
-msgid "Can't eject file"
-msgstr "Не удаётся извлечь файл"
-
-#: ../daemon/gvfsbackenddav.c:283 ../daemon/gvfsbackenddav.c:1259
-#: ../daemon/gvfsbackenddav.c:1720 ../daemon/gvfsbackendhttp.c:215
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Ошибка HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:299
-msgid "Could not parse response"
-msgstr "Не удаётся разобрать ответ"
-
-#: ../daemon/gvfsbackenddav.c:308
-msgid "Empty response"
-msgstr "Пустой ответ"
-
-#: ../daemon/gvfsbackenddav.c:315
-msgid "Unexpected reply from server"
-msgstr "Неожиданный ответ от сервера"
-
-#: ../daemon/gvfsbackenddav.c:918 ../daemon/gvfsbackenddav.c:1378
-msgid "Response invalid"
-msgstr "Неверный ответ"
-
-#: ../daemon/gvfsbackenddav.c:1062
-msgid "WebDAV share"
-msgstr "Ресурс WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1064
-#, c-format
-msgid "Enter password for %s"
-msgstr "Введите пароль для %s"
-
-#: ../daemon/gvfsbackenddav.c:1067
-msgid "Please enter proxy password"
-msgstr "Введите пароль прокси-сервера"
-
-#: ../daemon/gvfsbackenddav.c:1176 ../daemon/gvfsbackendhttp.c:292
-#: ../daemon/gvfsbackendobexftp.c:592 ../daemon/gvfsbackendobexftp.c:603
-#: ../daemon/gvfsbackendsmb.c:594
-msgid "Invalid mount spec"
-msgstr "Неверная спецификация монтирования"
-
-#: ../daemon/gvfsbackenddav.c:1263 ../daemon/gvfsbackenddav.c:1267
-msgid "Not a WebDAV enabled share"
-msgstr "Не является ресурсом WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1334 ../daemon/gvfsbackenddav.c:1409
-msgid "Could not create request"
-msgstr "Не удаётся создать запрос"
-
-#: ../daemon/gvfsbackenddav.c:1474 ../daemon/gvfsbackendsmb.c:1726
-msgid "Target file already exists"
-msgstr "Файл назначения уже существует"
-
-#: ../daemon/gvfsbackenddav.c:1544 ../daemon/gvfsbackendsftp.c:2689
-#: ../daemon/gvfsbackendsmb.c:982
-msgid "The file was externally modified"
-msgstr "Файл был изменён извне"
-
-#: ../daemon/gvfsbackenddav.c:1575 ../daemon/gvfsbackendsmb.c:1020
-#: ../daemon/gvfsbackendsmb.c:1743
-msgid "Backup file creation failed"
-msgstr "Ошибка создания резервной копии файла"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Не удаётся отслеживать состояние файла или каталога."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Сеть"
-
-#: ../daemon/gvfsbackendftp.c:183
-msgid "Accounts are unsupported"
-msgstr "Учётные записи не поддерживаются"
-
-#: ../daemon/gvfsbackendftp.c:187
-msgid "Host closed connection"
-msgstr "Узел закрыл соединение"
-
-#: ../daemon/gvfsbackendftp.c:191
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Не удаётся установить соединение данных. Проверьте, пожалуйста, настройки брандмауэра."
-
-#: ../daemon/gvfsbackendftp.c:195
-msgid "Data connection closed"
-msgstr "Соединение данных закрыто"
-
-#: ../daemon/gvfsbackendftp.c:201
-msgid "File unavailable"
-msgstr "Файл недоступен"
-
-#: ../daemon/gvfsbackendftp.c:205
-msgid "Operation failed"
-msgstr "Сбой операции"
-
-#: ../daemon/gvfsbackendftp.c:210
-msgid "No space left on server"
-msgstr "На сервере не осталось свободного места"
-
-#: ../daemon/gvfsbackendftp.c:218
-msgid "Operation unsupported"
-msgstr "Действие неподдерживается"
-
-#: ../daemon/gvfsbackendftp.c:222 ../daemon/gvfsbackendsftp.c:261
-msgid "Permission denied"
-msgstr "Доступ запрещен"
-
-#: ../daemon/gvfsbackendftp.c:226
-msgid "Page type unknown"
-msgstr "Неизвестный тип страницы"
-
-#: ../daemon/gvfsbackendftp.c:230 ../daemon/gvfsbackendftp.c:1840
-msgid "Invalid filename"
-msgstr "Неверное имя файла"
-
-#: ../daemon/gvfsbackendftp.c:234 ../daemon/gvfsbackendftp.c:312
-#: ../daemon/gvfsbackendftp.c:336 ../daemon/gvfsbackendftp.c:349
-#: ../daemon/gvfsbackendftp.c:365 ../daemon/gvfsbackendftp.c:648
-msgid "Invalid reply"
-msgstr "Неверный ответ"
-
-#: ../daemon/gvfsbackendftp.c:461
-msgid "broken transmission"
-msgstr "сбой передачи"
-
-#: ../daemon/gvfsbackendftp.c:553 ../daemon/gvfsbackendftp.c:666
-msgid "Could not connect to host"
-msgstr "Не удаётся подключиться к узлу"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:906
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Введите пароль для ftp на %s"
-
-#: ../daemon/gvfsbackendftp.c:925 ../daemon/gvfsbackendsftp.c:834
-msgid "Password dialog cancelled"
-msgstr "Диалог ввода пароля прерван"
-
-#: ../daemon/gvfsbackendftp.c:977
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp на %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:983
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp как %s на %s"
-
-#: ../daemon/gvfsbackendftp.c:1015 ../daemon/gvfsbackendsftp.c:1411
-msgid "No hostname specified"
-msgstr "Имя узла не указано"
-
-#: ../daemon/gvfsbackendftp.c:1221 ../daemon/gvfsbackendftp.c:1931
-msgid "backups not supported yet"
-msgstr "резервные копии еще не поддерживаются"
-
-#: ../daemon/gvfsbackendftp.c:1436 ../daemon/gvfsbackendftp.c:1636
-msgid "filename too long"
-msgstr "имя файла слишком длинное"
-
-#: ../daemon/gvfsbackendftp.c:1950
-msgid "Invalid destination filename"
-msgstr "Неверное имя файла назначения"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:234
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Цифровая камера (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:379 ../hal/ghalvolume.c:390
-#, c-format
-msgid "%s Camera"
-msgstr "Камера %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:382 ../hal/ghalvolume.c:385
-#, c-format
-msgid "%s Audio Player"
-msgstr "Звуковой проигрыватель %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:391 ../hal/ghalvolume.c:402
-msgid "Camera"
-msgstr "Камера"
-
-#: ../daemon/gvfsbackendgphoto2.c:393 ../hal/ghalvolume.c:398
-msgid "Audio Player"
-msgstr "Звуковой проигрыватель"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:613
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "подключение gphoto2 на %s"
-
-#: ../daemon/gvfsbackendhttp.c:211
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Ошибка клиента HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:550 ../daemon/gvfsbackendsftp.c:1751
-#: ../daemon/gvfsbackendsmb.c:1229 ../daemon/gvfsbackendtrash.c:960
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (неверная кодировка)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Уведомление для каталогов не поддерживается"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:694
-msgid "Windows Network"
-msgstr "Сеть Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Локальная сеть"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Обзор сети"
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:431 ../daemon/gvfsbackendsmb.c:513
-#: ../daemon/gvfsbackendsmb.c:1222
-#, c-format
-msgid "%s on %s"
-msgstr "%s на %s"
-
-#: ../daemon/gvfsbackendsftp.c:253
-msgid "ssh program unexpectedly exited"
-msgstr "Программа ssh неожиданно завершилась"
-
-#: ../daemon/gvfsbackendsftp.c:268
-msgid "Hostname not known"
-msgstr "Имя узла неизвестно"
-
-#: ../daemon/gvfsbackendsftp.c:275
-msgid "No route to host"
-msgstr "Нет маршрута к узлу"
-
-#: ../daemon/gvfsbackendsftp.c:282
-msgid "Connection refused by server"
-msgstr "Соединение отклонено сервером"
-
-#: ../daemon/gvfsbackendsftp.c:289
-msgid "Host key verification failed"
-msgstr "Сбой проверки сертификата узла"
-
-#: ../daemon/gvfsbackendsftp.c:372
-msgid "Unable to spawn ssh program"
-msgstr "Не удаётся выполнить программу ssh"
-
-#: ../daemon/gvfsbackendsftp.c:388
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Не удаётся выполнить программу ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:491 ../daemon/gvfsbackendsftp.c:743
-msgid "Timed out when logging in"
-msgstr "Время ожидания входа в систему истекло"
-
-#: ../daemon/gvfsbackendsftp.c:819
-msgid "Enter passphrase for key"
-msgstr "Введите ключевую разу для ключа"
-
-#: ../daemon/gvfsbackendsftp.c:821
-msgid "Enter password"
-msgstr "Введите пароль"
-
-#: ../daemon/gvfsbackendsftp.c:881
-msgid "Can't send password"
-msgstr "Не удаётся отправить пароль"
-
-#: ../daemon/gvfsbackendsftp.c:889
-msgid "Log In Anyway"
-msgstr "Подключиться всё равно"
-
-#: ../daemon/gvfsbackendsftp.c:889
-msgid "Cancel Login"
-msgstr "Отменить подключение"
-
-#: ../daemon/gvfsbackendsftp.c:899
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Не удаётся проверить подлинность удалённого компьютера (%s).\n"
-"Это обычно происходит при первом подключении к компьютеру.\n"
-"\n"
-"Строка идентификации, переданная удалённым компьютером: %s. Если вы хотите быть абсолютно уверенным в безопасности подключения к этому компьютеру, обратитесь к системному администратору."
-
-#: ../daemon/gvfsbackendsftp.c:919
-msgid "Login dialog cancelled"
-msgstr "Диалог ввода пароля прерван"
-
-#: ../daemon/gvfsbackendsftp.c:939
-msgid "Can't send host identity confirmation"
-msgstr "Не удаётся отправить подтверждение идентификации узла"
-
-#: ../daemon/gvfsbackendsftp.c:1330 ../daemon/gvfsbackendsftp.c:1353
-msgid "Protocol error"
-msgstr "Ошибка протокола"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1377
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp на %s"
-
-#: ../daemon/gvfsbackendsftp.c:1401
-msgid "Unable to find supported ssh command"
-msgstr "Не удаётся найти поддерживаемую команду ssh"
-
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1763
-#, c-format
-msgid "/ on %s"
-msgstr "/ на %s"
-
-#: ../daemon/gvfsbackendsftp.c:1827
-msgid "File is directory"
-msgstr "Файл является каталогом"
-
-#: ../daemon/gvfsbackendsftp.c:1836
-msgid "Failure"
-msgstr "Ошибка"
-
-#: ../daemon/gvfsbackendsftp.c:1901 ../daemon/gvfsbackendsftp.c:1963
-#: ../daemon/gvfsbackendsftp.c:1974 ../daemon/gvfsbackendsftp.c:2032
-#: ../daemon/gvfsbackendsftp.c:2122 ../daemon/gvfsbackendsftp.c:2151
-#: ../daemon/gvfsbackendsftp.c:2199 ../daemon/gvfsbackendsftp.c:2278
-#: ../daemon/gvfsbackendsftp.c:2389 ../daemon/gvfsbackendsftp.c:2430
-#: ../daemon/gvfsbackendsftp.c:2482 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2573 ../daemon/gvfsbackendsftp.c:2727
-#: ../daemon/gvfsbackendsftp.c:2753 ../daemon/gvfsbackendsftp.c:2810
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:3149
-#: ../daemon/gvfsbackendsftp.c:3278 ../daemon/gvfsbackendsftp.c:3311
-#: ../daemon/gvfsbackendsftp.c:3412 ../daemon/gvfsbackendsftp.c:3453
-#: ../daemon/gvfsbackendsftp.c:3509 ../daemon/gvfsbackendsftp.c:3545
-#: ../daemon/gvfsbackendsftp.c:3579 ../daemon/gvfsbackendsftp.c:3594
-#: ../daemon/gvfsbackendsftp.c:3613
-msgid "Invalid reply received"
-msgstr "Получен неверный ответ"
-
-#: ../daemon/gvfsbackendsftp.c:2220
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Ошибка создания резервной копии файла: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2635
-msgid "Unable to create temporary file"
-msgstr "Не удаётся создать временный файл"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:214
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Требуется пароль для ресурса %s на %s"
-
-#: ../daemon/gvfsbackendsmb.c:465 ../daemon/gvfsbackendsmb.c:505
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Внутренняя ошибка (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:560
-msgid "Failed to mount Windows share"
-msgstr "Ошибка подключения ресурса Windows"
-
-#: ../daemon/gvfsbackendsmb.c:685 ../daemon/gvfsbackendsmb.c:1116
-msgid "Unsupported seek type"
-msgstr "Неподдерживаемый тип поиска"
-
-#: ../daemon/gvfsbackendsmb.c:1170
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Ошибка создания резервного файла: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1627
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Ошибка удаления файла: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1691
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Ошибка перемещения файла: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1715
-msgid "Can't move directory over directory"
-msgstr "Не удаётся переместить каталог поверх каталога"
-
-#: ../daemon/gvfsbackendsmb.c:1763
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Ошибка удаления файла назначения: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1787
-msgid "Can't recursively move directory"
-msgstr "Не удаётся переместить каталог рекурсивно"
-
-#: ../daemon/gvfsbackendsmb.c:1850
-msgid "Windows Shares Filesystem Service"
-msgstr "Служба файловой системы ресурсов Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:702
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Ресурсы Windows на %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:794 ../daemon/gvfsbackendsmbbrowse.c:840
-msgid "The file is not a mountable"
-msgstr "Этот файл не является монтируемым"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:862
-msgid "Not a regular file"
-msgstr "Не является обычным файлом"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1107
-msgid "Not a directory"
-msgstr "Не является каталогом"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1219
-msgid "Windows Network Filesystem Service"
-msgstr "Служба сетевой файловой системы Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:599 ../daemon/gvfsbackendtrash.c:1188
-msgid "Trash"
-msgstr "Корзина"
-
-#: ../daemon/gvfsbackendtrash.c:970
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (в корзине)"
-
-#: ../daemon/gvfsbackendtrash.c:1289
-msgid "Can't delete trash"
-msgstr "Не удаётся удалить корзину"
-
-#: ../daemon/gvfsbackendtrash.c:1636 ../daemon/gvfsbackendtrash.c:1711
-msgid "Trash directory notification not supported"
-msgstr "Уведомление не поддерживается для каталога корзины"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Неверный тип драйвера"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Ошибка передачи fd: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:119
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:169 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Действие не поддерживается драйвером"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Символические ссылки не поддерживаются драйвером"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Неверное сообщение dbus"
-
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr "Заменить старый демон."
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr "Не запускать fuse"
-
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "Демон GVFS"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr "Основной демон GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:74
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:76 ../programs/gvfs-cat.c:167 ../programs/gvfs-open.c:135
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Для получения дополнительной информации используйте команду \"%s --help\""
-
-#: ../daemon/mount.c:372
-msgid "Invalid arguments from spawned child"
-msgstr "Неверные аргументы от порождённого дочернего процесса"
-
-#: ../daemon/mount.c:662
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Сбой автомонтирования: %s"
-
-#: ../daemon/mount.c:707
-msgid "The specified location is not mounted"
-msgstr "Указанный адрес не смонтирован"
-
-#: ../daemon/mount.c:712
-msgid "The specified location is not supported"
-msgstr "Указанный адрес не поддерживается"
-
-#: ../daemon/mount.c:875
-msgid "Location is already mounted"
-msgstr "Адрес уже смонтирован"
-
-#: ../daemon/mount.c:883
-msgid "Location is not mountable"
-msgstr "Адрес не является монтируемым"
-
-#: ../hal/ghaldrive.c:142
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:150
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:163
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:166
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:168
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:174
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:184
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Устройство %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:190
-#, c-format
-msgid "%s Drive"
-msgstr "Устройство %s"
-
-#: ../hal/ghaldrive.c:194
-msgid "Floppy Drive"
-msgstr "Флоппи-дисковод"
-
-#: ../hal/ghaldrive.c:200
-msgid "Software RAID Drive"
-msgstr "Устройство программного RAID"
-
-#: ../hal/ghaldrive.c:202
-msgid "USB Drive"
-msgstr "Устройство USB"
-
-#: ../hal/ghaldrive.c:204
-msgid "ATA Drive"
-msgstr "Устройство ATA"
-
-#: ../hal/ghaldrive.c:206
-msgid "SCSI Drive"
-msgstr "Устройство SCSI"
-
-#: ../hal/ghaldrive.c:208
-msgid "FireWire Drive"
-msgstr "Устройство FireWire"
-
-#: ../hal/ghaldrive.c:212
-msgid "Tape Drive"
-msgstr "Ленточный накопитель"
-
-#: ../hal/ghaldrive.c:214
-msgid "CompactFlash Drive"
-msgstr "Устройство CompactFlash"
-
-#: ../hal/ghaldrive.c:216
-msgid "MemoryStick Drive"
-msgstr "Устройство MemoryStick"
-
-#: ../hal/ghaldrive.c:218
-msgid "SmartMedia Drive"
-msgstr "Устройство SmartMedia"
-
-#: ../hal/ghaldrive.c:220
-msgid "SD/MMC Drive"
-msgstr "Устройство SD/MMC"
-
-#: ../hal/ghaldrive.c:222
-msgid "Zip Drive"
-msgstr "Дисковод Zip"
-
-#: ../hal/ghaldrive.c:224
-msgid "Jaz Drive"
-msgstr "Дисковод Jaz"
-
-#: ../hal/ghaldrive.c:226
-msgid "Thumb Drive"
-msgstr "USB Flash брелок"
-
-#: ../hal/ghaldrive.c:229
-msgid "Mass Storage Drive"
-msgstr "Запоминающее устройство"
-
-#: ../hal/ghaldrive.c:653
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Не удаётся извлечь диск, потому что один или несколько томов этого диска "
-"заняты."
-
-#: ../hal/ghalmount.c:147 ../hal/ghalvolume.c:139
-msgid "CD-ROM Disc"
-msgstr "Диск CD-ROM"
-
-#: ../hal/ghalmount.c:147 ../hal/ghalvolume.c:139
-msgid "Blank CD-ROM Disc"
-msgstr "Чистый диск CD-ROM"
-
-#: ../hal/ghalmount.c:148 ../hal/ghalvolume.c:140
-msgid "CD-R Disc"
-msgstr "Диск CD-R"
-
-#: ../hal/ghalmount.c:148 ../hal/ghalvolume.c:140
-msgid "Blank CD-R Disc"
-msgstr "Чистый диск CD-R"
-
-#: ../hal/ghalmount.c:149 ../hal/ghalvolume.c:141
-msgid "CD-RW Disc"
-msgstr "Диск CD-RW"
-
-#: ../hal/ghalmount.c:149 ../hal/ghalvolume.c:141
-msgid "Blank CD-RW Disc"
-msgstr "Чистый диск CD-RW"
-
-#: ../hal/ghalmount.c:150 ../hal/ghalmount.c:152 ../hal/ghalvolume.c:142
-#: ../hal/ghalvolume.c:144
-msgid "DVD-ROM Disc"
-msgstr "Диск DVD-ROM"
-
-#: ../hal/ghalmount.c:150 ../hal/ghalmount.c:152 ../hal/ghalvolume.c:142
-#: ../hal/ghalvolume.c:144
-msgid "Blank DVD-ROM Disc"
-msgstr "Чистый диск DVD-ROM"
-
-#: ../hal/ghalmount.c:151 ../hal/ghalvolume.c:143
-msgid "DVD-RAM Disc"
-msgstr "Диск DVD-RAM"
-
-#: ../hal/ghalmount.c:151 ../hal/ghalvolume.c:143
-msgid "Blank DVD-RAM Disc"
-msgstr "Чистый диск DVD-RAM"
-
-#: ../hal/ghalmount.c:153 ../hal/ghalvolume.c:145
-msgid "DVD-RW Disc"
-msgstr "Диск DVD-RW"
-
-#: ../hal/ghalmount.c:153 ../hal/ghalvolume.c:145
-msgid "Blank DVD-RW Disc"
-msgstr "Чистый диск DVD-RW"
-
-#: ../hal/ghalmount.c:154 ../hal/ghalvolume.c:146
-msgid "DVD+R Disc"
-msgstr "Диск DVD+R"
-
-#: ../hal/ghalmount.c:154 ../hal/ghalvolume.c:146
-msgid "Blank DVD+R Disc"
-msgstr "Чистый диск DVD+R"
-
-#: ../hal/ghalmount.c:155 ../hal/ghalvolume.c:147
-msgid "DVD+RW Disc"
-msgstr "Диск DVD+RW"
-
-#: ../hal/ghalmount.c:155 ../hal/ghalvolume.c:147
-msgid "Blank DVD+RW Disc"
-msgstr "Чистый диск DVD+RW"
-
-#: ../hal/ghalmount.c:156 ../hal/ghalvolume.c:148
-msgid "DVD+R DL Disc"
-msgstr "Диск DVD+R DL"
-
-#: ../hal/ghalmount.c:156 ../hal/ghalvolume.c:148
-msgid "Blank DVD+R DL Disc"
-msgstr "Чистый диск DVD+R DL"
-
-#: ../hal/ghalmount.c:157 ../hal/ghalvolume.c:149
-msgid "Blu-Ray Disc"
-msgstr "Диск Blu-Ray"
-
-#: ../hal/ghalmount.c:157 ../hal/ghalvolume.c:149
-msgid "Blank Blu-Ray Disc"
-msgstr "Чистый диск Blu-Ray"
-
-#: ../hal/ghalmount.c:158 ../hal/ghalvolume.c:150
-msgid "Blu-Ray R Disc"
-msgstr "Диск Blu-Ray R"
-
-#: ../hal/ghalmount.c:158 ../hal/ghalvolume.c:150
-msgid "Blank Blu-Ray R Disc"
-msgstr "Чистый диск Blu-Ray R"
-
-#: ../hal/ghalmount.c:159 ../hal/ghalvolume.c:151
-msgid "Blu-Ray RW Disc"
-msgstr "Диск Blu-Ray RW"
-
-#: ../hal/ghalmount.c:159 ../hal/ghalvolume.c:151
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Чистый диск Blu-Ray RW"
-
-#: ../hal/ghalmount.c:160 ../hal/ghalvolume.c:152
-msgid "HD DVD Disc"
-msgstr "Диск HD DVD"
-
-#: ../hal/ghalmount.c:160 ../hal/ghalvolume.c:152
-msgid "Blank HD DVD Disc"
-msgstr "Чистый диск HD DVD"
-
-#: ../hal/ghalmount.c:161 ../hal/ghalvolume.c:153
-msgid "HD DVD-R Disc"
-msgstr "Диск HD DVD-R"
-
-#: ../hal/ghalmount.c:161 ../hal/ghalvolume.c:153
-msgid "Blank HD DVD-R Disc"
-msgstr "Чистый диск HD DVD-R"
-
-#: ../hal/ghalmount.c:162 ../hal/ghalvolume.c:154
-msgid "HD DVD-RW Disc"
-msgstr "Диск HD DVD-RW"
-
-#: ../hal/ghalmount.c:162 ../hal/ghalvolume.c:154
-msgid "Blank HD DVD-RW Disc"
-msgstr "Чистый диск HD DVD-RW"
-
-#: ../hal/ghalmount.c:163 ../hal/ghalvolume.c:155
-msgid "MO Disc"
-msgstr "МО диск"
-
-#: ../hal/ghalmount.c:163 ../hal/ghalvolume.c:155
-msgid "Blank MO Disc"
-msgstr "Чистый МО диск"
-
-#: ../hal/ghalmount.c:164 ../hal/ghalvolume.c:156
-msgid "Disc"
-msgstr "Диск"
-
-#: ../hal/ghalmount.c:164 ../hal/ghalvolume.c:156
-msgid "Blank Disc"
-msgstr "Чистый диск"
-
-#: ../hal/ghalmount.c:349
-#, c-format
-msgid "%.1f kB Media"
-msgstr "Диск %.1f КБ"
-
-#: ../hal/ghalmount.c:354
-#, c-format
-msgid "%.1f MB Media"
-msgstr "Диск %.1f МБ"
-
-#: ../hal/ghalmount.c:359
-#, c-format
-msgid "%.1f GB Media"
-msgstr "Диск %.1f ГБ"
-
-#: ../hal/ghalmount.c:486 ../hal/ghalvolume.c:305
-msgid "Mixed Audio/Data Disc"
-msgstr "Смешанный диск звук/данные"
-
-#: ../hal/ghalvolume.c:190
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f КБ"
-
-#: ../hal/ghalvolume.c:195
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f МБ"
-
-#: ../hal/ghalvolume.c:200
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f ГБ"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:293
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "Зашифрованные данные %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:316
-#, c-format
-msgid "%s Media"
-msgstr "Диск %s"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: ошибка открытия файла: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, ошибка записи на стандартный вывод"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s, ошибка чтения: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:ошибка закрытия: %s\n"
-
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "АДРЕС... - каскадировать АДРЕСА на стандартный вывод."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Объединить все файлы в каталоге и вывести их на стандартный вывод. Работает "
-"как стандартная утилита cat, но вместо адреса локального файла использует "
-"адрес gvfs. Например, вы можете использовать адрес вида smb://server/"
-"resource/file.txt"
-
-#: ../programs/gvfs-cat.c:150
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr "Примечание: если вам необходимы параметры форматирования, такие как -n, -T или другие, достаточно просто пропустить вывод через команду cat."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:165 ../programs/gvfs-open.c:133
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: не указаны адреса"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: ошибка открытия адреса: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: ошибка запуска приложения: %s\n"
-
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr "ФАЙЛЫ... - открывает ФАЙЛЫ в зарегистрированном приложении."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Открывает файл(ы) в приложении по умолчанию, зарегистрированном для "
-"обработки файлов этого типа."
-
diff --git a/po/sk.po b/po/sk.po
deleted file mode 100644
index fa33baf7..00000000
--- a/po/sk.po
+++ /dev/null
@@ -1,2235 +0,0 @@
-# translation of gvfs.HEAD.po to Slovak
-# gvfs sk.po
-# Copyright (C) 2000-2001,2003, 2004, 2008 Free Software Foundation, Inc.
-# Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>, 2000-2001,2003, 2004.
-# Ivan Noris, <vix@vazka.sk>, 2004
-# Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>, 2004.
-# Ivan Noris, <vix@vazka.sk>, 2005
-# Marcel Telka, <marcel@telka.sk>, 2008
-# Pavol Šimo, <palo.simo@gmail.com>, 2008
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-09 19:06+0100\n"
-"PO-Revision-Date: 2008-03-09 12:22+0100\n"
-"Last-Translator: Pavol Šimo <palo.simo@gmail.com>\n"
-"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural= (n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
-
-#: ../client/gdaemonfile.c:464 ../client/gdaemonfile.c:1867
-msgid "Operation not supported, files on different mounts"
-msgstr "Operácia nie je podporovaná, súbory sú na rôznych bodoch pripojenia"
-
-#: ../client/gdaemonfile.c:758
-msgid "Invalid return value from get_info"
-msgstr "Neplatná návratová hodnota z get_info"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from query_info"
-msgstr "Neplatná návratová hodnota z query_info"
-
-#: ../client/gdaemonfile.c:865
-msgid "Couldn't get stream file descriptor"
-msgstr "Nedá sa získať popisovač súboru prúdu"
-
-#: ../client/gdaemonfile.c:897 ../client/gdaemonfile.c:967
-#: ../client/gdaemonfile.c:1026 ../client/gdaemonfile.c:1085
-#: ../client/gdaemonfile.c:1147
-msgid "Invalid return value from open"
-msgstr "Neplatná návratová hodnota z open"
-
-#: ../client/gdaemonfile.c:977 ../client/gdaemonfile.c:1036
-#: ../client/gdaemonfile.c:1095 ../client/gdaemonfile.c:1157
-msgid "Didn't get stream file descriptor"
-msgstr "Popisovač súboru prúdu neziskaný"
-
-#: ../client/gdaemonfile.c:1209 ../client/gdaemonfile.c:1226
-msgid "Invalid return value from call"
-msgstr "Neplatná návratová hodnota z call"
-
-#: ../client/gdaemonfile.c:1505
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Neplatná návratová hodnota z get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1549
-msgid "Could not find enclosing mount"
-msgstr "Nepodarilo sa nájsť súvisiaci objekt pripojenia"
-
-#: ../client/gdaemonfile.c:1579
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Neplatný názov súboru %s"
-
-#: ../client/gdaemonfile.c:1621
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Neplatná návratová hodnota z query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2012
-msgid "Invalid return value from monitor_dir"
-msgstr "Neplatná návratová hodnota z monotor_dir"
-
-#: ../client/gdaemonfile.c:2061
-msgid "Invalid return value from monitor_file"
-msgstr "Neplatná návratová hodnota z monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Chyba v protokole prúdu: %s"
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr "Koniec prúdu"
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendobexftp.c:774
-#: ../daemon/gvfsbackendobexftp.c:795 ../daemon/gvfsbackendobexftp.c:914
-#: ../daemon/gvfsbackendobexftp.c:1051 ../daemon/gvfsbackendobexftp.c:1115
-#: ../daemon/gvfsbackendobexftp.c:1252 ../daemon/gvfsbackendobexftp.c:1279
-#: ../daemon/gvfsbackendobexftp.c:1338 ../daemon/gvfsbackendobexftp.c:1360
-#: ../daemon/gvfsbackendobexftp.c:1420 ../daemon/gvfsbackendobexftp.c:1439
-#: ../daemon/gvfsbackendsmb.c:1015 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:297
-msgid "Operation was cancelled"
-msgstr "Operácia bola zrušená"
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr "Vyhľadanie v prúde nepodporované"
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr "Operácia získania informácií nie je podporovaná"
-
-#: ../client/gdaemonvfs.c:731
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Chyba pri získavaní informácií o pripojení: %s"
-
-#: ../client/gvfsdaemondbus.c:559 ../client/gvfsdaemondbus.c:946
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Chyba pripojenia k démonu: %s"
-
-#: ../common/gsysutils.c:133
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Chyba vytvorenia soketu: %s"
-
-#: ../common/gsysutils.c:171
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Chyba pripojenia k soketu: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Neplatný formát súborových informácií"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Neplatný obsah zoznamu informácií atribútov"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Chyba pripojenia k D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Služba systému súborov %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Chyba: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Použitie: %s --spawner dbus-id cesta_objektu"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Použitie: %s kľúč=hodnota kľúč=hodnota ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Neurčený typ pripojenia"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "bod pripojenia pre %s už je používaný"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "chyba spustenia démona pripojenia"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr "Napaľovanie"
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr "Nie je možné vytvoriť dočasný priečinok"
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr "Súbor alebo priečinok neexistuje"
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1804
-msgid "Directory not empty"
-msgstr "Priečinok nie je prázdny"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr "Nedá sa skopírovať súbor cez priečinok"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "Vytváranie CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:681 ../daemon/gvfsbackendcomputer.c:652
-#: ../daemon/gvfsbackenddnssd.c:393 ../daemon/gvfsbackendftp.c:846
-#: ../daemon/gvfsbackendnetwork.c:637
-#, c-format
-msgid "The file is not a directory"
-msgstr "Súbor nie je priečinkom"
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "Súbor existuje"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr "Súbor alebo priečinok v cieľovej ceste neexistuje"
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr "Nedá sa skopírovať priečinok cez priečinok"
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr "Cieľový súbor existuje"
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr "Nedá sa rekurzívne skopírovať priečinok"
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr "Nepodporované"
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr "Mechanika neurčená"
-
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Mechaniku %s sa nepodarilo nájsť"
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Mechanika %s neobsahuje zvukové súbory"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr "pripojenie cdda na %s"
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:492 ../hal/ghalvolume.c:298 ../hal/ghalvolume.c:319
-#, c-format
-msgid "Audio Disc"
-msgstr "Zvukový disk"
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Súborový systém je zaneprázdnený: %d otvorených súborov"
-msgstr[1] "Súborový systém je zaneprázdnený: %d otvorený súbor"
-msgstr[2] "Súborový systém je zaneprázdnený: %d otvorené súbory"
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Súbor %s na zariadení %s neexistuje"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Chyba knižnice 'paranoia' na zariadení %s"
-
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Chyba vyhľadania v prúde na zariadení %s"
-
-#: ../daemon/gvfsbackendcdda.c:818 ../daemon/gvfsbackendgphoto2.c:1695
-#, c-format
-msgid "No such file"
-msgstr "Súbor neexistuje"
-
-#: ../daemon/gvfsbackendcdda.c:825 ../daemon/gvfsbackendcomputer.c:573
-#: ../daemon/gvfsbackenddnssd.c:345 ../daemon/gvfsbackendftp.c:1955
-#: ../daemon/gvfsbackendnetwork.c:590 ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:866 ../daemon/gvfsbackendsmbbrowse.c:1037
-#: ../daemon/gvfsbackendsmbbrowse.c:1111
-#, c-format
-msgid "File doesn't exist"
-msgstr "Súbor neexistuje"
-
-#: ../daemon/gvfsbackendcdda.c:832
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Súbor neexistuje alebo nie je zvukovou stopou"
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr "Služba systému súborov Zvukové CD"
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr "Počítač"
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr "Systém súborov"
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendgphoto2.c:1687
-#: ../daemon/gvfsbackendobexftp.c:760 ../daemon/gvfsbackendtrash.c:637
-msgid "Can't open directory"
-msgstr "Priečinok sa nedá otvoriť"
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr "Pripojiteľný súbor sa nedá otvoriť"
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr "Interná chyba: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:930
-msgid "Can't mount file"
-msgstr "Súbor sa nedá pripojiť"
-
-#: ../daemon/gvfsbackendcomputer.c:825
-msgid "No media in the drive"
-msgstr "Žiaden disk v mechanike"
-
-#: ../daemon/gvfsbackendcomputer.c:882 ../daemon/gvfsbackendcomputer.c:973
-#: ../daemon/gvfsbackendcomputer.c:1073
-msgid "Not a mountable file"
-msgstr "Nie je pripojiteľný súbor"
-
-#: ../daemon/gvfsbackendcomputer.c:988
-msgid "Can't unmount file"
-msgstr "Súbor sa nedá odpojiť"
-
-#: ../daemon/gvfsbackendcomputer.c:1104
-msgid "Can't eject file"
-msgstr "Súbor sa nedá vysunúť"
-
-#: ../daemon/gvfsbackenddav.c:269 ../daemon/gvfsbackenddav.c:1289
-#: ../daemon/gvfsbackendhttp.c:220
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Chyba HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:285
-msgid "Could not parse response"
-msgstr "Nepodarilo sa spracovať odpoveď"
-
-#: ../daemon/gvfsbackenddav.c:294
-msgid "Empty response"
-msgstr "Prázdna odpoveď"
-
-#: ../daemon/gvfsbackenddav.c:301
-msgid "Unexpected reply from server"
-msgstr "Neočakávaná odpoveď zo servra"
-
-#: ../daemon/gvfsbackenddav.c:944 ../daemon/gvfsbackenddav.c:1421
-#, c-format
-msgid "Response invalid"
-msgstr "Neplatná odpoveď"
-
-#: ../daemon/gvfsbackenddav.c:1087
-msgid "WebDAV share"
-msgstr "Zdieľanie WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1089
-#, c-format
-msgid "Enter password for %s"
-msgstr "Zadajte heslo pre %s"
-
-#: ../daemon/gvfsbackenddav.c:1092
-msgid "Please enter proxy password"
-msgstr "Prosím zadajte heslo pre proxy"
-
-#: ../daemon/gvfsbackenddav.c:1206 ../daemon/gvfsbackendhttp.c:273
-#: ../daemon/gvfsbackendobexftp.c:605 ../daemon/gvfsbackendobexftp.c:616
-#: ../daemon/gvfsbackendsmb.c:595
-msgid "Invalid mount spec"
-msgstr "Neplatné parametre pripojenia"
-
-#: ../daemon/gvfsbackenddav.c:1293 ../daemon/gvfsbackenddav.c:1297
-msgid "Not a WebDAV enabled share"
-msgstr "Nie je zdieľanie WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1319
-#, c-format
-msgid "WebDAV on %s"
-msgstr "Zdieľanie WebDAV na %s"
-
-#: ../daemon/gvfsbackenddav.c:1377 ../daemon/gvfsbackenddav.c:1448
-msgid "Could not create request"
-msgstr "Nepodarilo sa vytvoriť požiadavku"
-
-#: ../daemon/gvfsbackenddav.c:1511 ../daemon/gvfsbackenddav.c:1764
-#: ../daemon/gvfsbackendftp.c:1558 ../daemon/gvfsbackendftp.c:2189
-#: ../daemon/gvfsbackendsmb.c:1701
-#, c-format
-msgid "Target file already exists"
-msgstr "Cieľový súbor už existuje"
-
-#: ../daemon/gvfsbackenddav.c:1584 ../daemon/gvfsbackendsftp.c:2662
-#: ../daemon/gvfsbackendsmb.c:983
-msgid "The file was externally modified"
-msgstr "Súbor bol zmenený zvonka"
-
-#: ../daemon/gvfsbackenddav.c:1615 ../daemon/gvfsbackendsmb.c:1021
-#: ../daemon/gvfsbackendsmb.c:1718
-msgid "Backup file creation failed"
-msgstr "Vytvorenie záložného súboru zlyhalo"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Súbor alebo adresár sa nedá sledovať"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Sieť"
-
-#: ../daemon/gvfsbackendftp.c:224
-msgid "Accounts are unsupported"
-msgstr "Účty nie sú podporované"
-
-#: ../daemon/gvfsbackendftp.c:228
-msgid "Host closed connection"
-msgstr "Hostiteľ uzavrel spojenie"
-
-#: ../daemon/gvfsbackendftp.c:232
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Nepodarilo sa otvoriť dátové spojenie. Nezabraňuje tomu firewall?"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Data connection closed"
-msgstr "Dátové spojenie uzavreté"
-
-#: ../daemon/gvfsbackendftp.c:242
-msgid "File unavailable"
-msgstr "Súbor nie je k dispozícii"
-
-#: ../daemon/gvfsbackendftp.c:246
-msgid "Operation failed"
-msgstr "Operácia zlyhala"
-
-#: ../daemon/gvfsbackendftp.c:251
-msgid "No space left on server"
-msgstr "Na servri už nie je miesto"
-
-#: ../daemon/gvfsbackendftp.c:259 ../daemon/gvfsbackendsftp.c:3684
-msgid "Operation unsupported"
-msgstr "Operácia nepodporovaná"
-
-#: ../daemon/gvfsbackendftp.c:263 ../daemon/gvfsbackendsftp.c:259
-msgid "Permission denied"
-msgstr "Prístup odmietnutý"
-
-#: ../daemon/gvfsbackendftp.c:267
-msgid "Page type unknown"
-msgstr "Neznámy typ stránky"
-
-#: ../daemon/gvfsbackendftp.c:271 ../daemon/gvfsbackendftp.c:2059
-#, c-format
-msgid "Invalid filename"
-msgstr "Neplatný názov súboru"
-
-#: ../daemon/gvfsbackendftp.c:275 ../daemon/gvfsbackendftp.c:349
-#: ../daemon/gvfsbackendftp.c:378 ../daemon/gvfsbackendftp.c:397
-#: ../daemon/gvfsbackendftp.c:410 ../daemon/gvfsbackendftp.c:751
-#, c-format
-msgid "Invalid reply"
-msgstr "Neplatná odpoveď"
-
-#: ../daemon/gvfsbackendftp.c:517
-#, c-format
-msgid "broken transmission"
-msgstr "prenos prerušovaný"
-
-#: ../daemon/gvfsbackendftp.c:611 ../daemon/gvfsbackendftp.c:771
-#, c-format
-msgid "Could not connect to host"
-msgstr "Pripojenie k hostiteľovi sa nepodarilo"
-
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendftp.c:897 ../daemon/gvfsbackendsftp.c:1736
-#, c-format
-msgid "/ on %s"
-msgstr "/ na %s"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1259
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Zadajte heslo pre ftp na %s"
-
-#: ../daemon/gvfsbackendftp.c:1279 ../daemon/gvfsbackendsftp.c:833
-msgid "Password dialog cancelled"
-msgstr "Dialógové okno zadania hesla bolo zrušené"
-
-#: ../daemon/gvfsbackendftp.c:1345
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp na %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1351
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp ako %s na %s"
-
-#: ../daemon/gvfsbackendftp.c:1385 ../daemon/gvfsbackendsftp.c:1410
-msgid "No hostname specified"
-msgstr "Neurčený názov hostiteľa"
-
-#: ../daemon/gvfsbackendftp.c:1608 ../daemon/gvfsbackendftp.c:2150
-msgid "backups not supported yet"
-msgstr "zálohy momentálne nie sú podporované"
-
-#: ../daemon/gvfsbackendftp.c:1684
-#, c-format
-msgid "filename too long"
-msgstr "príliš dlhý názov súboru"
-
-#: ../daemon/gvfsbackendftp.c:2169
-#, c-format
-msgid "Invalid destination filename"
-msgstr "Neplatný názov súboru cieľa"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:697
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digitálny fotoaparát (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:843 ../hal/ghalvolume.c:398
-#, c-format
-msgid "%s Camera"
-msgstr "Digitálny fotoaparát %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:846 ../hal/ghalvolume.c:393
-#, c-format
-msgid "%s Audio Player"
-msgstr "Prehrávač hudby %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../hal/ghalvolume.c:407
-msgid "Camera"
-msgstr "Digitálny fotoaparát"
-
-#: ../daemon/gvfsbackendgphoto2.c:857 ../hal/ghalvolume.c:405
-msgid "Audio Player"
-msgstr "Prehrávač hudby"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1539
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "pripojenie gphoto2 na %s"
-
-#: ../daemon/gvfsbackendhttp.c:216
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Chyba klienta HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:534 ../daemon/gvfsbackendsftp.c:1724
-#: ../daemon/gvfsbackendsmb.c:1230 ../daemon/gvfsbackendtrash.c:962
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (neplatný Unicode kód)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Upozorňovanie nie je podporované pre priečinky"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:694
-msgid "Windows Network"
-msgstr "Sieť Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Lokálna sieť"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Sledovanie sieťových umiestnení"
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:444 ../daemon/gvfsbackendsmb.c:514
-#: ../daemon/gvfsbackendsmb.c:1223
-#, c-format
-msgid "%s on %s"
-msgstr "%s na %s"
-
-#: ../daemon/gvfsbackendsftp.c:251
-msgid "ssh program unexpectedly exited"
-msgstr "Program ssh neočakávane skončil"
-
-#: ../daemon/gvfsbackendsftp.c:266
-msgid "Hostname not known"
-msgstr "Neznámy názov hostiteľa"
-
-#: ../daemon/gvfsbackendsftp.c:273
-msgid "No route to host"
-msgstr "Cesta k počítaču neexistuje"
-
-#: ../daemon/gvfsbackendsftp.c:280
-msgid "Connection refused by server"
-msgstr "Pripojenie odmietnuté serverom"
-
-#: ../daemon/gvfsbackendsftp.c:287
-msgid "Host key verification failed"
-msgstr "Overenie kľúča hostiteľa zlyhalo"
-
-#: ../daemon/gvfsbackendsftp.c:370
-msgid "Unable to spawn ssh program"
-msgstr "Nepodarilo sa spustiť program ssh"
-
-#: ../daemon/gvfsbackendsftp.c:386
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Nepodarilo sa spustiť program ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:489 ../daemon/gvfsbackendsftp.c:741
-msgid "Timed out when logging in"
-msgstr "Časový limit prihlásenia vypršal"
-
-#: ../daemon/gvfsbackendsftp.c:817
-msgid "Enter passphrase for key"
-msgstr "Zadajte heslovú frázu pre kľúč"
-
-#: ../daemon/gvfsbackendsftp.c:819
-msgid "Enter password"
-msgstr "Zadajte heslo"
-
-#: ../daemon/gvfsbackendsftp.c:880
-msgid "Can't send password"
-msgstr "Nepodarilo sa odoslať heslo"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Log In Anyway"
-msgstr "Aj tak sa prihlásiť"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Cancel Login"
-msgstr "Zrušiť prihlásenie"
-
-#: ../daemon/gvfsbackendsftp.c:898
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Totožnosť vzdialeného počítača (%s) nie je známa.\n"
-"To sa stane pri prvom prihlásení k počítaču.\n"
-"\n"
-"Totožnosť odoslaná vzdialeným počítačom je %s. Ak chcete mať absolútnu "
-"istotu, že je bezpečné pokračovať, kontaktujte svojho správcu systému."
-
-#: ../daemon/gvfsbackendsftp.c:918
-msgid "Login dialog cancelled"
-msgstr "Dialógové okno prihlásenia bolo zrušené"
-
-#: ../daemon/gvfsbackendsftp.c:938
-msgid "Can't send host identity confirmation"
-msgstr "Nepodarilo sa odoslať potvrdenie identity hostiteľa"
-
-#: ../daemon/gvfsbackendsftp.c:1329 ../daemon/gvfsbackendsftp.c:1352
-msgid "Protocol error"
-msgstr "Chyba protokolu"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1376
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp na %s"
-
-#: ../daemon/gvfsbackendsftp.c:1400
-msgid "Unable to find supported ssh command"
-msgstr "Nepodarilo sa nájsť podporovaný príkaz ssh"
-
-#: ../daemon/gvfsbackendsftp.c:1800
-msgid "File is directory"
-msgstr "Súbor je priečinkom"
-
-#: ../daemon/gvfsbackendsftp.c:1809
-msgid "Failure"
-msgstr "Zlyhanie"
-
-#: ../daemon/gvfsbackendsftp.c:1874 ../daemon/gvfsbackendsftp.c:1936
-#: ../daemon/gvfsbackendsftp.c:1947 ../daemon/gvfsbackendsftp.c:2005
-#: ../daemon/gvfsbackendsftp.c:2095 ../daemon/gvfsbackendsftp.c:2124
-#: ../daemon/gvfsbackendsftp.c:2172 ../daemon/gvfsbackendsftp.c:2251
-#: ../daemon/gvfsbackendsftp.c:2362 ../daemon/gvfsbackendsftp.c:2403
-#: ../daemon/gvfsbackendsftp.c:2455 ../daemon/gvfsbackendsftp.c:2526
-#: ../daemon/gvfsbackendsftp.c:2546 ../daemon/gvfsbackendsftp.c:2700
-#: ../daemon/gvfsbackendsftp.c:2726 ../daemon/gvfsbackendsftp.c:2783
-#: ../daemon/gvfsbackendsftp.c:2842 ../daemon/gvfsbackendsftp.c:3122
-#: ../daemon/gvfsbackendsftp.c:3251 ../daemon/gvfsbackendsftp.c:3284
-#: ../daemon/gvfsbackendsftp.c:3385 ../daemon/gvfsbackendsftp.c:3426
-#: ../daemon/gvfsbackendsftp.c:3482 ../daemon/gvfsbackendsftp.c:3518
-#: ../daemon/gvfsbackendsftp.c:3552 ../daemon/gvfsbackendsftp.c:3567
-#: ../daemon/gvfsbackendsftp.c:3586 ../daemon/gvfsbackendsftp.c:3664
-msgid "Invalid reply received"
-msgstr "Prijatá neplatná odpoveď"
-
-#: ../daemon/gvfsbackendsftp.c:2193
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Chyba pri vytváraní záložného súboru: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2608
-msgid "Unable to create temporary file"
-msgstr "Nepodarilo sa vytvoriť dočasný súbor"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:214
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Pre sieťový disk %s na %s je vyžadované heslo"
-
-#: ../daemon/gvfsbackendsmb.c:466 ../daemon/gvfsbackendsmb.c:506
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Interná chyba (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:561
-msgid "Failed to mount Windows share"
-msgstr "Nepodarilo sa pripojiť sieťový disk Windows"
-
-#: ../daemon/gvfsbackendsmb.c:686 ../daemon/gvfsbackendsmb.c:1117
-msgid "Unsupported seek type"
-msgstr "Nepodporovaný typ vyhľadania"
-
-#: ../daemon/gvfsbackendsmb.c:1171
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Vytvorenie záložného súboru zlyhalo: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1602
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Chyba pri odstraňovaní súboru: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1666
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Chyba pri presúvaní súboru: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1690
-msgid "Can't move directory over directory"
-msgstr "Nedá sa presunúť priečinok cez priečinok"
-
-#: ../daemon/gvfsbackendsmb.c:1738
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Chyba pri odstraňovaní cieľového súboru: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1762
-msgid "Can't recursively move directory"
-msgstr "Nedá sa rekurzívne premiestniť priečinok"
-
-#: ../daemon/gvfsbackendsmb.c:1825
-msgid "Windows Shares Filesystem Service"
-msgstr "Služba systému súborov Sieťové disky Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:702
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Sieťové disky Windows na %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:794 ../daemon/gvfsbackendsmbbrowse.c:840
-msgid "The file is not a mountable"
-msgstr "Súbor nie je pripojiteľný"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:862
-msgid "Not a regular file"
-msgstr "Nie je obyčajným súborom"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1107
-msgid "Not a directory"
-msgstr "Nie je priečinkom"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1219
-msgid "Windows Network Filesystem Service"
-msgstr "Služba súborového systému Sieť Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:600 ../daemon/gvfsbackendtrash.c:1190
-msgid "Trash"
-msgstr "Kôš"
-
-#: ../daemon/gvfsbackendtrash.c:972
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (v koši)"
-
-#: ../daemon/gvfsbackendtrash.c:1291
-msgid "Can't delete trash"
-msgstr "Kôš sa nedá odstrániť"
-
-#: ../daemon/gvfsbackendtrash.c:1638 ../daemon/gvfsbackendtrash.c:1713
-msgid "Trash directory notification not supported"
-msgstr "Oznamovanie zmien priečinka Kôš nie je podporované"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Neplatný typ backendu"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Chyba pri odoslaní fd: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:119
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:169 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Operácia nie je backendom podporovaná"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Mäkké odkazy nie sú backendom podporované"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Neplatná správa D-Bus"
-
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr "Nahradiť starý démon"
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr "Neštartovať FUSE"
-
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "GVFS Démon"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr "Hlavný démon pre GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:74
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:76 ../programs/gvfs-cat.c:165 ../programs/gvfs-cat.c:178
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:388 ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:133 ../programs/gvfs-open.c:146
-#: ../programs/gvfs-save.c:165 ../programs/gvfs-tree.c:253
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Pre viac informácií skúste \"%s --help\""
-
-#: ../daemon/mount.c:432
-msgid "Invalid arguments from spawned child"
-msgstr "Neplatné parametre od vyvolaného potomka"
-
-#: ../daemon/mount.c:731
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automount zlyhal: %s"
-
-#: ../daemon/mount.c:776
-msgid "The specified location is not mounted"
-msgstr "Uvedené umiestnenie nie je pripojené"
-
-#: ../daemon/mount.c:781
-msgid "The specified location is not supported"
-msgstr "Uvedené umiestnenie nie je podporované"
-
-#: ../daemon/mount.c:944
-msgid "Location is already mounted"
-msgstr "Umiestnenie už je pripojené"
-
-#: ../daemon/mount.c:952
-msgid "Location is not mountable"
-msgstr "Umiestnenie nie je pripojiteľné"
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:148
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:162
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:165
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:168
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-r"
-msgstr "HDDVD-R"
-
-#: ../hal/ghaldrive.c:174
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../hal/ghaldrive.c:180
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:186
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Mechanika %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:192
-#, c-format
-msgid "%s Drive"
-msgstr "Mechanika %s"
-
-#: ../hal/ghaldrive.c:196
-msgid "Floppy Drive"
-msgstr "Disketová mechanika"
-
-#: ../hal/ghaldrive.c:202
-msgid "Software RAID Drive"
-msgstr "Softvérový RAID disk"
-
-#: ../hal/ghaldrive.c:204
-msgid "USB Drive"
-msgstr "USB mechanika"
-
-#: ../hal/ghaldrive.c:206
-msgid "ATA Drive"
-msgstr "ATA mechanika"
-
-#: ../hal/ghaldrive.c:208
-msgid "SCSI Drive"
-msgstr "SCSI mechanika"
-
-#: ../hal/ghaldrive.c:210
-msgid "FireWire Drive"
-msgstr "FireWire mechanika"
-
-#: ../hal/ghaldrive.c:214
-msgid "Tape Drive"
-msgstr "Pásková mechanika"
-
-#: ../hal/ghaldrive.c:216
-msgid "CompactFlash Drive"
-msgstr "Mechanika CompactFlash"
-
-#: ../hal/ghaldrive.c:218
-msgid "MemoryStick Drive"
-msgstr "Mechanika MemoryStick"
-
-#: ../hal/ghaldrive.c:220
-msgid "SmartMedia Drive"
-msgstr "Mechanika SmartMedia"
-
-#: ../hal/ghaldrive.c:222
-msgid "SD/MMC Drive"
-msgstr "Mechanika SD/MMC"
-
-#: ../hal/ghaldrive.c:224
-msgid "Zip Drive"
-msgstr "Mechanika Zip"
-
-#: ../hal/ghaldrive.c:226
-msgid "Jaz Drive"
-msgstr "Mechanika Jaz"
-
-#: ../hal/ghaldrive.c:228
-msgid "Thumb Drive"
-msgstr "Palcová mechanika"
-
-#: ../hal/ghaldrive.c:231
-msgid "Mass Storage Drive"
-msgstr "Mechanika hromadného ukladania údajov"
-
-#: ../hal/ghaldrive.c:730
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Vysunutie média zlyhalo; jeden alebo viac zväzkov média je zaneprázdnených"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "CD-ROM Disc"
-msgstr "Disk CD-ROM"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "Blank CD-ROM Disc"
-msgstr "Čistý disk CD-ROM"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "CD-R Disc"
-msgstr "Disk CD-R"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "Blank CD-R Disc"
-msgstr "Čistý disk CD-R"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "CD-RW Disc"
-msgstr "Disk CD-RW"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "Blank CD-RW Disc"
-msgstr "Čistý disk CD-RW"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "DVD-ROM Disc"
-msgstr "Disk DVD-ROM"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "Blank DVD-ROM Disc"
-msgstr "Čistý disk DVD-ROM"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "DVD-RAM Disc"
-msgstr "Disk DVD-RAM"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "Blank DVD-RAM Disc"
-msgstr "Čistý disk DVD-RAM"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "DVD-RW Disc"
-msgstr "Disk DVD-RW"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "Blank DVD-RW Disc"
-msgstr "Čistý disk DVD-RW"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "DVD+R Disc"
-msgstr "Disk DVD+R"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "Blank DVD+R Disc"
-msgstr "Čistý disk DVD+R"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "DVD+RW Disc"
-msgstr "Disk DVD+RW"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "Blank DVD+RW Disc"
-msgstr "Čistý disk DVD+RW"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "DVD+R DL Disc"
-msgstr "Disk DVD+R DL"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "Blank DVD+R DL Disc"
-msgstr "Čistý disk DVD+R DL"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blu-Ray Disc"
-msgstr "Disk Blu-Ray"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blank Blu-Ray Disc"
-msgstr "Čistý disk Blu-Ray"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blu-Ray R Disc"
-msgstr "Disk Blu-Ray R"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blank Blu-Ray R Disc"
-msgstr "Čistý disk Blu-Ray R"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blu-Ray RW Disc"
-msgstr "Disk Blu-Ray RW"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Čistý disk Blu-Ray RW"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "HD DVD Disc"
-msgstr "Disk HD DVD"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "Blank HD DVD Disc"
-msgstr "Čistý disk HD DVD"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "HD DVD-R Disc"
-msgstr "Disk HD DVD-R"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "Blank HD DVD-R Disc"
-msgstr "Čistý disk HD DVD-R"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "HD DVD-RW Disc"
-msgstr "Disk HD DVD-RW"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "Blank HD DVD-RW Disc"
-msgstr "Čistý disk HD DVD-RW"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "MO Disc"
-msgstr "Disk MO"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "Blank MO Disc"
-msgstr "Čistý disk MO"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Disc"
-msgstr "Disk"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Blank Disc"
-msgstr "Čistý disk"
-
-#: ../hal/ghalmount.c:368
-#, c-format
-msgid "%.1f kB Media"
-msgstr "%.1f KB médium"
-
-#: ../hal/ghalmount.c:373
-#, c-format
-msgid "%.1f MB Media"
-msgstr "%.1f MB médium"
-
-#: ../hal/ghalmount.c:378
-#, c-format
-msgid "%.1f GB Media"
-msgstr "%.1f GB médium"
-
-#: ../hal/ghalmount.c:490 ../hal/ghalvolume.c:317
-msgid "Mixed Audio/Data Disc"
-msgstr "Zmiešaný zvukový/dátový disk"
-
-#: ../hal/ghalvolume.c:206
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f KB"
-
-#: ../hal/ghalvolume.c:211
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../hal/ghalvolume.c:216
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:305
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s šifrovaných údajov"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:328
-#, c-format
-msgid "%s Media"
-msgstr "%s médium"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s - %s: chyba pri otváraní súboru: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s - %s, chyba zápisu do štandardného výstupu"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s - %s: chyba pri čítaní: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s - %s: chyba pri zatváraní: %s\n"
-
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "UMIESTNENIE... - spojiť UMIESTNENIA do štandardného výstupu"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Spojí súbory na zadaných umiestneniach a vypíše ich na štandardný výstup. "
-"Presne ako tradičný nástroj cat, ale používa gvfs umiestnenia namisto "
-"lokálnych súborov: napríklad ako umiestnenie môžete použiť niečo ako smb://"
-"server/zdroj/súbor.txt."
-
-#: ../programs/gvfs-cat.c:150
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Poznámka: jednoducho prežente cez cat, ak potrebujete jeho formátovacie "
-"voľby ako -n, -T alebo iné."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:176 ../programs/gvfs-open.c:144
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: nezadané umiestnenie"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s - %s: chyba pri otváraní umiestnenia: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s - %s: chyba pri spúšťaní aplikácie: %s\n"
-
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr "SÚBORY... - otvoriť SÚBORY zaregistrovanou aplikáciou"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Otvorí súbor (súbory) predvolenou aplikáciou zaregistrovanou na obsluhu "
-"zvoleného typu súboru."
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "Zvukový disk"
-
-#~ msgid "The file does not exist"
-#~ msgstr "Taký súbor neexistuje"
-
-#~ msgid "ISO 9660 Volume"
-#~ msgstr "Zväzok ISO 9660"
-
-#~ msgid "%s:%u contains NUL characters."
-#~ msgstr "%s:%u obsahuje znaky NUL."
-
-#~ msgid "%s:%u contains no method name."
-#~ msgstr "%s:%u neobsahuje názov metódy."
-
-#~ msgid "%s:%u has no options endmarker."
-#~ msgstr "%s:%u neobsahuje koncovú značku volieb."
-
-#~ msgid "%s:%u has unknown options %s."
-#~ msgstr "%s:%u obsahuje neznáme voľby %s."
-
-#~ msgid "%s:%u contains no module name."
-#~ msgstr "%s:%u neobsahuje názov modulu."
-
-#~ msgid "Configuration file `%s' was not found: %s"
-#~ msgstr "Konfiguračný súbor '%s' nebol nájdený: %s"
-
-#~ msgid "AFFS Volume"
-#~ msgstr "Zväzok AFFS"
-
-#~ msgid "AFS Network Volume"
-#~ msgstr "Sieťový zväzok AFS"
-
-#~ msgid "Auto-detected Volume"
-#~ msgstr "Automaticky určený zväzok"
-
-#~ msgid "CD-ROM Drive"
-#~ msgstr "Mechanika CD-ROM"
-
-#~ msgid "CD Digital Audio"
-#~ msgstr "Zvukové CD"
-
-#~ msgid "Hardware Device Volume"
-#~ msgstr "Zväzok hardvérového zariadenia"
-
-#~ msgid "EncFS Volume"
-#~ msgstr "Zväzok EncFS"
-
-#~ msgid "Ext2 Linux Volume"
-#~ msgstr "Zväzok Ext2 Linux"
-
-#~ msgid "Ext3 Linux Volume"
-#~ msgstr "Zväzok Ext3 Linux"
-
-#~ msgid "MSDOS Volume"
-#~ msgstr "Zväzok MSDOS"
-
-#~ msgid "BSD Volume"
-#~ msgstr "Zväzok BSD"
-
-#~ msgid "FUSE Volume"
-#~ msgstr "Zväzok FUSE"
-
-#~ msgid "MacOS Volume"
-#~ msgstr "Zväzok MacOS"
-
-#~ msgid "CDROM Volume"
-#~ msgstr "Zväzok CDROM"
-
-#~ msgid "Hsfs CDROM Volume"
-#~ msgstr "Zväzok Hsfs CDROM"
-
-#~ msgid "JFS Volume"
-#~ msgstr "Zväzok JFS"
-
-#~ msgid "Windows NT Volume"
-#~ msgstr "Zväzok Windows NT"
-
-#~ msgid "System Volume"
-#~ msgstr "Systémový zväzok"
-
-#~ msgid "Memory Volume"
-#~ msgstr "Pamäťový zväzok"
-
-#~ msgid "Minix Volume"
-#~ msgstr "Zväzok Minix"
-
-#~ msgid "NFS Network Volume"
-#~ msgstr "Sieťový zväzok NFS"
-
-#~ msgid "Netware Volume"
-#~ msgstr "Zväzok Netware"
-
-#~ msgid "Reiser4 Linux Volume"
-#~ msgstr "Linuxový zväzok Reiser4"
-
-#~ msgid "ReiserFS Linux Volume"
-#~ msgstr "Linuxový zväzok ReiserFS"
-
-#~ msgid "SuperMount Volume"
-#~ msgstr "Zväzok SuperMount"
-
-#~ msgid "DVD Volume"
-#~ msgstr "Zväzok DVD"
-
-#~ msgid "Solaris/BSD Volume"
-#~ msgstr "Zväzok Solaris/BSD"
-
-#~ msgid "Udfs Solaris Volume"
-#~ msgstr "Zväzok Solaris Udfs"
-
-#~ msgid "Pcfs Solaris Volume"
-#~ msgstr "Zväzok Solaris Pcfs"
-
-#~ msgid "Sun SAM-QFS Volume"
-#~ msgstr "Zväzok Sun SAM-QFS"
-
-#~ msgid "Temporary Volume"
-#~ msgstr "Dočasný zväzok"
-
-#~ msgid "Enhanced DOS Volume"
-#~ msgstr "Rozšírený zväzok DOS"
-
-#~ msgid "Windows VFAT Volume"
-#~ msgstr "Zväzok Windows VFAT"
-
-#~ msgid "Xenix Volume"
-#~ msgstr "Zväzok Xenix"
-
-#~ msgid "XFS Linux Volume"
-#~ msgstr "Linuxový zväzok XFS"
-
-#~ msgid "XIAFS Volume"
-#~ msgstr "Zväzok XIAFS"
-
-#~ msgid "CIFS Volume"
-#~ msgstr "Zväzok CIFS"
-
-#~ msgid "Unknown"
-#~ msgstr "Neznámy"
-
-#~ msgid "%s Volume"
-#~ msgstr "Zväzok %s"
-
-#~ msgid "Pen Drive"
-#~ msgstr "Mechanika Pen"
-
-#~ msgid "External %s"
-#~ msgstr "Externá %s"
-
-#~ msgid "%s Removable Volume"
-#~ msgstr "Výmenný zväzok %s"
-
-#~ msgid "Volume"
-#~ msgstr "Zväzok"
-
-#~ msgid "Unknown operation type %u"
-#~ msgstr "Neznámy typ operácie %u"
-
-#~ msgid "Cannot create pipe for open GIOChannel: %s"
-#~ msgstr "Nemožno vytvoriť rúru pre otvorenie GIOChannel: %s"
-
-#~ msgid "Unknown job kind %u"
-#~ msgstr "Neznámy druh úlohy %u"
-
-#~ msgid ""
-#~ "Deprecated function. User modifications to the MIME database are no "
-#~ "longer supported."
-#~ msgstr ""
-#~ "Zastaralá funkcia. Používateľské zmeny MIME databázy už nie sú "
-#~ "podporované."
-
-#~ msgid "More parsing errors will be ignored."
-#~ msgstr "Ďalšie chyby analýzy budú ignorované."
-
-#~ msgid "No error"
-#~ msgstr "Bez chyby"
-
-#~ msgid "File not found"
-#~ msgstr "Súbor nenájdený"
-
-#~ msgid "Generic error"
-#~ msgstr "Všeobecná chyba"
-
-#~ msgid "I/O error"
-#~ msgstr "V/V chyba"
-
-#~ msgid "Data corrupted"
-#~ msgstr "Poškodené dáta"
-
-#~ msgid "Format not valid"
-#~ msgstr "Neplatný formát"
-
-#~ msgid "Bad file handle"
-#~ msgstr "Chybný handle súboru"
-
-#~ msgid "File too big"
-#~ msgstr "Príliš veľký súbor"
-
-#~ msgid "Read-only file system"
-#~ msgstr "Súborový systém len pre čítanie"
-
-#~ msgid "Invalid URI"
-#~ msgstr "Neplatné URI"
-
-#~ msgid "File not open"
-#~ msgstr "Neotvorený súbor"
-
-#~ msgid "Open mode not valid"
-#~ msgstr "Mód otvorenia neplatný"
-
-#~ msgid "Too many open files"
-#~ msgstr "Príliš veľa otvorených súborov"
-
-#~ msgid "Operation in progress"
-#~ msgstr "Operácia prebieha"
-
-#~ msgid "Operation interrupted"
-#~ msgstr "Operácia prerušená"
-
-#~ msgid "Looping links encountered"
-#~ msgstr "Vyskytli sa cyklické odkazy"
-
-#~ msgid "Not enough memory"
-#~ msgstr "Nedostatok pamäti"
-
-#~ msgid "Host not found"
-#~ msgstr "Hostiteľ nenájdený"
-
-#~ msgid "Host has no address"
-#~ msgstr "Hostiteľ nemá adresu"
-
-#~ msgid "Login failed"
-#~ msgstr "Zlyhalo prihlásenie"
-
-#~ msgid "Directory busy"
-#~ msgstr "Priečinok zaneprázdnený"
-
-#~ msgid "Too many links"
-#~ msgstr "Príliš veľa odkazov"
-
-#~ msgid "Read only file system"
-#~ msgstr "Súborový systém len pre čítanie"
-
-#~ msgid "Not on the same file system"
-#~ msgstr "Nie je na rovnakom súborovom systéme"
-
-#~ msgid "Request obsoletes service's data"
-#~ msgstr "Požiadavka zneplatňuje dáta služby"
-
-#~ msgid "No default action associated"
-#~ msgstr "Nedefinovaná žiadna štandardná akcia"
-
-#~ msgid "No handler for URL scheme"
-#~ msgstr "Pre URL schému nie je ovládací program"
-
-#~ msgid "Error parsing command line"
-#~ msgstr "Chyba pri analýze príkazového riadku"
-
-#~ msgid "Error launching command"
-#~ msgstr "Chyba pri spúšťaní príkazu"
-
-#~ msgid "Timeout reached"
-#~ msgstr "Čas vypršal"
-
-#~ msgid "Nameserver error"
-#~ msgstr "Chyba menného servera"
-
-#~ msgid "The resource is locked"
-#~ msgstr "Prostriedok je uzamknutý"
-
-#~ msgid "Function call deprecated"
-#~ msgstr "Volanie funkcie je zastaralá"
-
-#~ msgid "Unknown error"
-#~ msgstr "Neznáma chyba"
-
-#~ msgid "%u byte"
-#~ msgid_plural "%u bytes"
-#~ msgstr[0] "%u bajtov"
-#~ msgstr[1] "%u bajt"
-#~ msgstr[2] "%u bajty"
-
-#~ msgid "Floppy"
-#~ msgstr "Disketa"
-
-#~ msgid "CD-ROM/DVD-ROM"
-#~ msgstr "CD-ROM/DVD-ROM"
-
-#~ msgid "CD-ROM/DVD-RAM"
-#~ msgstr "CD-ROM/DVD-RAM"
-
-#~ msgid "CD-ROM/DVD-R"
-#~ msgstr "CD-ROM/DVD-R"
-
-#~ msgid "CD-ROM/DVD-RW"
-#~ msgstr "CD-ROM/DVD-RW"
-
-#~ msgid "CD-R/DVD-ROM"
-#~ msgstr "CD-R/DVD-ROM"
-
-#~ msgid "CD-R/DVD-RAM"
-#~ msgstr "CD-R/DVD-RAM"
-
-#~ msgid "CD-R/DVD-R"
-#~ msgstr "CD-R/DVD-R"
-
-#~ msgid "CD-R/DVD-RW"
-#~ msgstr "CD-R/DVD-RW"
-
-#~ msgid "CD-RW/DVD-ROM"
-#~ msgstr "CD-RW/DVD-ROM"
-
-#~ msgid "CD-RW/DVD-RAM"
-#~ msgstr "CD-RW/DVD-RAM"
-
-#~ msgid "CD-RW/DVD-R"
-#~ msgstr "CD-RW/DVD-R"
-
-#~ msgid "CD-RW/DVD-RW"
-#~ msgstr "CD-RW/DVD-RW"
-
-#~ msgid "IEEE1394 Drive"
-#~ msgstr "Mechanika IEEE1394"
-
-#~ msgid "CF"
-#~ msgstr "CF"
-
-#~ msgid "SD/MMC"
-#~ msgstr "SD/MMC"
-
-#~ msgid "Memory Stick"
-#~ msgstr "Memory Stick"
-
-#~ msgid "Root Volume"
-#~ msgstr "Koreňový zväzok"
-
-#~ msgid "Audio CD"
-#~ msgstr "Zvukové CD"
-
-#~ msgid "Unknown volume"
-#~ msgstr "Neznámy zväzok"
-
-#~ msgid "Network server"
-#~ msgstr "Sieťový server"
-
-#~ msgid ""
-#~ "Unable to mount the floppy drive. There is probably no floppy in the "
-#~ "drive."
-#~ msgstr "Nepodarilo sa pripojiť disketu. Možno v mechanike žiadna nie je."
-
-#~ msgid ""
-#~ "Unable to mount the volume. There is probably no media in the device."
-#~ msgstr "Nepodarilo sa pripojiť zväzok. Možno v mechanike nie je médium."
-
-#~ msgid ""
-#~ "Unable to mount the floppy drive. The floppy is probably in a format that "
-#~ "cannot be mounted."
-#~ msgstr ""
-#~ "Nepodarilo sa pripojiť disketu. Disketa asi nie je v podporovanom formáte."
-
-#~ msgid ""
-#~ "Unable to mount the selected volume. The volume is probably in a format "
-#~ "that cannot be mounted."
-#~ msgstr ""
-#~ "Nepodarilo sa pripojiť zadaný zväzok. Zväzok asi nie je v podporovanom "
-#~ "formáte."
-
-#~ msgid "Unable to mount the selected floppy drive."
-#~ msgstr "Nepodarilo sa pripojiť zadanú disketu."
-
-#~ msgid "Unable to mount the selected volume."
-#~ msgstr "Nepodarilo sa pripojiť zadaný disk."
-
-#~ msgid ""
-#~ "Unable to unmount the selected volume. The volume is in use by one or "
-#~ "more programs."
-#~ msgstr ""
-#~ "Nepodarilo sa odpojiť zadaný zväzok. Zväzok je používaný jedným alebo "
-#~ "viacerými programami."
-
-#~ msgid "Unable to unmount the selected volume."
-#~ msgstr "Nepodarilo sa odpojiť zadaný zväzok."
-
-#~ msgid "Unable to eject media"
-#~ msgstr "Nepodarilo sa vysunúť médium"
-
-#~ msgid "Home"
-#~ msgstr "Domovský priečinok"
-
-#~ msgid "Unknown GnomeVFSSeekPosition %d"
-#~ msgstr "Neznáma GnomeVFSSeekPosition %d"
-
-#~ msgid "The identity of the remote computer (%s) is unknown."
-#~ msgstr "Totožnosť vzdialeného počítača (%s) je neznáma."
-
-#~ msgid "Didn't find a valid settings file at %s\n"
-#~ msgstr "Nepodarilo sa nájsť platný súbor s nastavením v %s\n"
-
-#~ msgid "Use the %s environment variable to specify a different location.\n"
-#~ msgstr "Pre zadanie iného umiestnenia použite premennú prostredia %s.\n"
-
-#~ msgid "Default component viewer application"
-#~ msgstr "Štandardná aplikácia prehliadača súčastí"
-
-#~ msgid "Default terminal application"
-#~ msgstr "Štandardná aplikácia terminálu"
-
-#~ msgid "Exec argument for default terminal"
-#~ msgstr "Argument spustenia pre štandardný terminál"
-
-#~ msgid ""
-#~ "The application to use for viewing files that require a component to view "
-#~ "them. The parameter %s will be replaced by the file's URIs, the parameter "
-#~ "%c will be replaced by the component IID."
-#~ msgstr ""
-#~ "Aplikácia používaná pre zobrazenie súborov, ktoré vyžadujú nejakú súčasť "
-#~ "pre zobrazenie. Parameter %s bude nahradený URI súborov, parameter %c "
-#~ "bude nahradený IID súčasti."
-
-#~ msgid ""
-#~ "The default terminal application to use for applications that require a "
-#~ "terminal."
-#~ msgstr ""
-#~ "Štandardná aplikácia terminálu používaná pre aplikácie, ktoré vyžadujú "
-#~ "terminál."
-
-#~ msgid "The exec argument to use for the default terminal application."
-#~ msgstr "Parameter používaný pri spúšťaní štandardnej aplikácie terminálu."
-
-#~ msgid "Run the command in a terminal"
-#~ msgstr "Spustiť program v termináli"
-
-#~ msgid "The command used to handle \"aim\" URLs, if enabled."
-#~ msgstr "Príkaz použitý na obsluhovanie URL \"aim\", ak je povolené."
-
-#~ msgid "The command used to handle \"callto\" URLs, if enabled."
-#~ msgstr "Príkaz použitý na obsluhovanie URL \"callto\", ak je povolené."
-
-#~ msgid "The command used to handle \"ghelp\" URLs, if enabled."
-#~ msgstr "Príkaz použitý na obsluhovanie URL \"ghelp\", ak je povolené."
-
-#~ msgid "The command used to handle \"h323\" URLs, if enabled."
-#~ msgstr "Príkaz použitý na obsluhovanie URL \"h323\", ak je povolené."
-
-#~ msgid "The command used to handle \"http\" URLs, if enabled."
-#~ msgstr "Príkaz použitý na obsluhovanie URL \"http\", ak je povolené."
-
-#~ msgid "The command used to handle \"https\" URLs, if enabled."
-#~ msgstr "Príkaz použitý na obsluhovanie URL \"https\", ak je povolené."
-
-#~ msgid "The command used to handle \"info\" URLs, if enabled."
-#~ msgstr "Príkaz použitý na obsluhovanie URL \"info\", ak je povolené."
-
-#~ msgid "The command used to handle \"mailto\" URLs, if enabled."
-#~ msgstr "Príkaz použitý na obsluhovanie URL \"mailto\", ak je povolené."
-
-#~ msgid "The command used to handle \"man\" URLs, if enabled."
-#~ msgstr "Príkaz použitý na obsluhovanie URL \"man\", ak je povolené."
-
-#~ msgid "The command used to handle \"trash\" URLs, if enabled."
-#~ msgstr "Príkaz použitý na obsluhovanie URL \"trash\", ak je povolené."
-
-#~ msgid "The handler for \"aim\" URLs"
-#~ msgstr "Obslužný program pre URL \"aim\""
-
-#~ msgid "The handler for \"callto\" URLs"
-#~ msgstr "Obslužný program pre URL \"callto\""
-
-#~ msgid "The handler for \"ghelp\" URLs"
-#~ msgstr "Obslužný program pre URL \"ghelp\""
-
-#~ msgid "The handler for \"h323\" URLs"
-#~ msgstr "Obslužný program pre URL \"h323\""
-
-#~ msgid "The handler for \"http\" URLs"
-#~ msgstr "Obslužný program pre URL \"http\""
-
-#~ msgid "The handler for \"https\" URLs"
-#~ msgstr "Obslužný program pre URL \"https\""
-
-#~ msgid "The handler for \"info\" URLs"
-#~ msgstr "Obslužný program pre URL \"info\""
-
-#~ msgid "The handler for \"mailto\" URLs"
-#~ msgstr "Obslužný program pre URL \"mailto\""
-
-#~ msgid "The handler for \"man\" URLs"
-#~ msgstr "Obslužný program pre URL \"man\""
-
-#~ msgid "The handler for \"trash\" URLs"
-#~ msgstr "Obslužný program pre URL \"trash\""
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"aim"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "True, ak program zadaný v kľúči \"command\" by mal obsluhovať URL \"aim\"."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle "
-#~ "\"callto\" URLs."
-#~ msgstr ""
-#~ "True, ak program zadaný v kľúči \"command\" by mal obsluhovať URL \"callto"
-#~ "\"."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"ghelp"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "True, ak program zadaný v kľúči \"command\" by mal obsluhovať URL \"ghelp"
-#~ "\"."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"h323"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "True, ak program zadaný v kľúči \"command\" by mal obsluhovať URL \"h323"
-#~ "\"."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"http"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "True, ak program zadaný v kľúči \"command\" by mal obsluhovať URL \"http"
-#~ "\"."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"https"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "True, ak program zadaný v kľúči \"command\" by mal obsluhovať URL \"https"
-#~ "\"."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"info"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "True, ak program zadaný v kľúči \"command\" by mal obsluhovať URL \"info"
-#~ "\"."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle "
-#~ "\"mailto\" URLs."
-#~ msgstr ""
-#~ "True, ak program zadaný v kľúči \"command\" by mal obsluhovať URL \"mailto"
-#~ "\"."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"man"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "True, ak program zadaný v kľúči \"command\" by mal obsluhovať URL \"man\"."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"trash"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "True, ak program zadaný v kľúči \"command\" by mal obsluhovať URL \"trash"
-#~ "\"."
-
-#~ msgid ""
-#~ "True if the command used to handle this type of URL should be run in a "
-#~ "terminal."
-#~ msgstr ""
-#~ "True, ak má byť program, použitý na obsluhu tohoto typu URL, spustený v "
-#~ "termináli."
-
-#~ msgid "Whether the specified command should handle \"aim\" URLs"
-#~ msgstr "Či má zadaný príkaz obsuhovať URL \"aim\""
-
-#~ msgid "Whether the specified command should handle \"callto\" URLs"
-#~ msgstr "Či má zadaný príkaz obsuhovať URL \"callto\""
-
-#~ msgid "Whether the specified command should handle \"ghelp\" URLs"
-#~ msgstr "Či má zadaný príkaz obsuhovať URL \"ghelp\""
-
-#~ msgid "Whether the specified command should handle \"h323\" URLs"
-#~ msgstr "Či má zadaný príkaz obsuhovať URL \"h323\""
-
-#~ msgid "Whether the specified command should handle \"http\" URLs"
-#~ msgstr "Či má zadaný príkaz obsuhovať URL \"http\""
-
-#~ msgid "Whether the specified command should handle \"https\" URLs"
-#~ msgstr "Či má zadaný príkaz obsuhovať URL \"https\""
-
-#~ msgid "Whether the specified command should handle \"info\" URLs"
-#~ msgstr "Či má zadaný príkaz obsuhovať URL \"info\""
-
-#~ msgid "Whether the specified command should handle \"mailto\" URLs"
-#~ msgstr "Či má zadaný príkaz obsuhovať URL \"mailto\""
-
-#~ msgid "Whether the specified command should handle \"man\" URLs"
-#~ msgstr "Či má zadaný príkaz obsuhovať URL \"man\""
-
-#~ msgid "Whether the specified command should handle \"trash\" URLs"
-#~ msgstr "Či má zadaný príkaz obsuhovať URL \"trash\""
-
-#~ msgid ""
-#~ "Comma separated list of DNS-SD domains that should be visible in the "
-#~ "\"network:///\" location."
-#~ msgstr ""
-#~ "Čiarkou oddelený zoznam DNS-SD domén, ktoré majú byť viditeľné v "
-#~ "umiestnení \"network:///\"."
-
-#~ msgid "Extra domains to look for DNS-SD services in"
-#~ msgstr "Ďalšie domény, v ktorých sa majú hľadať služby DNS-SD"
-
-#~ msgid "How to display local DNS-SD service"
-#~ msgstr "Ako sa má zobraziť miestna služba DNS-SD"
-
-#~ msgid "Possible values are \"merged\", \"separate\" and \"disabled\"."
-#~ msgstr "Prípustné hodnoty sú \"merged\", \"separate\" a \"disabled\"."
-
-#~ msgid "Authenticate proxy server connections"
-#~ msgstr "Overovať totožnosť spojení s proxy serverom"
-
-#~ msgid "Automatic proxy configuration URL"
-#~ msgstr "URL pre automatické nastavenie proxy"
-
-#~ msgid "Enables the proxy settings when accessing HTTP over the Internet."
-#~ msgstr "Povolí nastavenie proxy pri prístupe pomocou HTTP na Internet."
-
-#~ msgid "FTP proxy host name"
-#~ msgstr "Hostiteľ pre FTP proxy"
-
-#~ msgid "FTP proxy port"
-#~ msgstr "Port pre FTP proxy"
-
-#~ msgid "HTTP proxy host name"
-#~ msgstr "Hostiteľ pre HTTP proxy"
-
-#~ msgid "HTTP proxy port"
-#~ msgstr "Port pre HTTP proxy"
-
-#~ msgid "HTTP proxy username"
-#~ msgstr "Meno používateľa pre HTTP proxy"
-
-#~ msgid ""
-#~ "If true, then connections to the proxy server require authentication. The "
-#~ "username/password combo is defined by \"/system/http_proxy/"
-#~ "authentication_user\" and \"/system/http_proxy/authentication_password\"."
-#~ msgstr ""
-#~ "Ak je true, pripojenia k proxy serveru vyžadujú overenie totožnosti. "
-#~ "Kombinácia používateľ/heslo je definovaná v \"/system/http_proxy/"
-#~ "authentication_user\" a \"/system/http_proxy/authentication_password\"."
-
-#~ msgid "Non-proxy hosts"
-#~ msgstr "Hostitelia bez použitia proxy"
-
-#~ msgid "Password to pass as authentication when doing HTTP proxying."
-#~ msgstr "Heslo používané pre prihlásenie k proxy HTTP."
-
-#~ msgid "Proxy configuration mode"
-#~ msgstr "Režim nastavenia proxy"
-
-#~ msgid "SOCKS proxy host name"
-#~ msgstr "Hostiteľ proxy pre SOCKS"
-
-#~ msgid "SOCKS proxy port"
-#~ msgstr "Port proxy pre SOCKS"
-
-#~ msgid "Secure HTTP proxy host name"
-#~ msgstr "Hostiteľ proxy pre zabezpečené HTTP"
-
-#~ msgid "Secure HTTP proxy port"
-#~ msgstr "Port proxy pre zabezpečené HTTP"
-
-#~ msgid ""
-#~ "Select the proxy configuration mode. Supported values are \"none\", "
-#~ "\"manual\", \"auto\"."
-#~ msgstr ""
-#~ "Výber režimu nastavenia proxy. Podporované hodnoty sú \"none\", \"manual"
-#~ "\", \"auto\"."
-
-#~ msgid "The machine name to proxy FTP through."
-#~ msgstr "Názov počítača, ktorý používať ako proxy pre FTP."
-
-#~ msgid "The machine name to proxy HTTP through."
-#~ msgstr "Názov počítača, ktorý používať ako proxy pre HTTP."
-
-#~ msgid "The machine name to proxy secure HTTP through."
-#~ msgstr "Názov počítača, ktorý používať ako proxy pre zabezpečené HTTP."
-
-#~ msgid "The machine name to proxy socks through."
-#~ msgstr "Názov počítača, ktorý používať ako proxy pre socks."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/http_proxy/host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Port počítača definovaného v \"/system/http_proxy/host\", ktorý používate "
-#~ "ako proxy."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/proxy/ftp_host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Port počítača definovaného v \"/system/proxy/ftp_host\", ktorý používate "
-#~ "ako proxy."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/proxy/secure_host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Port počítača definovaného v \"/system/proxy/secure_host\", ktorý "
-#~ "používate ako proxy."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/proxy/socks_host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Port počítača definovaného v \"/system/proxy/socks_host\", ktorý "
-#~ "používate ako proxy."
-
-#~ msgid ""
-#~ "This key contains a list of hosts which are connected to directly, rather "
-#~ "than via the proxy (if it is active). The values can be hostnames, "
-#~ "domains (using an initial wildcard like *.foo.com), IP host addresses "
-#~ "(both IPv4 and IPv6) and network addresses with a netmask (something like "
-#~ "192.168.0.0/24)."
-#~ msgstr ""
-#~ "Tento kľúč obsahuje zoznam hostiteľov, ku ktorým sa radšej pripojiť "
-#~ "priamo a nie cez proxy (ak je atívne). Hodnoty môžu byť názvy hostiteľov, "
-#~ "domény (pomocou počiatočných žolíkov, napr. *.foo.com), IP adresy (IPv4 "
-#~ "aj IPv6) a sieťové adresy s maskou (napr. 192.168.0.0/24)."
-
-#~ msgid "URL that provides proxy configuration values."
-#~ msgstr "URL, ktoré poskytuje hodnoty konfigurácie proxy."
-
-#~ msgid "Use HTTP proxy"
-#~ msgstr "Použiť proxy HTTP"
-
-#~ msgid "User name to pass as authentication when doing HTTP proxying."
-#~ msgstr "Používateľ poskytnutý pri overení totožnosti počas proxy HTTP."
-
-#~ msgid "SMB workgroup"
-#~ msgstr "Pracovná skupina SMB"
-
-#~ msgid ""
-#~ "The Windows networking workgroup or domain that the user is part of. In "
-#~ "order for a new workgroup to fully take effect the user may need to log "
-#~ "out and log back in."
-#~ msgstr ""
-#~ "Sieťová pracovná skupina alebo doména Windows, do ktorej patrí "
-#~ "používateľ. Aby sa nová pracovná skupina úplne prejavila, použivateľ sa "
-#~ "možno bude musieť odhlásiť a prihlásiť."
-
-#, fuzzy
-#~ msgid "Could not initialize Bonobo"
-#~ msgstr "Nepodarilo sa nájsť hlavný prehliadač"
-
-#~ msgid "Could not initialize gnome vfs"
-#~ msgstr "Nemôžem inicializovať gnome VFS"
-
-#~ msgid "Standard Moniker factory"
-#~ msgstr "Vytváracie rozhranie pre štandardný moniker"
-
-#~ msgid "file MonikerExtender"
-#~ msgstr "súbor MonikerExtender"
-
-#~ msgid "generic Gnome VFS moniker"
-#~ msgstr "generický moniker Gnome VFS"
-
-#, fuzzy
-#~ msgid "generic file moniker"
-#~ msgstr "Všeobecná chyba"
-
-#~ msgid "Display SCSI drives"
-#~ msgstr "Zobraziť SCSI mechaniky"
-
-#~ msgid "Display SCSI optical drives"
-#~ msgstr "Zobraziť optické SCSI mechaniky"
-
-#~ msgid "Display drives with removable media"
-#~ msgstr "Zobraziť mechaniky s výmennými diskami"
-
-#~ msgid "Display external drives"
-#~ msgstr "Zobraziť externé mechaniky"
-
-#~ msgid "Display internal hard drives"
-#~ msgstr "Zobraziť interné pevné disky"
-
-#~ msgid ""
-#~ "Whether to display SCSI optical drives even if /system/storage/"
-#~ "display_scsi_drives is set to FALSE."
-#~ msgstr ""
-#~ "Či sa majú zobraziť optické SCSI disky aj v prípade, že je /system/"
-#~ "storage/display_scsi_drives nastavené na FALSE."
-
-#~ msgid "Whether to display drives and mountable volumes from SCSI drives."
-#~ msgstr "Či sa majú zobraziť mechaniky a pripojiteľné disky z SCSI mechaník."
-
-#~ msgid ""
-#~ "Whether to display drives and mountable volumes from drives with "
-#~ "removable media (e.g. drives where media can be inserted and removed)."
-#~ msgstr ""
-#~ "Či sa majú zobraziť mechaniky a pripojiteľné disky z mechaník s výmennými "
-#~ "médiami (mechaniky, do ktorých sa vkladajú disky)."
-
-#~ msgid ""
-#~ "Whether to display drives and mountable volumes from external drives (e."
-#~ "g. drives that are hotpluggable; e.g. drives that can be attached and "
-#~ "detached while the system is running)."
-#~ msgstr ""
-#~ "Či sa majú zobraziť mechaniky a pripojiteľné disky z externých mechaník "
-#~ "(mechaniky podporujúce výmenu diskov počas bežiaceho systému)."
-
-#~ msgid ""
-#~ "Whether to display drives and mountable volumes from internal hard drives "
-#~ "(non-SCSI optical drives are always shown)."
-#~ msgstr ""
-#~ "Či sa majú zobraziť mechaniky a pripojiteľné disky z interných pevných "
-#~ "diskov (optické ne-SCSI mechaniky sa vždy zobrazia)."
-
-#~ msgid "%s:%d aborted parsing."
-#~ msgstr "%s:%d analýza zlyhala."
-
-#~ msgid "Not a symbolic link"
-#~ msgstr "Nie je symbolický odkaz"
-
-#~ msgid ""
-#~ "Unable to mount the volume. If this is an encrypted drive, then the wrong "
-#~ "password or key was used."
-#~ msgstr ""
-#~ "Nepodarilo sa pripojiť zväzok. Ak je tento zväzok zašifrovaný, bolo "
-#~ "použité nesprávne heslo alebo kľúč."
-
-#~ msgid "Failed to read data from child process %d (%s)"
-#~ msgstr "Čítanie údajov z procesu potomka %d zlyhalo (%s)"
-
-#~ msgid "Couldn't run mount process in a pty"
-#~ msgstr "Proces mount nemohol byť spustený v pty"
-
-#~ msgid "Unexpected error in select() reading data from a child process (%s)"
-#~ msgstr ""
-#~ "Neočakávaná chyba v select() pri čítaní údajov z procesu potomka (%s)"
-
-#~ msgid "Unexpected error in waitpid() (%s)"
-#~ msgstr "Neočakávaná chyba vo waitpid() (%s)"
-
-#~ msgid "Your HTTP Proxy requires you to log in.\n"
-#~ msgstr "Vaše HTTP proxy vyžaduje vaše prihlásenie.\n"
-
-#~ msgid ""
-#~ "You must log in to access \"%s\".\n"
-#~ "%s"
-#~ msgstr ""
-#~ "Aby ste mohli pristupovať k \"%s\", musíte sa prihlásiť.\n"
-#~ "%s"
-
-#~ msgid "Your password will be transmitted unencrypted."
-#~ msgstr "Vaše heslo bude prenesené nezašifrované."
-
-#~ msgid "Your password will be transmitted encrypted."
-#~ msgstr "Vaše heslo bude prenesené zašifrované."
-
-#~ msgid "You must log in to access %s\n"
-#~ msgstr "Aby ste mohli pristupovať k %s, musíte sa prihlásiť\n"
diff --git a/po/sl.po b/po/sl.po
deleted file mode 100644
index 09fd44e4..00000000
--- a/po/sl.po
+++ /dev/null
@@ -1,1710 +0,0 @@
-# This file is distributed under the same license as the program package.
-#
-# Matej Urbančič <mateju@svn.gnome.org>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-05 07:54+0000\n"
-"PO-Revision-Date: 2008-09-08 14:12+0100\n"
-"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
-"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
-"X-Poedit-Language: Slovenian\n"
-"X-Poedit-Country: SLOVENIA\n"
-"X-Poedit-SourceCharset: utf-8\n"
-
-#: ../client/gdaemonfile.c:482
-#: ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "Dejanje ni dovoljeno, saj jo datoteke na različnih priklopnih mestih"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Vrnjena neveljavna vrednost get_info"
-
-#: ../client/gdaemonfile.c:816
-#: ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Vrnjena neveljavna vrednost query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Ni mogoče pridobiti opisa datoteke pretoka"
-
-#: ../client/gdaemonfile.c:926
-#: ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055
-#: ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176
-#: ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330
-#: ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "Vrnjena neveljavna vrednost open"
-
-#: ../client/gdaemonfile.c:1006
-#: ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124
-#: ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "Ni bil pridobljen opis datoteke pretoka"
-
-#: ../client/gdaemonfile.c:1238
-#: ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Vrnjena neveljavna vrednost call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Vrnjena neveljavna vrednost get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Ni mogoče najti določene priklopne točke"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Neveljavno ime datoteke %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Vrnjena neveljavna vrednost query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "Vrnjena neveljavna vrednost monitor_dir"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "Vrnjena neveljavna vrednost monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Napaka v protokolu pretoka: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Konec pretoka"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831
-#: ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793
-#: ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049
-#: ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250
-#: ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336
-#: ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418
-#: ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069
-#: ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120
-#: ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Operacija je bila preklicana"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Iskanje po pretoku ni podprto"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Dejanje info poizvedbe ni podprto"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Poizvedba podrobnosti na pretoku ni podprta"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Napaka med pridobivanjem podrobnosti priklopa_ %s"
-
-#: ../client/gvfsdaemondbus.c:568
-#: ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Napaka s povezovanjem z demonom: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Napaka med ustvarjanjem vtiča: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Napaka med povezovanjem z vtičem: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Neveljaven zapis podrobnosti datoteke"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Neveljavna vsebina seznama atributov"
-
-#: ../daemon/daemon-main.c:63
-#: ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Napaka med povezovanjem z D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Datotečni sistem %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Napaka: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Uporaba: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155
-#: ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Uporaba: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Ni določene vrste pogona"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "priklopna točka %s že teče"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "napaka med zaganjanjem demona priklopa"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315
-#: ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ na %s"
-
-#: ../daemon/gvfsbackendarchive.c:515
-#: ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Ni določenega imena gostitelja"
-
-#: ../daemon/gvfsbackendarchive.c:526
-#: ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456
-#: ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603
-#: ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Neveljavno določilo priklopa"
-
-#: ../daemon/gvfsbackendarchive.c:636
-#: ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715
-#: ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572
-#: ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101
-#: ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804
-#: ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042
-#: ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Datoteka ne obstaja"
-
-#: ../daemon/gvfsbackendarchive.c:724
-#: ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651
-#: ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912
-#: ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Datoteka ni mapa"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Burn"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Ni mogoče ustvariti začasne mape"
-
-#: ../daemon/gvfsbackendburn.c:405
-#: ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451
-#: ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719
-#: ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783
-#: ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987
-#: ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Ni take mape ali datoteke"
-
-#: ../daemon/gvfsbackendburn.c:425
-#: ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Mapa ni prazna"
-
-#: ../daemon/gvfsbackendburn.c:459
-#: ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "Ni mogoče kopirati datoteke preko mape"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD zapisovalnik"
-
-#: ../daemon/gvfsbackendburn.c:755
-#: ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926
-#: ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Datoteka obstaja"
-
-#: ../daemon/gvfsbackendburn.c:829
-#: ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173
-#: ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150
-#: ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Hrbtenica ne podpira dejanja"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "Ni take datoteke ali mape na ciljni poti"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "Ni mogoče kopirati mape preko mape"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "Ciljna datoteka obstaja"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "Ni mogoče kopirati drevesne strukture mape"
-
-#: ../daemon/gvfsbackendburn.c:952
-#: ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569
-#: ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Ni podprto"
-
-#: ../daemon/gvfsbackendcdda.c:223
-#: ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Ni se mogoče povezati s sistemskim vodilom"
-
-#: ../daemon/gvfsbackendcdda.c:233
-#: ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Ni mogoče ustvariti libhal vsebine"
-
-#: ../daemon/gvfsbackendcdda.c:246
-#: ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Ni mogoče zagnati libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261
-#: ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Ni določenega pogona"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Ni mogoče najti pogona %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Pogon %s ne vsebuje zvočnih datotek"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda priklop na %s"
-
-#: ../daemon/gvfsbackendcdda.c:295
-#: ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435
-#: ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Zvočni disk"
-
-#: ../daemon/gvfsbackendcdda.c:356
-#: ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Datotečni sistem je zaseden: %d odprtih datotek"
-msgstr[1] "Datotečni sistem je zaseden: %d odprta datoteka"
-msgstr[2] "Datotečni sistem je zaseden: %d odprti datoteki"
-msgstr[3] "Datotečni sistem je zaseden: %d odprte datoteke"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Ni take datoteke %s na pogonu %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Napaka programa 'paranoia' na pogonu %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Napaka med iskanjem po pretoku na pogonu %s"
-
-#: ../daemon/gvfsbackendcdda.c:815
-#: ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Ni take datoteke"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Datoteka ne obstaja ali pa ni običajna zvočna sled"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Storitev zvočnega CD datotečnega sistema"
-
-#: ../daemon/gvfsbackendcomputer.c:179
-#: ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Računalnik"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Datotečni sistem"
-
-#: ../daemon/gvfsbackendcomputer.c:590
-#: ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758
-#: ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-#: ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "Ni mogoče odpreti mape"
-
-#: ../daemon/gvfsbackendcomputer.c:594
-#: ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Ni mogoče odpreti priklopne datoteke"
-
-#: ../daemon/gvfsbackendcomputer.c:780
-#: ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Notranja napaka: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812
-#: ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Ni mogoče priklopiti datoteke"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Ni medija v pogonu"
-
-#: ../daemon/gvfsbackendcomputer.c:881
-#: ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Ni priklopna datoteka"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Ni mogoče odklopiti datoteke"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Ni mogoče izvreči datoteke"
-
-#: ../daemon/gvfsbackenddav.c:503
-#: ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Napaka HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Ni mogoče razčleniti odgovora"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Odziv brez vsebine"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Nepričakovan odgovor strežnika"
-
-#: ../daemon/gvfsbackenddav.c:1156
-#: ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Neveljaven odziv"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "Izmenjava WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Vnos gesla za %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Prosim vnesite geslo namestniškega strežnika"
-
-#: ../daemon/gvfsbackenddav.c:1527
-#: ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Ni podprta WebDAV souporaba"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV na %s"
-
-#: ../daemon/gvfsbackenddav.c:1614
-#: ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Ni mogoče ustvariti zahteve"
-
-#: ../daemon/gvfsbackenddav.c:1750
-#: ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114
-#: ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365
-#: ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Ciljna datoteka že obstaja"
-
-#: ../daemon/gvfsbackenddav.c:1823
-#: ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Datoteka je bila zunanje spremenjena"
-
-#: ../daemon/gvfsbackenddav.c:1854
-#: ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Ni mogoče ustvariti varnostne kopije"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669
-#: ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Ni mogoče nadzirati datoteke ali mape."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688
-#: ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814
-#: ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Omrežje"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Računi niso podprti"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Gostitelj je prekinil povezavo"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Ni mogoče odpreti podatkovne povezave. Najverjetneje dejanje preprečuje požarni zid."
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Podatkovna povezava je zaprta"
-
-#: ../daemon/gvfsbackendftp.c:255
-#: ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Operacija ni uspela"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Na strežniku ni več prostora"
-
-#: ../daemon/gvfsbackendftp.c:272
-#: ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Operacija ni podprta"
-
-#: ../daemon/gvfsbackendftp.c:276
-#: ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Dovoljenje zavrnjeno"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Neznana vrsta strani"
-
-#: ../daemon/gvfsbackendftp.c:284
-#: ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Neveljavno ime datoteke"
-
-#: ../daemon/gvfsbackendftp.c:288
-#: ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393
-#: ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425
-#: ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "neveljaven odgovor"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "prekinjeno oddajanje"
-
-#: ../daemon/gvfsbackendftp.c:677
-#: ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Ni se mogoče povezati z gostiteljem"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Vnos gesla za ftp na %s"
-
-#: ../daemon/gvfsbackendftp.c:1362
-#: ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Vnos gesla je preklican"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp na %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp kot %s na %s"
-
-#: ../daemon/gvfsbackendftp.c:1529
-#: ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Datoteka je mapa"
-
-#: ../daemon/gvfsbackendftp.c:1751
-#: ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "izdelava varnostnih kopij ni podprta"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "ime datoteke je predolgo"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Neveljavno ciljno ime datoteke"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Datoteka ali mapa že obstaja"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Ni take mape ali datoteke"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Neveljavno ime datoteke"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Ni podprto"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digitalni fotoaparat (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841
-#: ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s kamera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844
-#: ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s predvajalnik zvoka"
-
-#: ../daemon/gvfsbackendgphoto2.c:853
-#: ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855
-#: ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Predvajalnik zvoka"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325
-#: ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Napaka med pridobivanjem seznama map"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Ni določenega pogona"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Ni mogoče ustvariti gphoto2 vsebine"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Napaka med ustvarjanjem aparata"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483
-#: ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Napaka med nalaganjem podrobnosti naprave"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Napaka med preverjanjem podrobnosti naprave"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Napaka med pridobivanjem podrobnosti naprave"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Napaka med nastavljanjem povezovalnih vrat kamere"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Napaka med zaganjanjem kamere"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 priklop na %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Ni določenega aparata"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Napaka med ustvarjanjem predmeta datoteke"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Napaka med prodobivanjem datoteke"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Napaka med branjem podatkov iz datoteke"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841
-#: ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Napaka med iskanjem pretoka na napravi %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981
-#: ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Ni imenik"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Napaka med pridobivanjem seznama datotek"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Napaka med ustvarjanjem mape"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Ime že obstaja"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592
-#: ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Ime datoteke je predolgo"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602
-#: ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Napaka med preimenovanjem mape"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615
-#: ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Napaka med preimenovanjem datoteke"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Mapa '%s' ni prazna"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Napaka med brisanjem mape"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Napaka med brisanjem datoteke"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "Ni mogoče pisati v mapo"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Ni mogoče določiti nove datoteke za pripenjanje na"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Ni mogoče prebrati datoteke za pripenjanje"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Ni mogoče pridobiti podatkov datoteke za pripenjanje"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Napaka med pisanjem datoteke"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Ni podprto (ni enaka mapa)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Ni podprto (vir je mapa, cilj je mapa)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Ni podprto (vir je mapa, cilj je obstoječa datoteka)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Ni podprto (vir je datoteka, cilj je mapa)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Napaka HTTP odjemalca: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560
-#: ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301
-#: ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr "(neveljavno kodiranje)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Opombe map niso podprte"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268
-#: ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Omrežje Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Krajevno omrežje"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Monitor omrežnih mest"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442
-#: ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s na %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Povezava z napravo je prekinjena"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Naprava zahteva posodobitev programa"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh program je nepričakovano zaključen"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Ime gostitelja ni znano"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Ni poti do gostitelja"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Strežnik je zavrnil povezavo"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Neuspešna overitev ključa gostitelja"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Ni mogoče oživiti ssh programa"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Ni mogoče oživiti ssh programa: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528
-#: ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Časovni zamik prijave je potekel"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Vnesite šifrirno geslo za ključ"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Vnos gesla"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Ni mogoče poslati gesla"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Vseeno prijavi"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Prekliči prijavo"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Istovetnosti oddaljenega računalnika (%s) ni znana.\n"
-"To se zgodi, kadar se prvič prijavite v sistem.\n"
-"\n"
-"Podatki overitve, ki jih pošilja oddaljeni računalnik so %s. V primeru, da želite biti popolnoma prepričani, da je varno nadaljevati, stopite v stik s skrbnikom vašega sistema."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Prijava je preklicana"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Ni mogoče poslati potrdila istovetnosti gostitelja"
-
-#: ../daemon/gvfsbackendsftp.c:1472
-#: ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Napaka v protokolu"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp na %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Ni mogoče najti podprtega ssh ukaza"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Napaka"
-
-#: ../daemon/gvfsbackendsftp.c:2023
-#: ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093
-#: ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235
-#: ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331
-#: ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513
-#: ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603
-#: ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692
-#: ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869
-#: ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981
-#: ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319
-#: ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483
-#: ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619
-#: ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707
-#: ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756
-#: ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Prejet neveljaven odgovor"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Napaka med ustvarjanjem varnostne datoteke: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Ni mogoče ustvariti začasne datoteke"
-
-#: ../daemon/gvfsbackendsftp.c:3545
-#: ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Ni mogoče premakniti mape čez mapo"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Zahtevano geslo za mesto %s na %s"
-
-#: ../daemon/gvfsbackendsmb.c:471
-#: ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Notranja napaka (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Napaka med priklapljanjem souporabe mape Oken"
-
-#: ../daemon/gvfsbackendsmb.c:717
-#: ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Nepodprta vrsta iskanja"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Ni mogoče ustvariti varnostne kopije: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Napaka med brisanjem datoteke: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Napaka med premikanjem datoteke: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Napaka med odstranjevanjem ciljne datoteke: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Ni mogoče po strukturi map premakniti mape"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Storitev Souporabe datotečnega sistema Oken"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Souporaba Oken na %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Datoteke ni mogoče priklopiti"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Ni običajna datoteka"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Storitev omrežnega datotečnega sistema Oken"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641
-#: ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Smeti"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (v smeteh)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Ni mogoče izbrisati smeti"
-
-#: ../daemon/gvfsbackendtrash.c:1677
-#: ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Opozorila mape smeti niso podprta"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Neveljavna vrsta hrbtenice"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Napaka med pošiljanjem fd: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Simbolnih povezav hrbtenica ne podpira"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Neveljavno dbus sporočilo"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Zamenjaj starejšega demona"
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Ne zaženi fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS demon"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Glavni demon za GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78
-#: ../programs/gvfs-cat.c:163
-#: ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101
-#: ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386
-#: ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144
-#: ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Poskusite \"%s --help\" za več podrobnosti."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Neveljavni argumenti oživljenega podrejenega procesa"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Samodejen priklop ni uspel: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Določeno mesto ni priklopljeno"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Določeno mesto ni podprto"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Mesto je že priklopljeno"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Mesta ni mogoče priklopiti"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-R"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s pogon"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s pogon"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Disketna enota"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Programski RAID pogon"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Pogon USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA pogon"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI pogon"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire pogon"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Tračni pogon"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash pogon"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Spominska kartica"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia pogon"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Pogon SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Pogon Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Pogon Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Thumb pogon"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Pogon za shranjevanje podatkov"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Napaka med odpiranjem medija: ena ali več enot medija je zasedenih."
-
-#: ../monitor/hal/ghalmount.c:301
-#: ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306
-#: ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311
-#: ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433
-#: ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "Mešani zvočno-podatkovni disk"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446
-#: ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "%s Medij"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s šifrirani podatki"
-
-#: ../monitor/hal/hal-utils.c:40
-#: ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Plošča CD-ROM disk"
-
-#: ../monitor/hal/hal-utils.c:40
-#: ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Prazen CD-ROM disk"
-
-#: ../monitor/hal/hal-utils.c:41
-#: ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Plošča CD-R disk"
-
-#: ../monitor/hal/hal-utils.c:41
-#: ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Prazna plošča CD-R disk"
-
-#: ../monitor/hal/hal-utils.c:42
-#: ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Plošča CD-RW disk"
-
-#: ../monitor/hal/hal-utils.c:42
-#: ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Prazna plošča CD-RW disk"
-
-#: ../monitor/hal/hal-utils.c:43
-#: ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43
-#: ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Plošča DVD-ROM disk"
-
-#: ../monitor/hal/hal-utils.c:43
-#: ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43
-#: ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Prazen DVD-ROM disk"
-
-#: ../monitor/hal/hal-utils.c:44
-#: ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Plošča DVD-RAM disk"
-
-#: ../monitor/hal/hal-utils.c:44
-#: ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Prazna plošča DVD-RAM disk"
-
-#: ../monitor/hal/hal-utils.c:46
-#: ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Plošča DVD-RW disk"
-
-#: ../monitor/hal/hal-utils.c:46
-#: ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Prazna plošča DVD-RW disk"
-
-#: ../monitor/hal/hal-utils.c:47
-#: ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Plošča DVD+R disk"
-
-#: ../monitor/hal/hal-utils.c:47
-#: ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Prazna plošča DVD+R disk"
-
-#: ../monitor/hal/hal-utils.c:48
-#: ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Plošča DVD+RW disk"
-
-#: ../monitor/hal/hal-utils.c:48
-#: ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Prazna plošča DVD+RW disk"
-
-#: ../monitor/hal/hal-utils.c:49
-#: ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL disk"
-
-#: ../monitor/hal/hal-utils.c:49
-#: ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Prazen DVD+R DL disk"
-
-#: ../monitor/hal/hal-utils.c:50
-#: ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray disk"
-
-#: ../monitor/hal/hal-utils.c:50
-#: ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Prazen Blu-Ray disk"
-
-#: ../monitor/hal/hal-utils.c:51
-#: ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R disk"
-
-#: ../monitor/hal/hal-utils.c:51
-#: ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Prazen Blu-Ray R disk"
-
-#: ../monitor/hal/hal-utils.c:52
-#: ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW disk"
-
-#: ../monitor/hal/hal-utils.c:52
-#: ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Prazen Blu-Ray RW disk"
-
-#: ../monitor/hal/hal-utils.c:53
-#: ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD disk"
-
-#: ../monitor/hal/hal-utils.c:53
-#: ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Prazen HD DVD disk"
-
-#: ../monitor/hal/hal-utils.c:54
-#: ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R disk"
-
-#: ../monitor/hal/hal-utils.c:54
-#: ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Prazen HD DVD-R disk"
-
-#: ../monitor/hal/hal-utils.c:55
-#: ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW disk"
-
-#: ../monitor/hal/hal-utils.c:55
-#: ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Prazen HD DVD-RW disk"
-
-#: ../monitor/hal/hal-utils.c:56
-#: ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO disk"
-
-#: ../monitor/hal/hal-utils.c:56
-#: ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Prazen MO disk"
-
-#: ../monitor/hal/hal-utils.c:57
-#: ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Disk"
-
-#: ../monitor/hal/hal-utils.c:57
-#: ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Prazen disk"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: napaka med odpiranjem datoteke: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, napaka med pisanjem v standardni odvod"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: napaka med branjem: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: napaka med zapiranjem: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "MESTO... - združi MESTA na standardni odvod."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid "Concatenate files at locations and print to the standard output. Works just like the traditional cat utility, but using gvfs location instead local files: for example you can use something like smb://server/resource/file.txt as location to concatenate."
-msgstr "Združevanje datotek na mestih in pri tiskanju preko standardnega odvoda. Deluje kot orodje cat z razliko, da uporablja gvfs namesto krajevnih datotek. Primer: uporabite lahko nekaj podobnega kot je pot smb://server/resource/file.txt kot mesto združevanja."
-
-#: ../programs/gvfs-cat.c:148
-msgid "Note: just pipe through cat if you need its formatting option like -n, -T or other."
-msgstr "Opomba: uporaba cevi preko ukaza cat, če potrebujete možnosti oblikovanja kot so -n, -T in druge."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174
-#: ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: manjka mesto"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: napaka med odpiranjem mesta: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: napaka med zaganjanjem programa: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "DATOTEKE... - odpri DATOTEKE z nastavljenim programom."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid "Opens the file(s) with the default application registered to handle the type of the file."
-msgstr "Odpre datoteke s privzetim programom, ki je nastavljen za odpiranje določene vrste datotek."
-
-#~ msgid "File unavailable"
-#~ msgstr "Datoteka ni na voljo"
-
diff --git a/po/sr.po b/po/sr.po
deleted file mode 100644
index 7a4c6413..00000000
--- a/po/sr.po
+++ /dev/null
@@ -1,2737 +0,0 @@
-# Serbian translation of gnome-vfs
-# Courtesy of Prevod.org team (http://prevod.org/) -- 2003, 2004, 2005, 2006, 2007.
-#
-# This file is distributed under the same license as the gnome-vfs package.
-#
-# Maintainer: Душан Живојнов <calvin@verat.net>
-# Reviewed on 2004-02-03 by: Данило Шеган <dsegan@gmx.net>
-# Reviewed on 2005-07-08 by: Данило Шеган <dsegan@gmx.net>
-# Reviewed on 2005-09-22 by: Данило Шеган <danilo@prevod.org>
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnome-vfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-14 18:17+0200\n"
-"PO-Revision-Date: 2007-09-06 21:18+0100\n"
-"Last-Translator: Горан Ракић <grakic@devbase.net>\n"
-"Language-Team: Serbian (sr) <gnom@prevod.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr ""
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr ""
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-#, fuzzy
-msgid "Could not find enclosing mount"
-msgstr "Не могу пронаћи главни разгледач"
-
-#: ../client/gdaemonfile.c:1677
-#, fuzzy, c-format
-msgid "Invalid filename %s"
-msgstr "Неисправно име датотеке"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr ""
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-#, fuzzy
-msgid "End of stream"
-msgstr "Крај датотеке"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-#, fuzzy
-msgid "Operation was cancelled"
-msgstr "Радња је обустављена"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr ""
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr ""
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr ""
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr ""
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr ""
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr ""
-
-#: ../common/gvfsdaemonprotocol.c:515
-#, fuzzy
-msgid "Invalid file info format"
-msgstr "Неисправно име датотеке"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr ""
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr ""
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, fuzzy, c-format
-msgid "%s Filesystem Service"
-msgstr "Систем датотека"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr ""
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr ""
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr ""
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr ""
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr ""
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr ""
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-#, fuzzy
-msgid "Invalid mount spec"
-msgstr "Неисправни параметри"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, fuzzy, c-format
-msgid "File doesn't exist"
-msgstr "Датотека постоји"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-#, fuzzy
-msgid "The file is not a directory"
-msgstr "Није фасцикла"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, fuzzy, c-format
-msgid "No such file or directory"
-msgstr "Није фасцикла"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Директоријум није празан"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr ""
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Датотека постоји"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-#, fuzzy
-msgid "Operation not supported by backend"
-msgstr "Операција није дозвољена"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:886
-#, fuzzy
-msgid "Target file exists"
-msgstr "Датотека постоји"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-#, fuzzy
-msgid "Cannot initialize libhal"
-msgstr "Не могу да покренем Бонобо"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr ""
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Звучни диск"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, fuzzy, c-format
-msgid "No such file %s on drive %s"
-msgstr "Нема више простора на уређају"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Систем датотека"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-#, fuzzy
-msgid "Can't open directory"
-msgstr "Није фасцикла"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, fuzzy, c-format
-msgid "Internal error: %s"
-msgstr "Унутрашња грешка"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:520
-#, fuzzy
-msgid "Could not parse response"
-msgstr "Не могу рашчланити: %s"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1304
-#, fuzzy
-msgid "Please enter proxy password"
-msgstr "Лозинка HTTP посредника"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-#, fuzzy
-msgid "Could not create request"
-msgstr "Не могу рашчланити: %s"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr ""
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr ""
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr ""
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr ""
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Мрежа"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-#, fuzzy
-msgid "Operation failed"
-msgstr "Радња је обустављена"
-
-#: ../daemon/gvfsbackendftp.c:264
-#, fuzzy
-msgid "No space left on server"
-msgstr "Нема више простора на уређају"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-#, fuzzy
-msgid "Operation unsupported"
-msgstr "Радња је заустављена"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-#, fuzzy
-msgid "Permission denied"
-msgstr "Пристип одбијен"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Неисправно име датотеке"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-#, fuzzy
-msgid "Invalid reply"
-msgstr "Неисправна адреса"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr ""
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr ""
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-#, fuzzy
-msgid "File is directory"
-msgstr "Датотека је празна"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1828
-#, fuzzy
-msgid "filename too long"
-msgstr "Име је предугачко"
-
-#: ../daemon/gvfsbackendftp.c:2345
-#, fuzzy
-msgid "Invalid destination filename"
-msgstr "Неисправно име датотеке"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, fuzzy, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "Неисправно име датотеке"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr ""
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, fuzzy, c-format
-msgid "Digital Camera (%s)"
-msgstr "%s %s дигитални фотоапарат"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, fuzzy, c-format
-msgid "%s Camera"
-msgstr "Фотоапарат"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, fuzzy, c-format
-msgid "%s Audio Player"
-msgstr "%s %s пуштач музике"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Фотоапарат"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-#, fuzzy
-msgid "Audio Player"
-msgstr "%s %s пуштач музике"
-
-# bug: inconsistent wording with above "Bookmark saving failed" [eg. "Failed to save a bookmark" would be one way to solve it]
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-#, fuzzy
-msgid "Failed to get folder list"
-msgstr "Неуспешно отварање датотеке „%s“: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-#, fuzzy
-msgid "Error creating camera"
-msgstr "Грешка при покретању наредбе"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-#, fuzzy
-msgid "Error loading device information"
-msgstr "Грешка при покретању наредбе"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr ""
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-#, fuzzy
-msgid "Error getting file"
-msgstr "Неуспешна пријава"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Није фасцикла"
-
-# bug: inconsistent wording with above "Bookmark saving failed" [eg. "Failed to save a bookmark" would be one way to solve it]
-#: ../daemon/gvfsbackendgphoto2.c:2080
-#, fuzzy
-msgid "Failed to get file list"
-msgstr "Неуспешно отварање датотеке „%s“: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-#, fuzzy
-msgid "Error creating directory"
-msgstr "Није фасцикла"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-#, fuzzy
-msgid "Name already exists"
-msgstr "Датотека постоји"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-#, fuzzy
-msgid "New name too long"
-msgstr "Име је предугачко"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, fuzzy, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Директоријум није празан"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-#, fuzzy
-msgid "Error deleting directory"
-msgstr "Није фасцикла"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-#, fuzzy
-msgid "Can't write to directory"
-msgstr "Није фасцикла"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-#, fuzzy
-msgid "Not supported (not same directory)"
-msgstr "Није фасцикла"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr ""
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-#, fuzzy
-msgid " (invalid encoding)"
-msgstr " (неисправан Уникод)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr ""
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows мрежа"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-#, fuzzy
-msgid "Local Network"
-msgstr "Мрежа"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr ""
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr ""
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:296
-#, fuzzy
-msgid "Hostname not known"
-msgstr "Име рачунара није исправно"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:860
-#, fuzzy
-msgid "Enter password"
-msgstr "Лозинка HTTP посредника"
-
-#: ../daemon/gvfsbackendsftp.c:921
-#, fuzzy
-msgid "Can't send password"
-msgstr "Не могу да пошаљем лозинку процесу који прикључује"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Ипак се пријави"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Откажи пријаву"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, fuzzy, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Ово се догађа када се по први пут пријавите на рачунар.\n"
-"\n"
-"Идентитет који је послао удаљени рачунар је %s. Уколико желите да будете "
-"потпуно сигурни да је безбедно да наставите, ступите у везу са "
-"администратором система."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Грешка у протоколу"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1543
-#, fuzzy
-msgid "Unable to find supported ssh command"
-msgstr "Неуспешно покретање наредбе"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-#, fuzzy
-msgid "Failure"
-msgstr "Датотеке"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-#, fuzzy
-msgid "Invalid reply received"
-msgstr "Неисправни параметри"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr ""
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, fuzzy, c-format
-msgid "Internal Error (%s)"
-msgstr "Унутрашња грешка"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-#, fuzzy
-msgid "Failed to mount Windows share"
-msgstr "Не могу да одспојим прикључени сервер"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-#, fuzzy
-msgid "Unsupported seek type"
-msgstr "Операција није подржана"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, fuzzy, c-format
-msgid "Error moving file: %s"
-msgstr "Неуспешно чување обележивача (%s)"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1928
-#, fuzzy
-msgid "Windows Shares Filesystem Service"
-msgstr "Дељени Windows диск"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, fuzzy, c-format
-msgid "Windows shares on %s"
-msgstr "Дељени Windows диск"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-#, fuzzy
-msgid "Windows Network Filesystem Service"
-msgstr "Windows мрежа"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr ""
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr ""
-
-#: ../daemon/gvfsbackendtrash.c:1330
-#, fuzzy
-msgid "Can't delete trash"
-msgstr "Баратај trash адресама"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr ""
-
-#: ../daemon/gvfsdaemon.c:1032
-#, fuzzy
-msgid "Invalid backend type"
-msgstr "Неисправни параметри"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr ""
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr ""
-
-#: ../daemon/gvfsjobsetattribute.c:120
-#, fuzzy
-msgid "Invalid dbus message"
-msgstr "Неисправно име датотеке"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr ""
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr ""
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr ""
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr ""
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr ""
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr ""
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr ""
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr ""
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr ""
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr ""
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr ""
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-#, fuzzy
-msgid "HDDVD"
-msgstr "ДВД"
-
-#: ../monitor/hal/ghaldrive.c:158
-#, fuzzy
-msgid "HDDVD-r"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:160
-#, fuzzy
-msgid "HDDVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr ""
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s диск"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s диск"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Дискета"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "УСБ диск"
-
-#: ../monitor/hal/ghaldrive.c:192
-#, fuzzy
-msgid "ATA Drive"
-msgstr "Уређај"
-
-#: ../monitor/hal/ghaldrive.c:194
-#, fuzzy
-msgid "SCSI Drive"
-msgstr "УСБ диск"
-
-#: ../monitor/hal/ghaldrive.c:196
-#, fuzzy
-msgid "FireWire Drive"
-msgstr "Зип диск"
-
-#: ../monitor/hal/ghaldrive.c:200
-#, fuzzy
-msgid "Tape Drive"
-msgstr "Зип диск"
-
-#: ../monitor/hal/ghaldrive.c:202
-#, fuzzy
-msgid "CompactFlash Drive"
-msgstr "Компактни-флеш диск (CF)"
-
-# Чаробни штапић? :)
-#: ../monitor/hal/ghaldrive.c:204
-#, fuzzy
-msgid "MemoryStick Drive"
-msgstr "Меморијски штапић"
-
-#: ../monitor/hal/ghaldrive.c:206
-#, fuzzy
-msgid "SmartMedia Drive"
-msgstr "Мудри носач (SM)"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC носач"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Зип диск"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Џез диск"
-
-#: ../monitor/hal/ghaldrive.c:214
-#, fuzzy
-msgid "Thumb Drive"
-msgstr "%s диск"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, fuzzy, c-format
-msgid "%.1f kB"
-msgstr "%.1f КБ"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f МБ"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f ГБ"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-#, fuzzy
-msgid "Mixed Audio/Data Disc"
-msgstr "Звучни диск"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, fuzzy, c-format
-msgid "%s Media"
-msgstr "Мудри носач (SM)"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr ""
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Обичан диск"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-#, fuzzy
-msgid "Blank CD-ROM Disc"
-msgstr "Празан једном-уписив диск"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Једном-уписив диск"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Празан једном-уписив диск"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Пиши-бриши диск"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Празан пиши-бриши диск"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Обичан ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-#, fuzzy
-msgid "Blank DVD-ROM Disc"
-msgstr "Празан - ДВД меморијски диск"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Меморијски - ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Празан - ДВД меморијски диск"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Пиши-бриши ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Празан пиши-бриши ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Једном уписиви + ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Празан једном уписиви + ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Пиши+бриши ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Празан пиши+бриши ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-#, fuzzy
-msgid "DVD+R DL Disc"
-msgstr "Једном уписиви + ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-#, fuzzy
-msgid "Blank DVD+R DL Disc"
-msgstr "Празан једном уписиви + ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-#, fuzzy
-msgid "Blu-Ray Disc"
-msgstr "Празан једном-уписив диск"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-#, fuzzy
-msgid "Blank Blu-Ray Disc"
-msgstr "Празан једном-уписив диск"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-#, fuzzy
-msgid "Blu-Ray R Disc"
-msgstr "Празан једном-уписив диск"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-#, fuzzy
-msgid "Blank Blu-Ray R Disc"
-msgstr "Празан једном-уписив диск"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-#, fuzzy
-msgid "Blu-Ray RW Disc"
-msgstr "Празан пиши-бриши диск"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-#, fuzzy
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Празан пиши-бриши диск"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-#, fuzzy
-msgid "HD DVD Disc"
-msgstr "Једном уписиви - ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-#, fuzzy
-msgid "Blank HD DVD Disc"
-msgstr "Празан једном уписиви - ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-#, fuzzy
-msgid "HD DVD-R Disc"
-msgstr "Једном уписиви - ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-#, fuzzy
-msgid "Blank HD DVD-R Disc"
-msgstr "Празан једном уписиви - ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-#, fuzzy
-msgid "HD DVD-RW Disc"
-msgstr "Пиши-бриши ДВД диск"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-#, fuzzy
-msgid "Blank HD DVD-RW Disc"
-msgstr "Празан пиши-бриши ДВД диск"
-
-# bug: Compact Disk Disk?
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-#, fuzzy
-msgid "MO Disc"
-msgstr "ЦД диск"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-#, fuzzy
-msgid "Blank MO Disc"
-msgstr "Празан једном-уписив диск"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-#, fuzzy
-msgid "Disc"
-msgstr "Диск"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-#, fuzzy
-msgid "Blank Disc"
-msgstr "Празан једном-уписив диск"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr ""
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr ""
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-
-#~ msgid "ISO 9660 Volume"
-#~ msgstr "ИСО 9660 диск"
-
-#~ msgid "%s:%u contains NUL characters."
-#~ msgstr "%s:%u садржи NUL знакове."
-
-#~ msgid "%s:%u contains no method name."
-#~ msgstr "%s:%u не садржи име метода."
-
-#~ msgid "%s:%u has no options endmarker."
-#~ msgstr "%s:%u не садржи ознаку краја опција."
-
-#~ msgid "%s:%u has unknown options %s."
-#~ msgstr "%s:%u користи непознате опције %s."
-
-#~ msgid "%s:%u contains no module name."
-#~ msgstr "%s:%u не садржи име модула."
-
-#~ msgid "Configuration file `%s' was not found: %s"
-#~ msgstr "Датотека са подешавањима „%s“ није нађена: %s"
-
-#~ msgid "%s:%d aborted parsing."
-#~ msgstr "%s:%d је прекинуо рашчлањивање."
-
-#~ msgid "AFFS Volume"
-#~ msgstr "AFFS диск"
-
-#~ msgid "AFS Network Volume"
-#~ msgstr "Мрежни AFS диск"
-
-#~ msgid "Auto-detected Volume"
-#~ msgstr "Самопрепознати диск"
-
-#~ msgid "CD-ROM Drive"
-#~ msgstr "ЦД уређај"
-
-#~ msgid "CD Digital Audio"
-#~ msgstr "Музички диск"
-
-# bug(slobo): хм, не бих рекао
-#~ msgid "Hardware Device Volume"
-#~ msgstr "Диск на хардверском уређају"
-
-#~ msgid "EncFS Volume"
-#~ msgstr "EncFS диск"
-
-# bug: does it differentiate between Hurd Ext2 and Linux Ext2?
-#~ msgid "Ext2 Linux Volume"
-#~ msgstr "Линукс Ext2 диск"
-
-#~ msgid "Ext3 Linux Volume"
-#~ msgstr "Линукс Ext3 диск"
-
-#~ msgid "MSDOS Volume"
-#~ msgstr "МСДОС диск"
-
-#~ msgid "BSD Volume"
-#~ msgstr "БСД диск"
-
-#~ msgid "FUSE Volume"
-#~ msgstr "ФУСЕ јединица"
-
-#~ msgid "MacOS Volume"
-#~ msgstr "МекОС диск"
-
-# ЦеДе диск, а не „Компактни диск диск“
-#~ msgid "CDROM Volume"
-#~ msgstr "ЦД јединица"
-
-#~ msgid "Hsfs CDROM Volume"
-#~ msgstr "Hsfs ЦД јединица"
-
-#~ msgid "JFS Volume"
-#~ msgstr "ЈФС диск"
-
-#~ msgid "Windows NT Volume"
-#~ msgstr "Windows NT диск"
-
-#~ msgid "System Volume"
-#~ msgstr "Системски диск"
-
-#~ msgid "Memory Volume"
-#~ msgstr "Меморијски диск"
-
-#~ msgid "Minix Volume"
-#~ msgstr "Миникс диск"
-
-#~ msgid "NFS Network Volume"
-#~ msgstr "Диск мрежног система датотека"
-
-#~ msgid "Netware Volume"
-#~ msgstr "Netware диск"
-
-#~ msgid "Reiser4 Linux Volume"
-#~ msgstr "Линукс Рајзер4 диск"
-
-#~ msgid "ReiserFS Linux Volume"
-#~ msgstr "Линукс РајзерФС диск"
-
-#~ msgid "SuperMount Volume"
-#~ msgstr "SuperMount диск"
-
-#~ msgid "DVD Volume"
-#~ msgstr "ДВД јединица"
-
-#~ msgid "Solaris/BSD Volume"
-#~ msgstr "Соларис/БСД диск"
-
-#~ msgid "Udfs Solaris Volume"
-#~ msgstr "Соларис Udfs диск"
-
-#~ msgid "Pcfs Solaris Volume"
-#~ msgstr "Соларис Pcfs диск"
-
-#~ msgid "Sun SAM-QFS Volume"
-#~ msgstr "Sun SAM-QFS диск"
-
-#~ msgid "Temporary Volume"
-#~ msgstr "Привремени диск"
-
-#~ msgid "Enhanced DOS Volume"
-#~ msgstr "Унапређени DOS диск"
-
-#~ msgid "Windows VFAT Volume"
-#~ msgstr "Windows VFAT диск"
-
-#~ msgid "Xenix Volume"
-#~ msgstr "Xenix диск"
-
-#~ msgid "XFS Linux Volume"
-#~ msgstr "Линукс XFS диск"
-
-#~ msgid "XIAFS Volume"
-#~ msgstr "XIAFS диск"
-
-#~ msgid "CIFS Volume"
-#~ msgstr "CIFS диск"
-
-#~ msgid "Unknown"
-#~ msgstr "Непознат"
-
-#~ msgid "%s Volume"
-#~ msgstr "%s диск"
-
-# :)
-#~ msgid "Pen Drive"
-#~ msgstr "Оловкасти диск"
-
-#~ msgid "External %s"
-#~ msgstr "Спољни %s"
-
-#~ msgid "%s Removable Volume"
-#~ msgstr "Уклоњиви %s диск"
-
-#~ msgid "Volume"
-#~ msgstr "Диск"
-
-#~ msgid "Unknown operation type %u"
-#~ msgstr "Непознат тип операције %u"
-
-#~ msgid "Cannot create pipe for open GIOChannel: %s"
-#~ msgstr "Не могу направити цевку за отворени GIOChannel: %s"
-
-#~ msgid "Unknown job kind %u"
-#~ msgstr "Непозната врста посла %u"
-
-#~ msgid ""
-#~ "Deprecated function. User modifications to the MIME database are no "
-#~ "longer supported."
-#~ msgstr ""
-#~ "Превазиђена функција. Измене корисника у МИМЕ бази више нису подржане."
-
-#~ msgid "More parsing errors will be ignored."
-#~ msgstr "Остале грешке у обради ће бити занемарене."
-
-#~ msgid "No error"
-#~ msgstr "Нема грешке"
-
-#~ msgid "File not found"
-#~ msgstr "Датотека није нађена"
-
-#~ msgid "Generic error"
-#~ msgstr "Општа грешка"
-
-#~ msgid "I/O error"
-#~ msgstr "У/И грешка"
-
-#~ msgid "Data corrupted"
-#~ msgstr "Подаци оштећени"
-
-#~ msgid "Format not valid"
-#~ msgstr "Облик није исправан"
-
-# bug: is file handle the same as file descriptor?
-#~ msgid "Bad file handle"
-#~ msgstr "Лоша ручка датотеке"
-
-#~ msgid "File too big"
-#~ msgstr "Датотека је превелика"
-
-#~ msgid "Read-only file system"
-#~ msgstr "Систем датотека само за читање"
-
-#~ msgid "File not open"
-#~ msgstr "Датотека није отворена"
-
-#~ msgid "Open mode not valid"
-#~ msgstr "Начин отварања није исправан"
-
-#~ msgid "Too many open files"
-#~ msgstr "Превише отворених датотека"
-
-#~ msgid "Operation in progress"
-#~ msgstr "Операција у току"
-
-#~ msgid "Operation interrupted"
-#~ msgstr "Операција прекинута"
-
-#~ msgid "Looping links encountered"
-#~ msgstr "Пронађене кружне везе"
-
-#~ msgid "Is a directory"
-#~ msgstr "Јесте фасцикла"
-
-#~ msgid "Not enough memory"
-#~ msgstr "Нема довољно меморије"
-
-#~ msgid "Host not found"
-#~ msgstr "Рачунар није нађен"
-
-#~ msgid "Host has no address"
-#~ msgstr "Рачунар нема адресу"
-
-#~ msgid "Directory busy"
-#~ msgstr "Заузет директоријум"
-
-#~ msgid "Too many links"
-#~ msgstr "Превише веза"
-
-#~ msgid "Read only file system"
-#~ msgstr "Неуписив систем датотека"
-
-#~ msgid "Not on the same file system"
-#~ msgstr "Није на истом систему датотека"
-
-#~ msgid "Service not available"
-#~ msgstr "Услуга није доступна"
-
-#~ msgid "Request obsoletes service's data"
-#~ msgstr "Захтев застарева податке услуге"
-
-#~ msgid "No default action associated"
-#~ msgstr "Није додељено уобичајено дејство"
-
-#~ msgid "No handler for URL scheme"
-#~ msgstr "Нема руковаоца за врсту адресе (URL-а)"
-
-#~ msgid "Error parsing command line"
-#~ msgstr "Грешка при читању наредбе"
-
-#~ msgid "Timeout reached"
-#~ msgstr "Достигнут рок"
-
-#~ msgid "Nameserver error"
-#~ msgstr "Грешка са сервером имена"
-
-#~ msgid "The resource is locked"
-#~ msgstr "Ресурс је закључан"
-
-#~ msgid "Function call deprecated"
-#~ msgstr "Позив функције је превазиђен"
-
-#~ msgid "Not a symbolic link"
-#~ msgstr "Није симболичка веза"
-
-#~ msgid "Unknown error"
-#~ msgstr "Непозната грешка"
-
-#~ msgid "%u byte"
-#~ msgid_plural "%u bytes"
-#~ msgstr[0] "%u бајт"
-#~ msgstr[1] "%u бајта"
-#~ msgstr[2] "%u бајтова"
-
-#~ msgid "Floppy"
-#~ msgstr "Дискета"
-
-#~ msgid "CD-ROM/DVD-ROM"
-#~ msgstr "ЦД-РОМ/ДВД-РОМ"
-
-#~ msgid "CD-ROM/DVD-RAM"
-#~ msgstr "ЦД-РОМ/ДВД-РАМ"
-
-#~ msgid "CD-ROM/DVD-R"
-#~ msgstr "ЦД-РОМ/ДВД-Р"
-
-#~ msgid "CD-ROM/DVD-RW"
-#~ msgstr "ЦД-РОМ/ДВД-РВ"
-
-#~ msgid "CD-R/DVD-ROM"
-#~ msgstr "ЦД-Р/ДВД-РОМ"
-
-#~ msgid "CD-R/DVD-RAM"
-#~ msgstr "ЦД-Р/ДВД-РАМ"
-
-#~ msgid "CD-R/DVD-R"
-#~ msgstr "ЦД-Р/ДВД-Р"
-
-#~ msgid "CD-R/DVD-RW"
-#~ msgstr "ЦД-Р/ДВД-РВ"
-
-#~ msgid "CD-RW/DVD-ROM"
-#~ msgstr "ЦД-РВ/ДВД-РОМ"
-
-#~ msgid "CD-RW/DVD-RAM"
-#~ msgstr "ЦД-РВ/ДВД-РАМ"
-
-#~ msgid "CD-RW/DVD-R"
-#~ msgstr "ЦД-РВ/ДВД-Р"
-
-#~ msgid "CD-RW/DVD-RW"
-#~ msgstr "ЦД-РВ/ДВД-РВ"
-
-#~ msgid "IEEE1394 Drive"
-#~ msgstr "ИЕЕЕ1394 диск"
-
-#~ msgid "CF"
-#~ msgstr "CF"
-
-#~ msgid "SD/MMC"
-#~ msgstr "SD/MMC"
-
-# Чаробни штапић? :)
-#~ msgid "Memory Stick"
-#~ msgstr "Меморијски штапић"
-
-#~ msgid "Root Volume"
-#~ msgstr "Корени диск"
-
-#~ msgid "Audio CD"
-#~ msgstr "Музички диск"
-
-#~ msgid "Unknown volume"
-#~ msgstr "Непознати диск"
-
-#~ msgid "Network server"
-#~ msgstr "Мрежни сервер"
-
-#~ msgid ""
-#~ "Unable to mount the floppy drive. There is probably no floppy in the "
-#~ "drive."
-#~ msgstr "Не могу да прикључим дискету. Вероватно дискета није у уређају. "
-
-#~ msgid ""
-#~ "Unable to mount the volume. There is probably no media in the device."
-#~ msgstr "Не могу да прикључим диск. Вероватно нема носача у уређају. "
-
-#~ msgid ""
-#~ "Unable to mount the floppy drive. The floppy is probably in a format that "
-#~ "cannot be mounted."
-#~ msgstr ""
-#~ "Не могу да прикључим дискету. Вероватно је дискета у запису који се не "
-#~ "може читати."
-
-#~ msgid ""
-#~ "Unable to mount the volume. If this is an encrypted drive, then the wrong "
-#~ "password or key was used."
-#~ msgstr ""
-#~ "Не могу да прикључим диск. Ако је он шифрован, тада је била искоришћена "
-#~ "погрешна лозинка или кључ."
-
-#~ msgid ""
-#~ "Unable to mount the selected volume. The volume is probably in a format "
-#~ "that cannot be mounted."
-#~ msgstr ""
-#~ "Не могу да прикључим изабрани диск. Вероватно је диск у запису који се не "
-#~ "може читати."
-
-#~ msgid "Unable to mount the selected floppy drive."
-#~ msgstr "Не могу да прикључим изабрану дискету."
-
-#~ msgid "Unable to mount the selected volume."
-#~ msgstr "Не могу да прикључим изабрани диск."
-
-#~ msgid ""
-#~ "Unable to unmount the selected volume. The volume is in use by one or "
-#~ "more programs."
-#~ msgstr ""
-#~ "Не могу да одспојим изабрани диск. Њега вероватно користи неки програм "
-#~ "или програми."
-
-#~ msgid "Unable to unmount the selected volume."
-#~ msgstr "Не могу да одспојим изабрани диск."
-
-#~ msgid "Failed to read data from child process %d (%s)"
-#~ msgstr "Неуспешно читање датотеке из наследног процеса %d (%s)"
-
-#~ msgid "Couldn't run mount process in a pty"
-#~ msgstr "Не могу да покренем процес прикључења у лажном терминалу"
-
-#~ msgid "Unexpected error in select() reading data from a child process (%s)"
-#~ msgstr ""
-#~ "Неочекивана грешка у функцији select() при читању података у наследном "
-#~ "процесу (%s)"
-
-#~ msgid "Unexpected error in waitpid() (%s)"
-#~ msgstr "Неочекивана грешка унутар извршења функције waitpid() (%s)"
-
-#~ msgid "Unable to eject media"
-#~ msgstr "Не могу да избацим носач"
-
-#~ msgid "Home"
-#~ msgstr "Лични"
-
-#~ msgid "Unknown GnomeVFSSeekPosition %d"
-#~ msgstr "Непознато GnomeVFSSeekPosition %d"
-
-#~ msgid "The identity of the remote computer (%s) is unknown."
-#~ msgstr "Идентитет удаљеног рачунара (%s) није познат."
-
-#~ msgid "Didn't find a valid settings file at %s\n"
-#~ msgstr "Нисам нашао исправну датотеку са подешавањима у %s\n"
-
-#~ msgid "Use the %s environment variable to specify a different location.\n"
-#~ msgstr "Користите променљиву окружења %s да назначите другу путању.\n"
-
-#~ msgid "Your HTTP Proxy requires you to log in.\n"
-#~ msgstr "Ваш ХТТП посредник захтева пријаву.\n"
-
-#~ msgid ""
-#~ "You must log in to access \"%s\".\n"
-#~ "%s"
-#~ msgstr ""
-#~ "Морате се пријавити како бисте приступили „%s“.\n"
-#~ "%s"
-
-#~ msgid "Your password will be transmitted unencrypted."
-#~ msgstr "Лозинка ће бити пренета незаштићена."
-
-#~ msgid "Your password will be transmitted encrypted."
-#~ msgstr "Лозинка ће бити шифрована пре преноса."
-
-#~ msgid "You must log in to access %s domain %s\n"
-#~ msgstr "Морате се пријавити како бисте приступили %s, домен %s\n"
-
-#~ msgid "You must log in to access %s\n"
-#~ msgstr "Морате се пријавити како бисте приступили %s\n"
-
-#~ msgid "Default component viewer application"
-#~ msgstr "Подразумевани програм за преглед делова"
-
-#~ msgid "Default terminal application"
-#~ msgstr "Подразумевани терминалски програм"
-
-# bug: no slang, s/exec/execut.../?
-#~ msgid "Exec argument for default terminal"
-#~ msgstr "Аргумент извршавања за подразумевани терминал"
-
-#~ msgid ""
-#~ "The application to use for viewing files that require a component to view "
-#~ "them. The parameter %s will be replaced by the file's URIs, the parameter "
-#~ "%c will be replaced by the component IID."
-#~ msgstr ""
-#~ "Програм који се користи за прегледање датотека које захтевају компоненту "
-#~ "за преглед. Параметар %s ће бити замењен адресом датотеке, а параметар %c "
-#~ "ће бити замењен IID-ом компоненте."
-
-#~ msgid ""
-#~ "The default terminal application to use for applications that require a "
-#~ "terminal."
-#~ msgstr ""
-#~ "Подразумевани терминалски програм који се користи за програме којима је "
-#~ "неопходан терминал."
-
-# bug: no slang, s/exec/execute.../?
-#~ msgid "The exec argument to use for the default terminal application."
-#~ msgstr "Аргумент извршавања за подразумевани терминалски програм."
-
-#~ msgid "Run the command in a terminal"
-#~ msgstr "Покрени наредбу у терминалу"
-
-#~ msgid "The command used to handle \"aim\" URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „aim“ адресама, ако је укључено."
-
-#~ msgid "The command used to handle \"callto\" URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „callto“ адресама, ако је укључено."
-
-#~ msgid "The command used to handle \"ghelp\" URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „ghelp“ адресама, ако је укључено."
-
-#~ msgid "The command used to handle \"h323\" URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „h323“ адресама, ако је укључено."
-
-#~ msgid "The command used to handle \"http\" URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „http“ адресама, ако је укључено."
-
-#~ msgid "The command used to handle \"https\" URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „https“ адресама, ако је укључено."
-
-#~ msgid "The command used to handle \"info\" URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „info“ адресама, ако је укључено."
-
-#~ msgid "The command used to handle \"mailto\" URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „mailto“ адресама, ако је укључено."
-
-#~ msgid "The command used to handle \"man\" URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „man“ адресама, ако је укључено."
-
-#~ msgid "The command used to handle \"trash\" URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „trash“ адресама, ако је укључено."
-
-#~ msgid "The handler for \"aim\" URLs"
-#~ msgstr "Руковаоц „aim“ адресама"
-
-#~ msgid "The handler for \"callto\" URLs"
-#~ msgstr "Руковаоц „callto“ адресама"
-
-#~ msgid "The handler for \"ghelp\" URLs"
-#~ msgstr "Руковаоц „ghelp“ адресама"
-
-#~ msgid "The handler for \"h323\" URLs"
-#~ msgstr "Руковаоц „h323“ адресама"
-
-#~ msgid "The handler for \"http\" URLs"
-#~ msgstr "Руковаоц „http“ адресама"
-
-#~ msgid "The handler for \"https\" URLs"
-#~ msgstr "Руковаоц „https“ адресама"
-
-#~ msgid "The handler for \"info\" URLs"
-#~ msgstr "Руковаоц „info“ адресама"
-
-#~ msgid "The handler for \"mailto\" URLs"
-#~ msgstr "Руковаоц „mailto“ адресама"
-
-#~ msgid "The handler for \"man\" URLs"
-#~ msgstr "Руковаоц „man“ адресама"
-
-#~ msgid "The handler for \"trash\" URLs"
-#~ msgstr "Руковаоц „trash“ адресама"
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"aim"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„aim“ адресе."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle "
-#~ "\"callto\" URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„callto“ адресе."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"ghelp"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„ghelp“ адресе."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"h323"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„h323“ адресе."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"http"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„http“ адресе."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"https"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„https“ адресе."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"info"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„info“ адресе."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle "
-#~ "\"mailto\" URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„mailto“ адресе."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"man"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„man“ адресе."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"trash"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„trash“ адресе."
-
-#~ msgid ""
-#~ "True if the command used to handle this type of URL should be run in a "
-#~ "terminal."
-#~ msgstr ""
-#~ "Укључено ако наредба која се користи за ове адресе треба да се покреће у "
-#~ "терминалу."
-
-#~ msgid "Whether the specified command should handle \"aim\" URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „aim“ адресе."
-
-#~ msgid "Whether the specified command should handle \"callto\" URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „callto“ адресе."
-
-#~ msgid "Whether the specified command should handle \"ghelp\" URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „ghelp“ адресе."
-
-#~ msgid "Whether the specified command should handle \"h323\" URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „h323“ адресе."
-
-#~ msgid "Whether the specified command should handle \"http\" URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „http“ адресе."
-
-#~ msgid "Whether the specified command should handle \"https\" URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „https“ адресе."
-
-#~ msgid "Whether the specified command should handle \"info\" URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „info“ адресе."
-
-#~ msgid "Whether the specified command should handle \"mailto\" URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „mailto“ адресе."
-
-#~ msgid "Whether the specified command should handle \"man\" URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „man“ адресе."
-
-#~ msgid "Whether the specified command should handle \"trash\" URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „trash“ адресе."
-
-#~ msgid ""
-#~ "Comma separated list of DNS-SD domains that should be visible in the "
-#~ "\"network:///\" location."
-#~ msgstr ""
-#~ "Запетом раздвојен списак DNS-SD домена који су доступни на путањи "
-#~ "„network:///."
-
-#~ msgid "Extra domains to look for DNS-SD services in"
-#~ msgstr "Допунски домени на којима да тражи DNS-SD услуге"
-
-#~ msgid "How to display local DNS-SD service"
-#~ msgstr "Како да приказује локалну DNS-SD услугу"
-
-#~ msgid "Possible values are \"merged\", \"separate\" and \"disabled\"."
-#~ msgstr ""
-#~ "Допуштене вредности су „merged“ (спојено), „separate“ (раздвојено) и "
-#~ "„disabled“ (искључено)."
-
-#~ msgid "Authenticate proxy server connections"
-#~ msgstr "Идентификуј везе са посредничким сервером"
-
-#~ msgid "Automatic proxy configuration URL"
-#~ msgstr "Адреса за самоподешавање посредника"
-
-#~ msgid "Enables the proxy settings when accessing HTTP over the Internet."
-#~ msgstr "Укључује подешавања посредника при приступу вебу преко Интернета."
-
-#~ msgid "FTP proxy host name"
-#~ msgstr "Име FTP посредника"
-
-#~ msgid "FTP proxy port"
-#~ msgstr "Порт FTP посредника"
-
-#~ msgid "HTTP proxy host name"
-#~ msgstr "Име HTTP посредника"
-
-#~ msgid "HTTP proxy port"
-#~ msgstr "Порт HTTP посредника"
-
-#~ msgid "HTTP proxy username"
-#~ msgstr "Корисник HTTP посредника"
-
-#~ msgid ""
-#~ "If true, then connections to the proxy server require authentication. The "
-#~ "username/password combo is defined by \"/system/http_proxy/"
-#~ "authentication_user\" and \"/system/http_proxy/authentication_password\"."
-#~ msgstr ""
-#~ "Уколико је постављено, везе са посредничким сервером се идентификују. Пар "
-#~ "корисник/лозинка се узима из „/system/http_proxy/authentication_user“ и „/"
-#~ "system/http_proxy/authentication_password“."
-
-#~ msgid "Non-proxy hosts"
-#~ msgstr "Беспосредничке адресе"
-
-#~ msgid "Password to pass as authentication when doing HTTP proxying."
-#~ msgstr "Лозинка која се користи за идентификацију код веб посредника."
-
-#~ msgid "Proxy configuration mode"
-#~ msgstr "Начин подешавања посредника"
-
-#~ msgid "SOCKS proxy host name"
-#~ msgstr "Име SOCKS посредника"
-
-#~ msgid "SOCKS proxy port"
-#~ msgstr "Порт SOCKS посредника"
-
-#~ msgid "Secure HTTP proxy host name"
-#~ msgstr "Име безбедног HTTP посредника"
-
-#~ msgid "Secure HTTP proxy port"
-#~ msgstr "Порт безбедног HTTP посредника"
-
-#~ msgid ""
-#~ "Select the proxy configuration mode. Supported values are \"none\", "
-#~ "\"manual\", \"auto\"."
-#~ msgstr ""
-#~ "Изаберите режим подешавања посредника. Допуштене вредности су „none“, "
-#~ "„manual“ и „auto“."
-
-#~ msgid "The machine name to proxy FTP through."
-#~ msgstr "Име рачунара за FTP посредовање."
-
-#~ msgid "The machine name to proxy HTTP through."
-#~ msgstr "Име рачунара за веб (HTTP) посредовање."
-
-#~ msgid "The machine name to proxy secure HTTP through."
-#~ msgstr "Име рачунара за безбедно веб (HTTPS) посредовање."
-
-# bug: s/socks/SOCKS/
-#~ msgid "The machine name to proxy socks through."
-#~ msgstr "Име рачунара за SOCKS посредовање."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/http_proxy/host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Порт рачунара датог у „/system/http_proxy/host“ кроз који посредује."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/proxy/ftp_host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Порт рачунара датог у „/system/proxy/ftp_proxy“ кроз који посредује."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/proxy/secure_host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Порт рачунара датог у „/system/proxy/secure_proxy“ кроз који посредује."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/proxy/socks_host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Порт машине одређене помоћу „/system/proxy/socks_proxy“ која је посредник."
-
-#~ msgid ""
-#~ "This key contains a list of hosts which are connected to directly, rather "
-#~ "than via the proxy (if it is active). The values can be hostnames, "
-#~ "domains (using an initial wildcard like *.foo.com), IP host addresses "
-#~ "(both IPv4 and IPv6) and network addresses with a netmask (something like "
-#~ "192.168.0.0/24)."
-#~ msgstr ""
-#~ "Овај кључ садржи списак рачунара који су непосредно повезани, уместо "
-#~ "путем посредника (уколико је у дејству). Ове вредности могу бити имена "
-#~ "рачунара, домени (помоћу почетних навода као што је *.нешто.ију), ИП "
-#~ "адресе рачунара (било ИП4 било ИП6) и адресе мрежа уз мрежну маску (нешто "
-#~ "као што је 192.168.0.0/24)."
-
-#~ msgid "URL that provides proxy configuration values."
-#~ msgstr "Адреса која обезбеђује вредности за подешавање посредника."
-
-#~ msgid "Use HTTP proxy"
-#~ msgstr "Користи веб посредника"
-
-#~ msgid "User name to pass as authentication when doing HTTP proxying."
-#~ msgstr "Корисничко име које се шаље при идентификацији код веб посредника."
-
-#~ msgid "SMB workgroup"
-#~ msgstr "СМБ радна група"
-
-#~ msgid ""
-#~ "The Windows networking workgroup or domain that the user is part of. In "
-#~ "order for a new workgroup to fully take effect the user may need to log "
-#~ "out and log back in."
-#~ msgstr ""
-#~ "Радна група или домен Windows мреже чији је корисник члан. Да би нова "
-#~ "радна група узела маха корисник ће можда морати да се одјави и поново "
-#~ "пријави."
-
-# Гномов Виртуелни Систем Датотека — ВСД? Или Гномово „опонашање система датотека“ — ОСД?
-#~ msgid "Could not initialize gnome vfs"
-#~ msgstr "Не могу да покренем Гномово опонашање система датотека"
-
-#~ msgid "Standard Moniker factory"
-#~ msgstr "Производња обичног надимка"
-
-#~ msgid "file MonikerExtender"
-#~ msgstr "датотека MonikerExtender"
-
-#~ msgid "generic Gnome VFS moniker"
-#~ msgstr "основни надимак Гномовог опонашавача система датотека"
-
-#~ msgid "generic file moniker"
-#~ msgstr "основни надимак датотеке"
-
-#~ msgid "Display SCSI drives"
-#~ msgstr "Прикажи SCSI уређаје"
-
-#~ msgid "Display SCSI optical drives"
-#~ msgstr "Прикажи оптичке SCSI уређаје"
-
-#~ msgid "Display drives with removable media"
-#~ msgstr "Прикажи уређаје са уклоњивим носачима"
-
-#~ msgid "Display external drives"
-#~ msgstr "Прикажи спољашње уређаје"
-
-#~ msgid "Display internal hard drives"
-#~ msgstr "Прикажи унутрашње тврде дискове"
-
-#~ msgid ""
-#~ "Whether to display SCSI optical drives even if /system/storage/"
-#~ "display_scsi_drives is set to FALSE."
-#~ msgstr ""
-#~ "Да ли да приказује оптичке SCSI уређаје чак и ако је /system/storage/"
-#~ "display_scsi_drives искључен."
-
-#~ msgid "Whether to display drives and mountable volumes from SCSI drives."
-#~ msgstr "Да ли да приказује уређаје и прикључиве дискове са SCSI уређаја."
-
-#~ msgid ""
-#~ "Whether to display drives and mountable volumes from drives with "
-#~ "removable media (e.g. drives where media can be inserted and removed)."
-#~ msgstr ""
-#~ "Да ли да приказује уређаје и прикључиве дискове са уређаја са уклоњивим "
-#~ "носачима (нпр. уређаји где се носач може убацити и избацити)."
-
-# bug: hotpluggable is technobabble, second part of "eg." should be enough
-#~ msgid ""
-#~ "Whether to display drives and mountable volumes from external drives (e."
-#~ "g. drives that are hotpluggable; e.g. drives that can be attached and "
-#~ "detached while the system is running)."
-#~ msgstr ""
-#~ "Да ли да приказује уређаје и прикључиве дискове са спољашњих уређаја "
-#~ "(нпр. уређаји који се могу прикључити у току рада)."
-
-#~ msgid ""
-#~ "Whether to display drives and mountable volumes from internal hard drives "
-#~ "(non-SCSI optical drives are always shown)."
-#~ msgstr ""
-#~ "Да ли да приказује уређаје и прикључиве дискове са унутрашњих тврдих "
-#~ "дискова (отпички не-SCSI дискови се увек приказују)."
-
-#~ msgid "The window workgroup the user is part of"
-#~ msgstr "Виндоуз радна група које је корисник члан"
-
-#~ msgid "Optical Disc"
-#~ msgstr "Оптички диск"
-
-# Чаробни штапић? :)
-#~ msgid "Memory Stick Media"
-#~ msgstr "Меморијски штапић (MS)"
-
-#~ msgid "Smart Media Media"
-#~ msgstr "Мудри носач (SM)"
-
-#~ msgid "Mac OS disk"
-#~ msgstr "Мекинтош диск"
-
-#~ msgid "Mac OS X disk"
-#~ msgstr "Мекинтош ОС-Икс диск"
-
-# Транскрипција на нивоу ;-)
-#~ msgid "Windows Disk"
-#~ msgstr "Виндуз диск"
-
-#~ msgid "Linux Disk"
-#~ msgstr "Линукс диск"
-
-#~ msgid "File could not be opened: %s"
-#~ msgstr "Датотека се не може отворити: %s"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid ""
-#~ "desktop entries contain line '%s' which is not an entry, group, or comment"
-#~ msgstr ""
-#~ "„.desktop“ датотека садржи ред „%s“ који није унос, група ни примедба"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries file does not start with legal start group"
-#~ msgstr "„.desktop“ датотека не почиње са исправном почетном групом"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries contain line '%s' which is not UTF-8"
-#~ msgstr "„.desktop“ датотека садржи ред „%s“ који није УТФ-8"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries contain unknown encoding '%s'"
-#~ msgstr "„.desktop“ датотека користи непознато кодирање „%s“"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries do not have group '%s'"
-#~ msgstr "„.desktop“ датотека нема групу „%s“"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries do not have key '%s'"
-#~ msgstr "„.desktop“ датотека нема кључ „%s“"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid ""
-#~ "desktop entries contain key '%s' which has value that cannot be "
-#~ "interpreted."
-#~ msgstr ""
-#~ "„.desktop“ датотека садржи кључ „%s“ који има вредност која се не може "
-#~ "разумети."
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid ""
-#~ "desktop entries contain no translated value for key '%s' with locale '%s'."
-#~ msgstr ""
-#~ "„.desktop“ датотека не садржи превод вредности кључа „%s“ у локалитету „%"
-#~ "s“."
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries contain invalid escape sequence '%s'"
-#~ msgstr "„.desktop“ датотека садржи неисправан знак за истицање „%s“"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries contain escape character at end of line"
-#~ msgstr ""
-#~ "„.desktop“ датотека садржи неисправан знак за истицање на крају реда"
-
-#~ msgid "Value '%s' cannot be interpreted as a number."
-#~ msgstr "Вредност „%s“ се не може посматрати као број."
-
-#~ msgid "Value '%s' cannot be interpreted as a boolean."
-#~ msgstr "Вредност „%s“ се не може посматрати као истинитосна вредност."
-
-#~ msgid "Applications"
-#~ msgstr "Програми"
-
-#~ msgid "Cards"
-#~ msgstr "Карте"
-
-#~ msgid "Folders"
-#~ msgstr "Фасцикле"
-
-#~ msgid "Help"
-#~ msgstr "Помоћ"
-
-#~ msgid "Hosts"
-#~ msgstr "Рачунари"
-
-#~ msgid "Links"
-#~ msgstr "Везе"
-
-#~ msgid "Mail"
-#~ msgstr "Пошта"
-
-#~ msgid "Tools"
-#~ msgstr "Алати"
-
-#~ msgid "Windows"
-#~ msgstr "Прозори"
-
-# bug: inconsistent with other strings which use "...to handle \"h323\" URLs..."
-#~ msgid "The command used to handle HTTP URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „http“ адресама, ако је укључено."
-
-# bug: inconsistent with other strings which use "...to handle \"h323\" URLs..."
-#~ msgid "The command used to handle HTTPS URLs, if enabled."
-#~ msgstr "Наредба коришћена за баратање „https“ адресама, ако је укључено."
-
-# bug: inconsistent with other strings; should be "The handler for \"http\" URLs"
-#~ msgid "The handler for HTTP URLs"
-#~ msgstr "Руковаоц „http“ адресама"
-
-# bug: inconsistent with other strings; should be "The handler for \"https\" URLs"
-#~ msgid "The handler for HTTPS URLs"
-#~ msgstr "Руковаоц „https“ адресама"
-
-# bug: inconsistent; should be "...should handle \"http\" URLs."
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle HTTP "
-#~ "URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„http“ адресе."
-
-# bug: inconsistent; should be "...should handle \"https\" URLs."
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle HTTPS "
-#~ "URLs."
-#~ msgstr ""
-#~ "Укључено ако наредба наведена у кључу „command“ треба да се користи за "
-#~ "„https“ адресе."
-
-# bug: inconsistent; should be "...should handle \"http\" URLs".
-#~ msgid "Whether the specified command should handle HTTP URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „http“ адресе."
-
-# bug: inconsistent; should be "...should handle \"https\" URLs".
-#~ msgid "Whether the specified command should handle HTTPS URLs"
-#~ msgstr "Да ли наведена наредба треба да се користи за „https“ адресе."
-
-#~ msgid "H323 URL handler"
-#~ msgstr "Руковалац H323 адресама"
-
-#~ msgid "HTTP URL handler"
-#~ msgstr "Руковалац HTTP адресама"
-
-#~ msgid "HTTPS URL handler"
-#~ msgstr "Руковалац HTTPS адресама"
-
-#~ msgid "Handle callto URLs"
-#~ msgstr "Баратај callto адресама"
-
-#~ msgid "Handle ghelp URLs"
-#~ msgstr "Баратај ghelp адресама"
-
-#~ msgid "Handle info URLs"
-#~ msgstr "Баратај info адресама"
-
-#~ msgid "Handle mailto URLs"
-#~ msgstr "Баратај mailto адресама"
-
-#~ msgid "Handle man URLs"
-#~ msgstr "Баратај man адресама"
-
-#~ msgid "callto URL handler"
-#~ msgstr "Руковалац callto адресама"
-
-#~ msgid "ghelp URL handler"
-#~ msgstr "Руковалац ghelp адресама"
-
-#~ msgid "info URL handler"
-#~ msgstr "Руковалац info адресама"
-
-#~ msgid "mailto URL handler"
-#~ msgstr "Руковалац mailto адресама"
-
-#~ msgid "man URL handler"
-#~ msgstr "Руковалац man адресама"
-
-#~ msgid "trash URL handler"
-#~ msgstr "Руковалац trash адресама"
-
-#~ msgid "Could not get information for file '%s': %s"
-#~ msgstr "Не могу да сазнам податке о датотеци „%s“: %s"
-
-# bug: as above [inconsistent wording]
-#~ msgid ""
-#~ "Failed to load image '%s': reason not known, probably a corrupt image file"
-#~ msgstr ""
-#~ "Неуспешно учитавање слике „%s“: разлог непознат, вероватно оштећена "
-#~ "датотека слике"
-
-#~ msgid "How to handle http URLs"
-#~ msgstr "Како баратати http адресама"
-
-#~ msgid "How to handle https URLs"
-#~ msgstr "Како баратати https адресама"
-
-#~ msgid "Set to true to have a program specified in command handle https URLs"
-#~ msgstr ""
-#~ "Укључите ако желите да програм наведен у наредби барата https адресама"
-
-#~ msgid ""
-#~ "Set to true to have a program specified in programs/ghelp handle ghelp "
-#~ "URLs"
-#~ msgstr ""
-#~ "Укључите ако желите да програм наведен у programs/ghelp барата ghelp "
-#~ "адресама"
-
-#~ msgid ""
-#~ "Set to true to have a program specified in programs/info handle info URLs"
-#~ msgstr ""
-#~ "Укључите ако желите да програм наведен у programs/info барата info "
-#~ "адресама"
-
-#~ msgid ""
-#~ "Set to true to have a program specified in programs/man handle man URLs"
-#~ msgstr ""
-#~ "Укључите ако желите да програм наведен у programs/man барата man адресама"
-
-#~ msgid "URL handler for h323 uris"
-#~ msgstr "Руковаоц h323 адресама"
-
-#~ msgid "URL handler for http uris"
-#~ msgstr "Руковаоц http адресама"
-
-#~ msgid "URL handler for https uris"
-#~ msgstr "Руковаоц https адресама"
-
-#~ msgid "Hosts are not contacted via the proxy"
-#~ msgstr "Рачунарима се не приступа преко посредника"
-
-#~ msgid "The machine name to proxy http through."
-#~ msgstr "Име рачунара HTTP посредника."
-
-#~ msgid "Use proxy settings when accessing http"
-#~ msgstr "Користи подешавања посредника при приступу вебу"
-
-#~ msgid "http proxy username"
-#~ msgstr "Корисничко име HTTP посредника"
-
-# bug: plural-forms
-#~ msgid "1 byte"
-#~ msgstr "1 бајт"
diff --git a/po/sr@latin.po b/po/sr@latin.po
deleted file mode 100644
index 786c58c9..00000000
--- a/po/sr@latin.po
+++ /dev/null
@@ -1,2737 +0,0 @@
-# Serbian translation of gnome-vfs
-# Courtesy of Prevod.org team (http://prevod.org/) -- 2003, 2004, 2005, 2006, 2007.
-#
-# This file is distributed under the same license as the gnome-vfs package.
-#
-# Maintainer: Dušan Živojnov <calvin@verat.net>
-# Reviewed on 2004-02-03 by: Danilo Šegan <dsegan@gmx.net>
-# Reviewed on 2005-07-08 by: Danilo Šegan <dsegan@gmx.net>
-# Reviewed on 2005-09-22 by: Danilo Šegan <danilo@prevod.org>
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnome-vfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-14 18:17+0200\n"
-"PO-Revision-Date: 2007-09-06 21:18+0100\n"
-"Last-Translator: Goran Rakić <grakic@devbase.net>\n"
-"Language-Team: Serbian (sr) <gnom@prevod.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr ""
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr ""
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr ""
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr ""
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-#, fuzzy
-msgid "Could not find enclosing mount"
-msgstr "Ne mogu pronaći glavni razgledač"
-
-#: ../client/gdaemonfile.c:1677
-#, fuzzy, c-format
-msgid "Invalid filename %s"
-msgstr "Neispravno ime datoteke"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr ""
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr ""
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-#, fuzzy
-msgid "End of stream"
-msgstr "Kraj datoteke"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-#, fuzzy
-msgid "Operation was cancelled"
-msgstr "Radnja je obustavljena"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr ""
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr ""
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr ""
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr ""
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr ""
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr ""
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr ""
-
-#: ../common/gvfsdaemonprotocol.c:515
-#, fuzzy
-msgid "Invalid file info format"
-msgstr "Neispravno ime datoteke"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr ""
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr ""
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, fuzzy, c-format
-msgid "%s Filesystem Service"
-msgstr "Sistem datoteka"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr ""
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr ""
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr ""
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr ""
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr ""
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr ""
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-#, fuzzy
-msgid "Invalid mount spec"
-msgstr "Neispravni parametri"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, fuzzy, c-format
-msgid "File doesn't exist"
-msgstr "Datoteka postoji"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-#, fuzzy
-msgid "The file is not a directory"
-msgstr "Nije fascikla"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, fuzzy, c-format
-msgid "No such file or directory"
-msgstr "Nije fascikla"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Direktorijum nije prazan"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr ""
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Datoteka postoji"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-#, fuzzy
-msgid "Operation not supported by backend"
-msgstr "Operacija nije dozvoljena"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:886
-#, fuzzy
-msgid "Target file exists"
-msgstr "Datoteka postoji"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-#, fuzzy
-msgid "Cannot initialize libhal"
-msgstr "Ne mogu da pokrenem Bonobo"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr ""
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "Zvučni disk"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, fuzzy, c-format
-msgid "No such file %s on drive %s"
-msgstr "Nema više prostora na uređaju"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr ""
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Sistem datoteka"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-#, fuzzy
-msgid "Can't open directory"
-msgstr "Nije fascikla"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, fuzzy, c-format
-msgid "Internal error: %s"
-msgstr "Unutrašnja greška"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr ""
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:520
-#, fuzzy
-msgid "Could not parse response"
-msgstr "Ne mogu raščlaniti: %s"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1304
-#, fuzzy
-msgid "Please enter proxy password"
-msgstr "Lozinka HTTP posrednika"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-#, fuzzy
-msgid "Could not create request"
-msgstr "Ne mogu raščlaniti: %s"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr ""
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr ""
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr ""
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr ""
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr ""
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Mreža"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-#, fuzzy
-msgid "Operation failed"
-msgstr "Radnja je obustavljena"
-
-#: ../daemon/gvfsbackendftp.c:264
-#, fuzzy
-msgid "No space left on server"
-msgstr "Nema više prostora na uređaju"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-#, fuzzy
-msgid "Operation unsupported"
-msgstr "Radnja je zaustavljena"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-#, fuzzy
-msgid "Permission denied"
-msgstr "Pristip odbijen"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Neispravno ime datoteke"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-#, fuzzy
-msgid "Invalid reply"
-msgstr "Neispravna adresa"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr ""
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr ""
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-#, fuzzy
-msgid "File is directory"
-msgstr "Datoteka je prazna"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr ""
-
-#: ../daemon/gvfsbackendftp.c:1828
-#, fuzzy
-msgid "filename too long"
-msgstr "Ime je predugačko"
-
-#: ../daemon/gvfsbackendftp.c:2345
-#, fuzzy
-msgid "Invalid destination filename"
-msgstr "Neispravno ime datoteke"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, fuzzy, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "Neispravno ime datoteke"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr ""
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, fuzzy, c-format
-msgid "Digital Camera (%s)"
-msgstr "%s %s digitalni fotoaparat"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, fuzzy, c-format
-msgid "%s Camera"
-msgstr "Fotoaparat"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, fuzzy, c-format
-msgid "%s Audio Player"
-msgstr "%s %s puštač muzike"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Fotoaparat"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-#, fuzzy
-msgid "Audio Player"
-msgstr "%s %s puštač muzike"
-
-# bug: inconsistent wording with above "Bookmark saving failed" [eg. "Failed to save a bookmark" would be one way to solve it]
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-#, fuzzy
-msgid "Failed to get folder list"
-msgstr "Neuspešno otvaranje datoteke „%s“: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-#, fuzzy
-msgid "Error creating camera"
-msgstr "Greška pri pokretanju naredbe"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-#, fuzzy
-msgid "Error loading device information"
-msgstr "Greška pri pokretanju naredbe"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr ""
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-#, fuzzy
-msgid "Error getting file"
-msgstr "Neuspešna prijava"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Nije fascikla"
-
-# bug: inconsistent wording with above "Bookmark saving failed" [eg. "Failed to save a bookmark" would be one way to solve it]
-#: ../daemon/gvfsbackendgphoto2.c:2080
-#, fuzzy
-msgid "Failed to get file list"
-msgstr "Neuspešno otvaranje datoteke „%s“: %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-#, fuzzy
-msgid "Error creating directory"
-msgstr "Nije fascikla"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-#, fuzzy
-msgid "Name already exists"
-msgstr "Datoteka postoji"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-#, fuzzy
-msgid "New name too long"
-msgstr "Ime je predugačko"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, fuzzy, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Direktorijum nije prazan"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-#, fuzzy
-msgid "Error deleting directory"
-msgstr "Nije fascikla"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-#, fuzzy
-msgid "Can't write to directory"
-msgstr "Nije fascikla"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-#, fuzzy
-msgid "Not supported (not same directory)"
-msgstr "Nije fascikla"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr ""
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-#, fuzzy
-msgid " (invalid encoding)"
-msgstr " (neispravan Unikod)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr ""
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows mreža"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-#, fuzzy
-msgid "Local Network"
-msgstr "Mreža"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr ""
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr ""
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:296
-#, fuzzy
-msgid "Hostname not known"
-msgstr "Ime računara nije ispravno"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:860
-#, fuzzy
-msgid "Enter password"
-msgstr "Lozinka HTTP posrednika"
-
-#: ../daemon/gvfsbackendsftp.c:921
-#, fuzzy
-msgid "Can't send password"
-msgstr "Ne mogu da pošaljem lozinku procesu koji priključuje"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Ipak se prijavi"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Otkaži prijavu"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, fuzzy, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Ovo se događa kada se po prvi put prijavite na računar.\n"
-"\n"
-"Identitet koji je poslao udaljeni računar je %s. Ukoliko želite da budete "
-"potpuno sigurni da je bezbedno da nastavite, stupite u vezu sa "
-"administratorom sistema."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Greška u protokolu"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:1543
-#, fuzzy
-msgid "Unable to find supported ssh command"
-msgstr "Neuspešno pokretanje naredbe"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-#, fuzzy
-msgid "Failure"
-msgstr "Datoteke"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-#, fuzzy
-msgid "Invalid reply received"
-msgstr "Neispravni parametri"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr ""
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr ""
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, fuzzy, c-format
-msgid "Internal Error (%s)"
-msgstr "Unutrašnja greška"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-#, fuzzy
-msgid "Failed to mount Windows share"
-msgstr "Ne mogu da odspojim priključeni server"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-#, fuzzy
-msgid "Unsupported seek type"
-msgstr "Operacija nije podržana"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, fuzzy, c-format
-msgid "Error moving file: %s"
-msgstr "Neuspešno čuvanje obeleživača (%s)"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmb.c:1928
-#, fuzzy
-msgid "Windows Shares Filesystem Service"
-msgstr "Deljeni Windows disk"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, fuzzy, c-format
-msgid "Windows shares on %s"
-msgstr "Deljeni Windows disk"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr ""
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-#, fuzzy
-msgid "Windows Network Filesystem Service"
-msgstr "Windows mreža"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr ""
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr ""
-
-#: ../daemon/gvfsbackendtrash.c:1330
-#, fuzzy
-msgid "Can't delete trash"
-msgstr "Barataj trash adresama"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr ""
-
-#: ../daemon/gvfsdaemon.c:1032
-#, fuzzy
-msgid "Invalid backend type"
-msgstr "Neispravni parametri"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr ""
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr ""
-
-#: ../daemon/gvfsjobsetattribute.c:120
-#, fuzzy
-msgid "Invalid dbus message"
-msgstr "Neispravno ime datoteke"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr ""
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr ""
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr ""
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr ""
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr ""
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr ""
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr ""
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr ""
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr ""
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr ""
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr ""
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-#, fuzzy
-msgid "HDDVD"
-msgstr "DVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-#, fuzzy
-msgid "HDDVD-r"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:160
-#, fuzzy
-msgid "HDDVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr ""
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s disk"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s disk"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Disketa"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB disk"
-
-#: ../monitor/hal/ghaldrive.c:192
-#, fuzzy
-msgid "ATA Drive"
-msgstr "Uređaj"
-
-#: ../monitor/hal/ghaldrive.c:194
-#, fuzzy
-msgid "SCSI Drive"
-msgstr "USB disk"
-
-#: ../monitor/hal/ghaldrive.c:196
-#, fuzzy
-msgid "FireWire Drive"
-msgstr "Zip disk"
-
-#: ../monitor/hal/ghaldrive.c:200
-#, fuzzy
-msgid "Tape Drive"
-msgstr "Zip disk"
-
-#: ../monitor/hal/ghaldrive.c:202
-#, fuzzy
-msgid "CompactFlash Drive"
-msgstr "Kompaktni-fleš disk (CF)"
-
-# Čarobni štapić? :)
-#: ../monitor/hal/ghaldrive.c:204
-#, fuzzy
-msgid "MemoryStick Drive"
-msgstr "Memorijski štapić"
-
-#: ../monitor/hal/ghaldrive.c:206
-#, fuzzy
-msgid "SmartMedia Drive"
-msgstr "Mudri nosač (SM)"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC nosač"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip disk"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Džez disk"
-
-#: ../monitor/hal/ghaldrive.c:214
-#, fuzzy
-msgid "Thumb Drive"
-msgstr "%s disk"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr ""
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, fuzzy, c-format
-msgid "%.1f kB"
-msgstr "%.1f KB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-#, fuzzy
-msgid "Mixed Audio/Data Disc"
-msgstr "Zvučni disk"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, fuzzy, c-format
-msgid "%s Media"
-msgstr "Mudri nosač (SM)"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr ""
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Običan disk"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-#, fuzzy
-msgid "Blank CD-ROM Disc"
-msgstr "Prazan jednom-upisiv disk"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Jednom-upisiv disk"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Prazan jednom-upisiv disk"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Piši-briši disk"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Prazan piši-briši disk"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Običan DVD disk"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-#, fuzzy
-msgid "Blank DVD-ROM Disc"
-msgstr "Prazan - DVD memorijski disk"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Memorijski - DVD disk"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Prazan - DVD memorijski disk"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Piši-briši DVD disk"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Prazan piši-briši DVD disk"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Jednom upisivi + DVD disk"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Prazan jednom upisivi + DVD disk"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Piši+briši DVD disk"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Prazan piši+briši DVD disk"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-#, fuzzy
-msgid "DVD+R DL Disc"
-msgstr "Jednom upisivi + DVD disk"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-#, fuzzy
-msgid "Blank DVD+R DL Disc"
-msgstr "Prazan jednom upisivi + DVD disk"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-#, fuzzy
-msgid "Blu-Ray Disc"
-msgstr "Prazan jednom-upisiv disk"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-#, fuzzy
-msgid "Blank Blu-Ray Disc"
-msgstr "Prazan jednom-upisiv disk"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-#, fuzzy
-msgid "Blu-Ray R Disc"
-msgstr "Prazan jednom-upisiv disk"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-#, fuzzy
-msgid "Blank Blu-Ray R Disc"
-msgstr "Prazan jednom-upisiv disk"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-#, fuzzy
-msgid "Blu-Ray RW Disc"
-msgstr "Prazan piši-briši disk"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-#, fuzzy
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Prazan piši-briši disk"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-#, fuzzy
-msgid "HD DVD Disc"
-msgstr "Jednom upisivi - DVD disk"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-#, fuzzy
-msgid "Blank HD DVD Disc"
-msgstr "Prazan jednom upisivi - DVD disk"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-#, fuzzy
-msgid "HD DVD-R Disc"
-msgstr "Jednom upisivi - DVD disk"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-#, fuzzy
-msgid "Blank HD DVD-R Disc"
-msgstr "Prazan jednom upisivi - DVD disk"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-#, fuzzy
-msgid "HD DVD-RW Disc"
-msgstr "Piši-briši DVD disk"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-#, fuzzy
-msgid "Blank HD DVD-RW Disc"
-msgstr "Prazan piši-briši DVD disk"
-
-# bug: Compact Disk Disk?
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-#, fuzzy
-msgid "MO Disc"
-msgstr "CD disk"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-#, fuzzy
-msgid "Blank MO Disc"
-msgstr "Prazan jednom-upisiv disk"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-#, fuzzy
-msgid "Disc"
-msgstr "Disk"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-#, fuzzy
-msgid "Blank Disc"
-msgstr "Prazan jednom-upisiv disk"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr ""
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr ""
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr ""
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr ""
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-
-#~ msgid "ISO 9660 Volume"
-#~ msgstr "ISO 9660 disk"
-
-#~ msgid "%s:%u contains NUL characters."
-#~ msgstr "%s:%u sadrži NUL znakove."
-
-#~ msgid "%s:%u contains no method name."
-#~ msgstr "%s:%u ne sadrži ime metoda."
-
-#~ msgid "%s:%u has no options endmarker."
-#~ msgstr "%s:%u ne sadrži oznaku kraja opcija."
-
-#~ msgid "%s:%u has unknown options %s."
-#~ msgstr "%s:%u koristi nepoznate opcije %s."
-
-#~ msgid "%s:%u contains no module name."
-#~ msgstr "%s:%u ne sadrži ime modula."
-
-#~ msgid "Configuration file `%s' was not found: %s"
-#~ msgstr "Datoteka sa podešavanjima „%s“ nije nađena: %s"
-
-#~ msgid "%s:%d aborted parsing."
-#~ msgstr "%s:%d je prekinuo raščlanjivanje."
-
-#~ msgid "AFFS Volume"
-#~ msgstr "AFFS disk"
-
-#~ msgid "AFS Network Volume"
-#~ msgstr "Mrežni AFS disk"
-
-#~ msgid "Auto-detected Volume"
-#~ msgstr "Samoprepoznati disk"
-
-#~ msgid "CD-ROM Drive"
-#~ msgstr "CD uređaj"
-
-#~ msgid "CD Digital Audio"
-#~ msgstr "Muzički disk"
-
-# bug(slobo): hm, ne bih rekao
-#~ msgid "Hardware Device Volume"
-#~ msgstr "Disk na hardverskom uređaju"
-
-#~ msgid "EncFS Volume"
-#~ msgstr "EncFS disk"
-
-# bug: does it differentiate between Hurd Ext2 and Linux Ext2?
-#~ msgid "Ext2 Linux Volume"
-#~ msgstr "Linuks Ext2 disk"
-
-#~ msgid "Ext3 Linux Volume"
-#~ msgstr "Linuks Ext3 disk"
-
-#~ msgid "MSDOS Volume"
-#~ msgstr "MSDOS disk"
-
-#~ msgid "BSD Volume"
-#~ msgstr "BSD disk"
-
-#~ msgid "FUSE Volume"
-#~ msgstr "FUSE jedinica"
-
-#~ msgid "MacOS Volume"
-#~ msgstr "MekOS disk"
-
-# CeDe disk, a ne „Kompaktni disk disk“
-#~ msgid "CDROM Volume"
-#~ msgstr "CD jedinica"
-
-#~ msgid "Hsfs CDROM Volume"
-#~ msgstr "Hsfs CD jedinica"
-
-#~ msgid "JFS Volume"
-#~ msgstr "JFS disk"
-
-#~ msgid "Windows NT Volume"
-#~ msgstr "Windows NT disk"
-
-#~ msgid "System Volume"
-#~ msgstr "Sistemski disk"
-
-#~ msgid "Memory Volume"
-#~ msgstr "Memorijski disk"
-
-#~ msgid "Minix Volume"
-#~ msgstr "Miniks disk"
-
-#~ msgid "NFS Network Volume"
-#~ msgstr "Disk mrežnog sistema datoteka"
-
-#~ msgid "Netware Volume"
-#~ msgstr "Netware disk"
-
-#~ msgid "Reiser4 Linux Volume"
-#~ msgstr "Linuks Rajzer4 disk"
-
-#~ msgid "ReiserFS Linux Volume"
-#~ msgstr "Linuks RajzerFS disk"
-
-#~ msgid "SuperMount Volume"
-#~ msgstr "SuperMount disk"
-
-#~ msgid "DVD Volume"
-#~ msgstr "DVD jedinica"
-
-#~ msgid "Solaris/BSD Volume"
-#~ msgstr "Solaris/BSD disk"
-
-#~ msgid "Udfs Solaris Volume"
-#~ msgstr "Solaris Udfs disk"
-
-#~ msgid "Pcfs Solaris Volume"
-#~ msgstr "Solaris Pcfs disk"
-
-#~ msgid "Sun SAM-QFS Volume"
-#~ msgstr "Sun SAM-QFS disk"
-
-#~ msgid "Temporary Volume"
-#~ msgstr "Privremeni disk"
-
-#~ msgid "Enhanced DOS Volume"
-#~ msgstr "Unapređeni DOS disk"
-
-#~ msgid "Windows VFAT Volume"
-#~ msgstr "Windows VFAT disk"
-
-#~ msgid "Xenix Volume"
-#~ msgstr "Xenix disk"
-
-#~ msgid "XFS Linux Volume"
-#~ msgstr "Linuks XFS disk"
-
-#~ msgid "XIAFS Volume"
-#~ msgstr "XIAFS disk"
-
-#~ msgid "CIFS Volume"
-#~ msgstr "CIFS disk"
-
-#~ msgid "Unknown"
-#~ msgstr "Nepoznat"
-
-#~ msgid "%s Volume"
-#~ msgstr "%s disk"
-
-# :)
-#~ msgid "Pen Drive"
-#~ msgstr "Olovkasti disk"
-
-#~ msgid "External %s"
-#~ msgstr "Spoljni %s"
-
-#~ msgid "%s Removable Volume"
-#~ msgstr "Uklonjivi %s disk"
-
-#~ msgid "Volume"
-#~ msgstr "Disk"
-
-#~ msgid "Unknown operation type %u"
-#~ msgstr "Nepoznat tip operacije %u"
-
-#~ msgid "Cannot create pipe for open GIOChannel: %s"
-#~ msgstr "Ne mogu napraviti cevku za otvoreni GIOChannel: %s"
-
-#~ msgid "Unknown job kind %u"
-#~ msgstr "Nepoznata vrsta posla %u"
-
-#~ msgid ""
-#~ "Deprecated function. User modifications to the MIME database are no "
-#~ "longer supported."
-#~ msgstr ""
-#~ "Prevaziđena funkcija. Izmene korisnika u MIME bazi više nisu podržane."
-
-#~ msgid "More parsing errors will be ignored."
-#~ msgstr "Ostale greške u obradi će biti zanemarene."
-
-#~ msgid "No error"
-#~ msgstr "Nema greške"
-
-#~ msgid "File not found"
-#~ msgstr "Datoteka nije nađena"
-
-#~ msgid "Generic error"
-#~ msgstr "Opšta greška"
-
-#~ msgid "I/O error"
-#~ msgstr "U/I greška"
-
-#~ msgid "Data corrupted"
-#~ msgstr "Podaci oštećeni"
-
-#~ msgid "Format not valid"
-#~ msgstr "Oblik nije ispravan"
-
-# bug: is file handle the same as file descriptor?
-#~ msgid "Bad file handle"
-#~ msgstr "Loša ručka datoteke"
-
-#~ msgid "File too big"
-#~ msgstr "Datoteka je prevelika"
-
-#~ msgid "Read-only file system"
-#~ msgstr "Sistem datoteka samo za čitanje"
-
-#~ msgid "File not open"
-#~ msgstr "Datoteka nije otvorena"
-
-#~ msgid "Open mode not valid"
-#~ msgstr "Način otvaranja nije ispravan"
-
-#~ msgid "Too many open files"
-#~ msgstr "Previše otvorenih datoteka"
-
-#~ msgid "Operation in progress"
-#~ msgstr "Operacija u toku"
-
-#~ msgid "Operation interrupted"
-#~ msgstr "Operacija prekinuta"
-
-#~ msgid "Looping links encountered"
-#~ msgstr "Pronađene kružne veze"
-
-#~ msgid "Is a directory"
-#~ msgstr "Jeste fascikla"
-
-#~ msgid "Not enough memory"
-#~ msgstr "Nema dovoljno memorije"
-
-#~ msgid "Host not found"
-#~ msgstr "Računar nije nađen"
-
-#~ msgid "Host has no address"
-#~ msgstr "Računar nema adresu"
-
-#~ msgid "Directory busy"
-#~ msgstr "Zauzet direktorijum"
-
-#~ msgid "Too many links"
-#~ msgstr "Previše veza"
-
-#~ msgid "Read only file system"
-#~ msgstr "Neupisiv sistem datoteka"
-
-#~ msgid "Not on the same file system"
-#~ msgstr "Nije na istom sistemu datoteka"
-
-#~ msgid "Service not available"
-#~ msgstr "Usluga nije dostupna"
-
-#~ msgid "Request obsoletes service's data"
-#~ msgstr "Zahtev zastareva podatke usluge"
-
-#~ msgid "No default action associated"
-#~ msgstr "Nije dodeljeno uobičajeno dejstvo"
-
-#~ msgid "No handler for URL scheme"
-#~ msgstr "Nema rukovaoca za vrstu adrese (URL-a)"
-
-#~ msgid "Error parsing command line"
-#~ msgstr "Greška pri čitanju naredbe"
-
-#~ msgid "Timeout reached"
-#~ msgstr "Dostignut rok"
-
-#~ msgid "Nameserver error"
-#~ msgstr "Greška sa serverom imena"
-
-#~ msgid "The resource is locked"
-#~ msgstr "Resurs je zaključan"
-
-#~ msgid "Function call deprecated"
-#~ msgstr "Poziv funkcije je prevaziđen"
-
-#~ msgid "Not a symbolic link"
-#~ msgstr "Nije simbolička veza"
-
-#~ msgid "Unknown error"
-#~ msgstr "Nepoznata greška"
-
-#~ msgid "%u byte"
-#~ msgid_plural "%u bytes"
-#~ msgstr[0] "%u bajt"
-#~ msgstr[1] "%u bajta"
-#~ msgstr[2] "%u bajtova"
-
-#~ msgid "Floppy"
-#~ msgstr "Disketa"
-
-#~ msgid "CD-ROM/DVD-ROM"
-#~ msgstr "CD-ROM/DVD-ROM"
-
-#~ msgid "CD-ROM/DVD-RAM"
-#~ msgstr "CD-ROM/DVD-RAM"
-
-#~ msgid "CD-ROM/DVD-R"
-#~ msgstr "CD-ROM/DVD-R"
-
-#~ msgid "CD-ROM/DVD-RW"
-#~ msgstr "CD-ROM/DVD-RV"
-
-#~ msgid "CD-R/DVD-ROM"
-#~ msgstr "CD-R/DVD-ROM"
-
-#~ msgid "CD-R/DVD-RAM"
-#~ msgstr "CD-R/DVD-RAM"
-
-#~ msgid "CD-R/DVD-R"
-#~ msgstr "CD-R/DVD-R"
-
-#~ msgid "CD-R/DVD-RW"
-#~ msgstr "CD-R/DVD-RV"
-
-#~ msgid "CD-RW/DVD-ROM"
-#~ msgstr "CD-RV/DVD-ROM"
-
-#~ msgid "CD-RW/DVD-RAM"
-#~ msgstr "CD-RV/DVD-RAM"
-
-#~ msgid "CD-RW/DVD-R"
-#~ msgstr "CD-RV/DVD-R"
-
-#~ msgid "CD-RW/DVD-RW"
-#~ msgstr "CD-RV/DVD-RV"
-
-#~ msgid "IEEE1394 Drive"
-#~ msgstr "IEEE1394 disk"
-
-#~ msgid "CF"
-#~ msgstr "CF"
-
-#~ msgid "SD/MMC"
-#~ msgstr "SD/MMC"
-
-# Čarobni štapić? :)
-#~ msgid "Memory Stick"
-#~ msgstr "Memorijski štapić"
-
-#~ msgid "Root Volume"
-#~ msgstr "Koreni disk"
-
-#~ msgid "Audio CD"
-#~ msgstr "Muzički disk"
-
-#~ msgid "Unknown volume"
-#~ msgstr "Nepoznati disk"
-
-#~ msgid "Network server"
-#~ msgstr "Mrežni server"
-
-#~ msgid ""
-#~ "Unable to mount the floppy drive. There is probably no floppy in the "
-#~ "drive."
-#~ msgstr "Ne mogu da priključim disketu. Verovatno disketa nije u uređaju. "
-
-#~ msgid ""
-#~ "Unable to mount the volume. There is probably no media in the device."
-#~ msgstr "Ne mogu da priključim disk. Verovatno nema nosača u uređaju. "
-
-#~ msgid ""
-#~ "Unable to mount the floppy drive. The floppy is probably in a format that "
-#~ "cannot be mounted."
-#~ msgstr ""
-#~ "Ne mogu da priključim disketu. Verovatno je disketa u zapisu koji se ne "
-#~ "može čitati."
-
-#~ msgid ""
-#~ "Unable to mount the volume. If this is an encrypted drive, then the wrong "
-#~ "password or key was used."
-#~ msgstr ""
-#~ "Ne mogu da priključim disk. Ako je on šifrovan, tada je bila iskorišćena "
-#~ "pogrešna lozinka ili ključ."
-
-#~ msgid ""
-#~ "Unable to mount the selected volume. The volume is probably in a format "
-#~ "that cannot be mounted."
-#~ msgstr ""
-#~ "Ne mogu da priključim izabrani disk. Verovatno je disk u zapisu koji se ne "
-#~ "može čitati."
-
-#~ msgid "Unable to mount the selected floppy drive."
-#~ msgstr "Ne mogu da priključim izabranu disketu."
-
-#~ msgid "Unable to mount the selected volume."
-#~ msgstr "Ne mogu da priključim izabrani disk."
-
-#~ msgid ""
-#~ "Unable to unmount the selected volume. The volume is in use by one or "
-#~ "more programs."
-#~ msgstr ""
-#~ "Ne mogu da odspojim izabrani disk. Njega verovatno koristi neki program "
-#~ "ili programi."
-
-#~ msgid "Unable to unmount the selected volume."
-#~ msgstr "Ne mogu da odspojim izabrani disk."
-
-#~ msgid "Failed to read data from child process %d (%s)"
-#~ msgstr "Neuspešno čitanje datoteke iz naslednog procesa %d (%s)"
-
-#~ msgid "Couldn't run mount process in a pty"
-#~ msgstr "Ne mogu da pokrenem proces priključenja u lažnom terminalu"
-
-#~ msgid "Unexpected error in select() reading data from a child process (%s)"
-#~ msgstr ""
-#~ "Neočekivana greška u funkciji select() pri čitanju podataka u naslednom "
-#~ "procesu (%s)"
-
-#~ msgid "Unexpected error in waitpid() (%s)"
-#~ msgstr "Neočekivana greška unutar izvršenja funkcije waitpid() (%s)"
-
-#~ msgid "Unable to eject media"
-#~ msgstr "Ne mogu da izbacim nosač"
-
-#~ msgid "Home"
-#~ msgstr "Lični"
-
-#~ msgid "Unknown GnomeVFSSeekPosition %d"
-#~ msgstr "Nepoznato GnomeVFSSeekPosition %d"
-
-#~ msgid "The identity of the remote computer (%s) is unknown."
-#~ msgstr "Identitet udaljenog računara (%s) nije poznat."
-
-#~ msgid "Didn't find a valid settings file at %s\n"
-#~ msgstr "Nisam našao ispravnu datoteku sa podešavanjima u %s\n"
-
-#~ msgid "Use the %s environment variable to specify a different location.\n"
-#~ msgstr "Koristite promenljivu okruženja %s da naznačite drugu putanju.\n"
-
-#~ msgid "Your HTTP Proxy requires you to log in.\n"
-#~ msgstr "Vaš HTTP posrednik zahteva prijavu.\n"
-
-#~ msgid ""
-#~ "You must log in to access \"%s\".\n"
-#~ "%s"
-#~ msgstr ""
-#~ "Morate se prijaviti kako biste pristupili „%s“.\n"
-#~ "%s"
-
-#~ msgid "Your password will be transmitted unencrypted."
-#~ msgstr "Lozinka će biti preneta nezaštićena."
-
-#~ msgid "Your password will be transmitted encrypted."
-#~ msgstr "Lozinka će biti šifrovana pre prenosa."
-
-#~ msgid "You must log in to access %s domain %s\n"
-#~ msgstr "Morate se prijaviti kako biste pristupili %s, domen %s\n"
-
-#~ msgid "You must log in to access %s\n"
-#~ msgstr "Morate se prijaviti kako biste pristupili %s\n"
-
-#~ msgid "Default component viewer application"
-#~ msgstr "Podrazumevani program za pregled delova"
-
-#~ msgid "Default terminal application"
-#~ msgstr "Podrazumevani terminalski program"
-
-# bug: no slang, s/exec/execut.../?
-#~ msgid "Exec argument for default terminal"
-#~ msgstr "Argument izvršavanja za podrazumevani terminal"
-
-#~ msgid ""
-#~ "The application to use for viewing files that require a component to view "
-#~ "them. The parameter %s will be replaced by the file's URIs, the parameter "
-#~ "%c will be replaced by the component IID."
-#~ msgstr ""
-#~ "Program koji se koristi za pregledanje datoteka koje zahtevaju komponentu "
-#~ "za pregled. Parametar %s će biti zamenjen adresom datoteke, a parametar %c "
-#~ "će biti zamenjen IID-om komponente."
-
-#~ msgid ""
-#~ "The default terminal application to use for applications that require a "
-#~ "terminal."
-#~ msgstr ""
-#~ "Podrazumevani terminalski program koji se koristi za programe kojima je "
-#~ "neophodan terminal."
-
-# bug: no slang, s/exec/execute.../?
-#~ msgid "The exec argument to use for the default terminal application."
-#~ msgstr "Argument izvršavanja za podrazumevani terminalski program."
-
-#~ msgid "Run the command in a terminal"
-#~ msgstr "Pokreni naredbu u terminalu"
-
-#~ msgid "The command used to handle \"aim\" URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „aim“ adresama, ako je uključeno."
-
-#~ msgid "The command used to handle \"callto\" URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „callto“ adresama, ako je uključeno."
-
-#~ msgid "The command used to handle \"ghelp\" URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „ghelp“ adresama, ako je uključeno."
-
-#~ msgid "The command used to handle \"h323\" URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „h323“ adresama, ako je uključeno."
-
-#~ msgid "The command used to handle \"http\" URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „http“ adresama, ako je uključeno."
-
-#~ msgid "The command used to handle \"https\" URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „https“ adresama, ako je uključeno."
-
-#~ msgid "The command used to handle \"info\" URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „info“ adresama, ako je uključeno."
-
-#~ msgid "The command used to handle \"mailto\" URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „mailto“ adresama, ako je uključeno."
-
-#~ msgid "The command used to handle \"man\" URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „man“ adresama, ako je uključeno."
-
-#~ msgid "The command used to handle \"trash\" URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „trash“ adresama, ako je uključeno."
-
-#~ msgid "The handler for \"aim\" URLs"
-#~ msgstr "Rukovaoc „aim“ adresama"
-
-#~ msgid "The handler for \"callto\" URLs"
-#~ msgstr "Rukovaoc „callto“ adresama"
-
-#~ msgid "The handler for \"ghelp\" URLs"
-#~ msgstr "Rukovaoc „ghelp“ adresama"
-
-#~ msgid "The handler for \"h323\" URLs"
-#~ msgstr "Rukovaoc „h323“ adresama"
-
-#~ msgid "The handler for \"http\" URLs"
-#~ msgstr "Rukovaoc „http“ adresama"
-
-#~ msgid "The handler for \"https\" URLs"
-#~ msgstr "Rukovaoc „https“ adresama"
-
-#~ msgid "The handler for \"info\" URLs"
-#~ msgstr "Rukovaoc „info“ adresama"
-
-#~ msgid "The handler for \"mailto\" URLs"
-#~ msgstr "Rukovaoc „mailto“ adresama"
-
-#~ msgid "The handler for \"man\" URLs"
-#~ msgstr "Rukovaoc „man“ adresama"
-
-#~ msgid "The handler for \"trash\" URLs"
-#~ msgstr "Rukovaoc „trash“ adresama"
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"aim"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„aim“ adrese."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle "
-#~ "\"callto\" URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„callto“ adrese."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"ghelp"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„ghelp“ adrese."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"h323"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„h323“ adrese."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"http"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„http“ adrese."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"https"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„https“ adrese."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"info"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„info“ adrese."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle "
-#~ "\"mailto\" URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„mailto“ adrese."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"man"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„man“ adrese."
-
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle \"trash"
-#~ "\" URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„trash“ adrese."
-
-#~ msgid ""
-#~ "True if the command used to handle this type of URL should be run in a "
-#~ "terminal."
-#~ msgstr ""
-#~ "Uključeno ako naredba koja se koristi za ove adrese treba da se pokreće u "
-#~ "terminalu."
-
-#~ msgid "Whether the specified command should handle \"aim\" URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „aim“ adrese."
-
-#~ msgid "Whether the specified command should handle \"callto\" URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „callto“ adrese."
-
-#~ msgid "Whether the specified command should handle \"ghelp\" URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „ghelp“ adrese."
-
-#~ msgid "Whether the specified command should handle \"h323\" URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „h323“ adrese."
-
-#~ msgid "Whether the specified command should handle \"http\" URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „http“ adrese."
-
-#~ msgid "Whether the specified command should handle \"https\" URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „https“ adrese."
-
-#~ msgid "Whether the specified command should handle \"info\" URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „info“ adrese."
-
-#~ msgid "Whether the specified command should handle \"mailto\" URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „mailto“ adrese."
-
-#~ msgid "Whether the specified command should handle \"man\" URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „man“ adrese."
-
-#~ msgid "Whether the specified command should handle \"trash\" URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „trash“ adrese."
-
-#~ msgid ""
-#~ "Comma separated list of DNS-SD domains that should be visible in the "
-#~ "\"network:///\" location."
-#~ msgstr ""
-#~ "Zapetom razdvojen spisak DNS-SD domena koji su dostupni na putanji "
-#~ "„network:///."
-
-#~ msgid "Extra domains to look for DNS-SD services in"
-#~ msgstr "Dopunski domeni na kojima da traži DNS-SD usluge"
-
-#~ msgid "How to display local DNS-SD service"
-#~ msgstr "Kako da prikazuje lokalnu DNS-SD uslugu"
-
-#~ msgid "Possible values are \"merged\", \"separate\" and \"disabled\"."
-#~ msgstr ""
-#~ "Dopuštene vrednosti su „merged“ (spojeno), „separate“ (razdvojeno) i "
-#~ "„disabled“ (isključeno)."
-
-#~ msgid "Authenticate proxy server connections"
-#~ msgstr "Identifikuj veze sa posredničkim serverom"
-
-#~ msgid "Automatic proxy configuration URL"
-#~ msgstr "Adresa za samopodešavanje posrednika"
-
-#~ msgid "Enables the proxy settings when accessing HTTP over the Internet."
-#~ msgstr "Uključuje podešavanja posrednika pri pristupu vebu preko Interneta."
-
-#~ msgid "FTP proxy host name"
-#~ msgstr "Ime FTP posrednika"
-
-#~ msgid "FTP proxy port"
-#~ msgstr "Port FTP posrednika"
-
-#~ msgid "HTTP proxy host name"
-#~ msgstr "Ime HTTP posrednika"
-
-#~ msgid "HTTP proxy port"
-#~ msgstr "Port HTTP posrednika"
-
-#~ msgid "HTTP proxy username"
-#~ msgstr "Korisnik HTTP posrednika"
-
-#~ msgid ""
-#~ "If true, then connections to the proxy server require authentication. The "
-#~ "username/password combo is defined by \"/system/http_proxy/"
-#~ "authentication_user\" and \"/system/http_proxy/authentication_password\"."
-#~ msgstr ""
-#~ "Ukoliko je postavljeno, veze sa posredničkim serverom se identifikuju. Par "
-#~ "korisnik/lozinka se uzima iz „/system/http_proxy/authentication_user“ i „/"
-#~ "system/http_proxy/authentication_password“."
-
-#~ msgid "Non-proxy hosts"
-#~ msgstr "Besposredničke adrese"
-
-#~ msgid "Password to pass as authentication when doing HTTP proxying."
-#~ msgstr "Lozinka koja se koristi za identifikaciju kod veb posrednika."
-
-#~ msgid "Proxy configuration mode"
-#~ msgstr "Način podešavanja posrednika"
-
-#~ msgid "SOCKS proxy host name"
-#~ msgstr "Ime SOCKS posrednika"
-
-#~ msgid "SOCKS proxy port"
-#~ msgstr "Port SOCKS posrednika"
-
-#~ msgid "Secure HTTP proxy host name"
-#~ msgstr "Ime bezbednog HTTP posrednika"
-
-#~ msgid "Secure HTTP proxy port"
-#~ msgstr "Port bezbednog HTTP posrednika"
-
-#~ msgid ""
-#~ "Select the proxy configuration mode. Supported values are \"none\", "
-#~ "\"manual\", \"auto\"."
-#~ msgstr ""
-#~ "Izaberite režim podešavanja posrednika. Dopuštene vrednosti su „none“, "
-#~ "„manual“ i „auto“."
-
-#~ msgid "The machine name to proxy FTP through."
-#~ msgstr "Ime računara za FTP posredovanje."
-
-#~ msgid "The machine name to proxy HTTP through."
-#~ msgstr "Ime računara za veb (HTTP) posredovanje."
-
-#~ msgid "The machine name to proxy secure HTTP through."
-#~ msgstr "Ime računara za bezbedno veb (HTTPS) posredovanje."
-
-# bug: s/socks/SOCKS/
-#~ msgid "The machine name to proxy socks through."
-#~ msgstr "Ime računara za SOCKS posredovanje."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/http_proxy/host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Port računara datog u „/system/http_proxy/host“ kroz koji posreduje."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/proxy/ftp_host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Port računara datog u „/system/proxy/ftp_proxy“ kroz koji posreduje."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/proxy/secure_host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Port računara datog u „/system/proxy/secure_proxy“ kroz koji posreduje."
-
-#~ msgid ""
-#~ "The port on the machine defined by \"/system/proxy/socks_host\" that you "
-#~ "proxy through."
-#~ msgstr ""
-#~ "Port mašine određene pomoću „/system/proxy/socks_proxy“ koja je posrednik."
-
-#~ msgid ""
-#~ "This key contains a list of hosts which are connected to directly, rather "
-#~ "than via the proxy (if it is active). The values can be hostnames, "
-#~ "domains (using an initial wildcard like *.foo.com), IP host addresses "
-#~ "(both IPv4 and IPv6) and network addresses with a netmask (something like "
-#~ "192.168.0.0/24)."
-#~ msgstr ""
-#~ "Ovaj ključ sadrži spisak računara koji su neposredno povezani, umesto "
-#~ "putem posrednika (ukoliko je u dejstvu). Ove vrednosti mogu biti imena "
-#~ "računara, domeni (pomoću početnih navoda kao što je *.nešto.iju), IP "
-#~ "adrese računara (bilo IP4 bilo IP6) i adrese mreža uz mrežnu masku (nešto "
-#~ "kao što je 192.168.0.0/24)."
-
-#~ msgid "URL that provides proxy configuration values."
-#~ msgstr "Adresa koja obezbeđuje vrednosti za podešavanje posrednika."
-
-#~ msgid "Use HTTP proxy"
-#~ msgstr "Koristi veb posrednika"
-
-#~ msgid "User name to pass as authentication when doing HTTP proxying."
-#~ msgstr "Korisničko ime koje se šalje pri identifikaciji kod veb posrednika."
-
-#~ msgid "SMB workgroup"
-#~ msgstr "SMB radna grupa"
-
-#~ msgid ""
-#~ "The Windows networking workgroup or domain that the user is part of. In "
-#~ "order for a new workgroup to fully take effect the user may need to log "
-#~ "out and log back in."
-#~ msgstr ""
-#~ "Radna grupa ili domen Windows mreže čiji je korisnik član. Da bi nova "
-#~ "radna grupa uzela maha korisnik će možda morati da se odjavi i ponovo "
-#~ "prijavi."
-
-# Gnomov Virtuelni Sistem Datoteka — VSD? Ili Gnomovo „oponašanje sistema datoteka“ — OSD?
-#~ msgid "Could not initialize gnome vfs"
-#~ msgstr "Ne mogu da pokrenem Gnomovo oponašanje sistema datoteka"
-
-#~ msgid "Standard Moniker factory"
-#~ msgstr "Proizvodnja običnog nadimka"
-
-#~ msgid "file MonikerExtender"
-#~ msgstr "datoteka MonikerExtender"
-
-#~ msgid "generic Gnome VFS moniker"
-#~ msgstr "osnovni nadimak Gnomovog oponašavača sistema datoteka"
-
-#~ msgid "generic file moniker"
-#~ msgstr "osnovni nadimak datoteke"
-
-#~ msgid "Display SCSI drives"
-#~ msgstr "Prikaži SCSI uređaje"
-
-#~ msgid "Display SCSI optical drives"
-#~ msgstr "Prikaži optičke SCSI uređaje"
-
-#~ msgid "Display drives with removable media"
-#~ msgstr "Prikaži uređaje sa uklonjivim nosačima"
-
-#~ msgid "Display external drives"
-#~ msgstr "Prikaži spoljašnje uređaje"
-
-#~ msgid "Display internal hard drives"
-#~ msgstr "Prikaži unutrašnje tvrde diskove"
-
-#~ msgid ""
-#~ "Whether to display SCSI optical drives even if /system/storage/"
-#~ "display_scsi_drives is set to FALSE."
-#~ msgstr ""
-#~ "Da li da prikazuje optičke SCSI uređaje čak i ako je /system/storage/"
-#~ "display_scsi_drives isključen."
-
-#~ msgid "Whether to display drives and mountable volumes from SCSI drives."
-#~ msgstr "Da li da prikazuje uređaje i priključive diskove sa SCSI uređaja."
-
-#~ msgid ""
-#~ "Whether to display drives and mountable volumes from drives with "
-#~ "removable media (e.g. drives where media can be inserted and removed)."
-#~ msgstr ""
-#~ "Da li da prikazuje uređaje i priključive diskove sa uređaja sa uklonjivim "
-#~ "nosačima (npr. uređaji gde se nosač može ubaciti i izbaciti)."
-
-# bug: hotpluggable is technobabble, second part of "eg." should be enough
-#~ msgid ""
-#~ "Whether to display drives and mountable volumes from external drives (e."
-#~ "g. drives that are hotpluggable; e.g. drives that can be attached and "
-#~ "detached while the system is running)."
-#~ msgstr ""
-#~ "Da li da prikazuje uređaje i priključive diskove sa spoljašnjih uređaja "
-#~ "(npr. uređaji koji se mogu priključiti u toku rada)."
-
-#~ msgid ""
-#~ "Whether to display drives and mountable volumes from internal hard drives "
-#~ "(non-SCSI optical drives are always shown)."
-#~ msgstr ""
-#~ "Da li da prikazuje uređaje i priključive diskove sa unutrašnjih tvrdih "
-#~ "diskova (otpički ne-SCSI diskovi se uvek prikazuju)."
-
-#~ msgid "The window workgroup the user is part of"
-#~ msgstr "Vindouz radna grupa koje je korisnik član"
-
-#~ msgid "Optical Disc"
-#~ msgstr "Optički disk"
-
-# Čarobni štapić? :)
-#~ msgid "Memory Stick Media"
-#~ msgstr "Memorijski štapić (MS)"
-
-#~ msgid "Smart Media Media"
-#~ msgstr "Mudri nosač (SM)"
-
-#~ msgid "Mac OS disk"
-#~ msgstr "Mekintoš disk"
-
-#~ msgid "Mac OS X disk"
-#~ msgstr "Mekintoš OS-Iks disk"
-
-# Transkripcija na nivou ;-)
-#~ msgid "Windows Disk"
-#~ msgstr "Vinduz disk"
-
-#~ msgid "Linux Disk"
-#~ msgstr "Linuks disk"
-
-#~ msgid "File could not be opened: %s"
-#~ msgstr "Datoteka se ne može otvoriti: %s"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid ""
-#~ "desktop entries contain line '%s' which is not an entry, group, or comment"
-#~ msgstr ""
-#~ "„.desktop“ datoteka sadrži red „%s“ koji nije unos, grupa ni primedba"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries file does not start with legal start group"
-#~ msgstr "„.desktop“ datoteka ne počinje sa ispravnom početnom grupom"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries contain line '%s' which is not UTF-8"
-#~ msgstr "„.desktop“ datoteka sadrži red „%s“ koji nije UTF-8"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries contain unknown encoding '%s'"
-#~ msgstr "„.desktop“ datoteka koristi nepoznato kodiranje „%s“"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries do not have group '%s'"
-#~ msgstr "„.desktop“ datoteka nema grupu „%s“"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries do not have key '%s'"
-#~ msgstr "„.desktop“ datoteka nema ključ „%s“"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid ""
-#~ "desktop entries contain key '%s' which has value that cannot be "
-#~ "interpreted."
-#~ msgstr ""
-#~ "„.desktop“ datoteka sadrži ključ „%s“ koji ima vrednost koja se ne može "
-#~ "razumeti."
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid ""
-#~ "desktop entries contain no translated value for key '%s' with locale '%s'."
-#~ msgstr ""
-#~ "„.desktop“ datoteka ne sadrži prevod vrednosti ključa „%s“ u lokalitetu „%"
-#~ "s“."
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries contain invalid escape sequence '%s'"
-#~ msgstr "„.desktop“ datoteka sadrži neispravan znak za isticanje „%s“"
-
-# bug: "desktop entries" sucks pretty much (it could be "entries in .desktop file")
-#~ msgid "desktop entries contain escape character at end of line"
-#~ msgstr ""
-#~ "„.desktop“ datoteka sadrži neispravan znak za isticanje na kraju reda"
-
-#~ msgid "Value '%s' cannot be interpreted as a number."
-#~ msgstr "Vrednost „%s“ se ne može posmatrati kao broj."
-
-#~ msgid "Value '%s' cannot be interpreted as a boolean."
-#~ msgstr "Vrednost „%s“ se ne može posmatrati kao istinitosna vrednost."
-
-#~ msgid "Applications"
-#~ msgstr "Programi"
-
-#~ msgid "Cards"
-#~ msgstr "Karte"
-
-#~ msgid "Folders"
-#~ msgstr "Fascikle"
-
-#~ msgid "Help"
-#~ msgstr "Pomoć"
-
-#~ msgid "Hosts"
-#~ msgstr "Računari"
-
-#~ msgid "Links"
-#~ msgstr "Veze"
-
-#~ msgid "Mail"
-#~ msgstr "Pošta"
-
-#~ msgid "Tools"
-#~ msgstr "Alati"
-
-#~ msgid "Windows"
-#~ msgstr "Prozori"
-
-# bug: inconsistent with other strings which use "...to handle \"h323\" URLs..."
-#~ msgid "The command used to handle HTTP URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „http“ adresama, ako je uključeno."
-
-# bug: inconsistent with other strings which use "...to handle \"h323\" URLs..."
-#~ msgid "The command used to handle HTTPS URLs, if enabled."
-#~ msgstr "Naredba korišćena za baratanje „https“ adresama, ako je uključeno."
-
-# bug: inconsistent with other strings; should be "The handler for \"http\" URLs"
-#~ msgid "The handler for HTTP URLs"
-#~ msgstr "Rukovaoc „http“ adresama"
-
-# bug: inconsistent with other strings; should be "The handler for \"https\" URLs"
-#~ msgid "The handler for HTTPS URLs"
-#~ msgstr "Rukovaoc „https“ adresama"
-
-# bug: inconsistent; should be "...should handle \"http\" URLs."
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle HTTP "
-#~ "URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„http“ adrese."
-
-# bug: inconsistent; should be "...should handle \"https\" URLs."
-#~ msgid ""
-#~ "True if the command specified in the \"command\" key should handle HTTPS "
-#~ "URLs."
-#~ msgstr ""
-#~ "Uključeno ako naredba navedena u ključu „command“ treba da se koristi za "
-#~ "„https“ adrese."
-
-# bug: inconsistent; should be "...should handle \"http\" URLs".
-#~ msgid "Whether the specified command should handle HTTP URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „http“ adrese."
-
-# bug: inconsistent; should be "...should handle \"https\" URLs".
-#~ msgid "Whether the specified command should handle HTTPS URLs"
-#~ msgstr "Da li navedena naredba treba da se koristi za „https“ adrese."
-
-#~ msgid "H323 URL handler"
-#~ msgstr "Rukovalac H323 adresama"
-
-#~ msgid "HTTP URL handler"
-#~ msgstr "Rukovalac HTTP adresama"
-
-#~ msgid "HTTPS URL handler"
-#~ msgstr "Rukovalac HTTPS adresama"
-
-#~ msgid "Handle callto URLs"
-#~ msgstr "Barataj callto adresama"
-
-#~ msgid "Handle ghelp URLs"
-#~ msgstr "Barataj ghelp adresama"
-
-#~ msgid "Handle info URLs"
-#~ msgstr "Barataj info adresama"
-
-#~ msgid "Handle mailto URLs"
-#~ msgstr "Barataj mailto adresama"
-
-#~ msgid "Handle man URLs"
-#~ msgstr "Barataj man adresama"
-
-#~ msgid "callto URL handler"
-#~ msgstr "Rukovalac callto adresama"
-
-#~ msgid "ghelp URL handler"
-#~ msgstr "Rukovalac ghelp adresama"
-
-#~ msgid "info URL handler"
-#~ msgstr "Rukovalac info adresama"
-
-#~ msgid "mailto URL handler"
-#~ msgstr "Rukovalac mailto adresama"
-
-#~ msgid "man URL handler"
-#~ msgstr "Rukovalac man adresama"
-
-#~ msgid "trash URL handler"
-#~ msgstr "Rukovalac trash adresama"
-
-#~ msgid "Could not get information for file '%s': %s"
-#~ msgstr "Ne mogu da saznam podatke o datoteci „%s“: %s"
-
-# bug: as above [inconsistent wording]
-#~ msgid ""
-#~ "Failed to load image '%s': reason not known, probably a corrupt image file"
-#~ msgstr ""
-#~ "Neuspešno učitavanje slike „%s“: razlog nepoznat, verovatno oštećena "
-#~ "datoteka slike"
-
-#~ msgid "How to handle http URLs"
-#~ msgstr "Kako baratati http adresama"
-
-#~ msgid "How to handle https URLs"
-#~ msgstr "Kako baratati https adresama"
-
-#~ msgid "Set to true to have a program specified in command handle https URLs"
-#~ msgstr ""
-#~ "Uključite ako želite da program naveden u naredbi barata https adresama"
-
-#~ msgid ""
-#~ "Set to true to have a program specified in programs/ghelp handle ghelp "
-#~ "URLs"
-#~ msgstr ""
-#~ "Uključite ako želite da program naveden u programs/ghelp barata ghelp "
-#~ "adresama"
-
-#~ msgid ""
-#~ "Set to true to have a program specified in programs/info handle info URLs"
-#~ msgstr ""
-#~ "Uključite ako želite da program naveden u programs/info barata info "
-#~ "adresama"
-
-#~ msgid ""
-#~ "Set to true to have a program specified in programs/man handle man URLs"
-#~ msgstr ""
-#~ "Uključite ako želite da program naveden u programs/man barata man adresama"
-
-#~ msgid "URL handler for h323 uris"
-#~ msgstr "Rukovaoc h323 adresama"
-
-#~ msgid "URL handler for http uris"
-#~ msgstr "Rukovaoc http adresama"
-
-#~ msgid "URL handler for https uris"
-#~ msgstr "Rukovaoc https adresama"
-
-#~ msgid "Hosts are not contacted via the proxy"
-#~ msgstr "Računarima se ne pristupa preko posrednika"
-
-#~ msgid "The machine name to proxy http through."
-#~ msgstr "Ime računara HTTP posrednika."
-
-#~ msgid "Use proxy settings when accessing http"
-#~ msgstr "Koristi podešavanja posrednika pri pristupu vebu"
-
-#~ msgid "http proxy username"
-#~ msgstr "Korisničko ime HTTP posrednika"
-
-# bug: plural-forms
-#~ msgid "1 byte"
-#~ msgstr "1 bajt"
diff --git a/po/sv.po b/po/sv.po
deleted file mode 100644
index 11abc221..00000000
--- a/po/sv.po
+++ /dev/null
@@ -1,2007 +0,0 @@
-# Swedish messages for gvfs.
-# Copyright (C) 2006-2008 Free Software Foundation, Inc.
-# Daniel Nylander <po@danielnylander.se>, 2006, 2007, 2008.
-# Christian Rose <menthos@menthos.com>, 2006.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-01 10:42+0200\n"
-"PO-Revision-Date: 2008-09-01 10:46+0100\n"
-"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
-"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../client/gdaemonfile.c:482
-#: ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "Åtgärden stöds inte, filer på olika monteringar"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Ogiltigt svarsvärde från get_info"
-
-#: ../client/gdaemonfile.c:816
-#: ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Ogiltigt svarsvärde från query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Kunde inte få filhandtag för ström"
-
-#: ../client/gdaemonfile.c:926
-#: ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055
-#: ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176
-#: ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312
-#: ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "Ogiltigt svarsvärde från open"
-
-#: ../client/gdaemonfile.c:1006
-#: ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124
-#: ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Fick inget filhandtag för ström"
-
-#: ../client/gdaemonfile.c:1238
-#: ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Ogiltigt svarsvärde från call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Ogiltigt svarsvärde från get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Kunde inte hitta inneslutade mount"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Ogiltigt filnamn %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Ogiltigt svarsvärde från query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "Ogiltigt svarsvärde från monitor_dir"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "Ogiltigt svarsvärde från monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Fel i strömningsprotokoll: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Slut på ström"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831
-#: ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793
-#: ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049
-#: ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250
-#: ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336
-#: ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418
-#: ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069
-#: ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120
-#: ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Åtgärden avbröts"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Sökning stöds inte i strömmen"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Frågeåtgärden stöds inte"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Informationsbegäran stöds inte i strömmen"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Fel vid hämtning av monteringsinformation: %s"
-
-#: ../client/gvfsdaemondbus.c:568
-#: ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Fel vid anslutning till demon: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Fel vid skapande av uttag: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Fel vid anslutning till uttag: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Ogiltigt format på filinformation"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Ogiltigt innehåll för attributinformation"
-
-#: ../daemon/daemon-main.c:63
-#: ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Fel vid anslutning till D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Filsystemstjänst för %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Fel: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Användning: %s --spawner dbus-id objektsökväg"
-
-#: ../daemon/daemon-main.c:155
-#: ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Användning: %s nyckel=värde nyckel=värde ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Ingen monteringstyp angiven"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "monteringspunkt för %s körs redan"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "fel vid start av monteringsdemon"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315
-#: ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ på %s"
-
-#: ../daemon/gvfsbackendarchive.c:515
-#: ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Inget värdnamn angivet"
-
-#: ../daemon/gvfsbackendarchive.c:526
-#: ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456
-#: ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603
-#: ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "Ogiltig monteringsspecifikation"
-
-#: ../daemon/gvfsbackendarchive.c:636
-#: ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715
-#: ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572
-#: ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101
-#: ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804
-#: ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042
-#: ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Filen finns inte"
-
-#: ../daemon/gvfsbackendarchive.c:724
-#: ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651
-#: ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912
-#: ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Filen är inte en katalog"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Bränn"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Kunde inte skapa temporärkatalog"
-
-#: ../daemon/gvfsbackendburn.c:405
-#: ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451
-#: ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719
-#: ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783
-#: ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987
-#: ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "Ingen sådan fil eller katalog"
-
-#: ../daemon/gvfsbackendburn.c:425
-#: ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "Katalogen är inte tom"
-
-#: ../daemon/gvfsbackendburn.c:459
-#: ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "Kan inte kopiera fil över katalog"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Cd/dvd-skapare"
-
-#: ../daemon/gvfsbackendburn.c:755
-#: ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917
-#: ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "Filen finns"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "Ingen sådan fil eller katalog i målsökväg"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "Kan inte kopiera katalog över katalog"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "Målfilen finns"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "Kan inte kopiera katalog rekursivt"
-
-#: ../daemon/gvfsbackendburn.c:943
-#: ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569
-#: ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "Stöds inte"
-
-#: ../daemon/gvfsbackendcdda.c:223
-#: ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "Kan inte ansluta till systembussen"
-
-#: ../daemon/gvfsbackendcdda.c:233
-#: ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "Kan inte skapa libhal-kontext"
-
-#: ../daemon/gvfsbackendcdda.c:246
-#: ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "Kan inte initiera libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261
-#: ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Ingen enhet angiven"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Kan inte hitta enheten %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Enheten %s innehåller inga ljudfiler"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda-montering på %s"
-
-#: ../daemon/gvfsbackendcdda.c:295
-#: ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435
-#: ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Ljudskiva"
-
-#: ../daemon/gvfsbackendcdda.c:356
-#: ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Filsystemet är upptaget: %d öppnad fil"
-msgstr[1] "Filsystemet är upptaget: %d öppnade filer"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Ingen sådan fil %s på enheten %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Fel från \"paranoia\" på enheten %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Fel vid sökning i ström på enheten %s"
-
-#: ../daemon/gvfsbackendcdda.c:815
-#: ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "Ingen sådan fil"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Filen finns inte eller är inte ett ljudspår"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Filsystemstjänst för ljud-cd"
-
-#: ../daemon/gvfsbackendcomputer.c:179
-#: ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Dator"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Filsystem"
-
-#: ../daemon/gvfsbackendcomputer.c:590
-#: ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758
-#: ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "Kan inte öppna katalog"
-
-#: ../daemon/gvfsbackendcomputer.c:594
-#: ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Kan inte öppna monteringsbar fil"
-
-#: ../daemon/gvfsbackendcomputer.c:780
-#: ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Internt fel: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812
-#: ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Kan inte montera fil"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Inget media i enheten"
-
-#: ../daemon/gvfsbackendcomputer.c:881
-#: ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Inte en monteringsbar fil"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Kan inte avmontera fil"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Kan inte mata ut fil"
-
-#: ../daemon/gvfsbackenddav.c:503
-#: ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP-fel: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Kunde inte tolka svaret"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Tomt svar"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Oväntat svar från server"
-
-#: ../daemon/gvfsbackenddav.c:1156
-#: ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "Svaret är ogiltigt"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV-utdelning"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "Ange lösenord för %s"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "Ange lösenord för proxyserver"
-
-#: ../daemon/gvfsbackenddav.c:1527
-#: ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "Inte en WebDAV-aktiverad utdelning"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV på %s"
-
-#: ../daemon/gvfsbackenddav.c:1614
-#: ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "Kunde inte skapa begäran"
-
-#: ../daemon/gvfsbackenddav.c:1750
-#: ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114
-#: ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365
-#: ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Målfilen finns redan"
-
-#: ../daemon/gvfsbackenddav.c:1823
-#: ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Filen blev externt ändrad"
-
-#: ../daemon/gvfsbackenddav.c:1854
-#: ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Skapandet av säkerhetskopia misslyckades"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669
-#: ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Kan inte övervaka fil eller katalog."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688
-#: ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814
-#: ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Nätverk"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Konton stöds inte"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Värden stängde anslutningen"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Kan inte öppna dataanslutning. Kanske förhindrar din brandvägg detta?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Dataanslutning stängd"
-
-#: ../daemon/gvfsbackendftp.c:255
-#: ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Åtgärden misslyckades"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Inget ledigt utrymme på servern"
-
-#: ../daemon/gvfsbackendftp.c:272
-#: ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Åtgärden stöds inte"
-
-#: ../daemon/gvfsbackendftp.c:276
-#: ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Åtkomst nekas"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Sidtypen är okänd"
-
-#: ../daemon/gvfsbackendftp.c:284
-#: ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Ogiltigt filnamn"
-
-#: ../daemon/gvfsbackendftp.c:288
-#: ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393
-#: ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425
-#: ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Ogiltigt svar"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "avbruten överföring"
-
-#: ../daemon/gvfsbackendftp.c:677
-#: ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Kunde inte ansluta till värd"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Ange lösenord för ftp på %s"
-
-#: ../daemon/gvfsbackendftp.c:1362
-#: ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Lösenordsdialogen avbröts"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp på %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp som %s på %s"
-
-#: ../daemon/gvfsbackendftp.c:1529
-#: ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Filen är en katalog"
-
-#: ../daemon/gvfsbackendftp.c:1751
-#: ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "säkerhetskopior stöds inte än"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "filnamnet är för långt"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Ogiltigt målfilnamn"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Katalog eller fil finns redan"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Ingen sådan fil eller katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Ogiltigt filnamn"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Stöds inte"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Digitalkamera (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841
-#: ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s-kamera"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844
-#: ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s-ljudspelare"
-
-#: ../daemon/gvfsbackendgphoto2.c:853
-#: ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:855
-#: ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Ljudspelare"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325
-#: ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "Misslyckades med att få tag på mapplista"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "Ingen enhet angiven"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "Kan inte skapa gphoto2-kontext"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "Fel vid skapande av kamera"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483
-#: ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "Fel vid inläsning av enhetsinformation"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "Fel vid uppslag av enhetsinformation"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "Fel vid hämtning av enhetsinformation"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "Fel vid konfiguration av port för kamerakommunikation"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "Fel vid initiering av kamera"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2-montering på %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "Ingen kamera angiven"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "Fel vid skapande av filobjekt"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "Fel vid hämtning av fil"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "Fel vid datahämtning från fil"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841
-#: ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Fel vid sökning i ström på kameran %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981
-#: ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Inte en katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "Misslyckades med att få tag på fillista"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "Fel vid skapande av katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "Namnet finns redan"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592
-#: ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "Nytt namn är för långt"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602
-#: ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "Fel vid namnbyte av katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615
-#: ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "Fel vid namnbyte av fil"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Katalogen \"%s\" är inte tom"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "Fel vid borttagning av katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "Fel vid borttagning av fil"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "Kan inte skriva till katalog"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "Kan inte allokera ny fil att lägga till i"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "Kan inte läsa fil att lägga till i"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "Kan inte få tag på data för fil att lägga till i"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "Fel vid skrivning av fil"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "Stöds inte (inte samma katalog)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Stöds inte (källa är katalog, mål är katalog)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Stöds inte (källa är katalog, mål är befintlig fil)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Stöds inte (källa är fil, mål är katalog)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP-klientfel: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560
-#: ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301
-#: ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (ogiltig kodning)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Notifiering för katalog stöds inte"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268
-#: ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows-nätverk"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Lokalt nätverk"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Övervakare för nätverksplatser"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442
-#: ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s på %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Anslutning till enheten förlorades"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Enheten kräver en programuppdatering"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh-programmet avslutades oväntat"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Värdnamnet är inte känt"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Ingen väg till värd"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Anslutningen nekades av server"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Verifiering av värdnyckel misslyckades"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Kunde inte starta ssh-program"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Kunde inte starta ssh-program: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528
-#: ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Tidsgräns överstigen vid inloggning"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Ange lösenfras för nyckel"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Ange lösenord"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Kan inte skicka lösenord"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Logga in ändå"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Avbryt inloggning"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Identiteten för fjärrdatorn (%s) är inte känd.\n"
-"Det här händer när du loggar in på en dator för första gången.\n"
-"\n"
-"Identiteten som skickades av fjärrdatorn är %s. Du bör kontakta systemadministratören om du vill vara absolut säker på identiteten."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Inloggningsdialogen avbröts"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Kan inte skicka värdidentitetsbekräftelse"
-
-#: ../daemon/gvfsbackendsftp.c:1472
-#: ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Protokollfel"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp på %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Kunde inte hitta ssh-kommando som stöds"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Fel"
-
-#: ../daemon/gvfsbackendsftp.c:2023
-#: ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093
-#: ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235
-#: ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331
-#: ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513
-#: ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603
-#: ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692
-#: ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869
-#: ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981
-#: ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319
-#: ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483
-#: ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619
-#: ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707
-#: ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756
-#: ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Ogiltigt svar togs emot"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Fel vid skapande av säkerhetskopia: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Kunde inte skapa temporärfil"
-
-#: ../daemon/gvfsbackendsftp.c:3545
-#: ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Kan inte flytta katalog över katalog"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Lösenord krävs för utdelningen %s på %s"
-
-#: ../daemon/gvfsbackendsmb.c:471
-#: ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Internt fel (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Misslyckades med att montera Windows-utdelning"
-
-#: ../daemon/gvfsbackendsmb.c:717
-#: ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Söktypen stöds inte"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Skapandet av säkerhetskopia misslyckades: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Fel vid borttagning av fil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Fel vid flyttning av fil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Fel vid borttagning av målfil: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Kan inte flytta katalog rekursivt"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Filsystemstjänst för Windows-utdelningar"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windows-utdelningar på %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Filen är inte monteringsbar"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Inte en vanlig fil"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Filsystemstjänst för Windows-nätverk"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641
-#: ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Papperskorg"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (i papperskorg)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Kan inte ta bort papperskorg"
-
-#: ../daemon/gvfsbackendtrash.c:1677
-#: ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Notifiering för papperskorgskatalog stöds inte"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Ogiltig typ av bakände"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Fel vid sändning av fd: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150
-#: ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146
-#: ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Åtgärden stöds inte av bakänden"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Symboliska länkar stöds inte av bakänden"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "Ogiltigt dbus-meddelande"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Ersätt gammal demon."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Starta inte fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS-demon"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Huvuddemon för GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78
-#: ../programs/gvfs-cat.c:163
-#: ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101
-#: ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386
-#: ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144
-#: ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Prova \"%s --help\" för mer information."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Ogiltiga argument från startad barnprocess"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automatisk montering misslyckades: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Angiven plats är inte monterad"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Angiven plats stöds inte"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Platsen är redan monterad"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Platsen är inte monteringsbar"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "Cd-rom"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "Cd-r"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "Cd-rw"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "Dvd-rom"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "Dvd+r"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "Dvd+rw"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "Dvd-r"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "Dvd-rw"
-
-# http://www.nada.kth.se/dataterm/rek.html#a23
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "Dvd-ram"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "Dvd±r"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "Dvd±rw"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s-enhet"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s-enhet"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Diskettenhet"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Programvaru-RAID-enhet"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB-enhet"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA-enhet"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI-enhet"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire-enhet"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Bandenhet"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash-enhet"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick-enhet"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia-enhet"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC-enhet"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip-enhet"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz-enhet"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Minnespinne"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Masslagringsenhet"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Misslyckades med att mata ut media; en eller flera volymer på mediet är upptagna."
-
-#: ../monitor/hal/ghalmount.c:301
-#: ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306
-#: ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311
-#: ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433
-#: ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Blandad ljud- och dataskiva"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446
-#: ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "%s-media"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s-krypterat data"
-
-# http://www.nada.kth.se/dataterm/rek.html#a23
-#: ../monitor/hal/hal-utils.c:40
-#: ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Cd-romskiva"
-
-#: ../monitor/hal/hal-utils.c:40
-#: ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Tom cd-rom-skiva"
-
-#: ../monitor/hal/hal-utils.c:41
-#: ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Cd-r-skiva"
-
-#: ../monitor/hal/hal-utils.c:41
-#: ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Tom cd-r-skiva"
-
-#: ../monitor/hal/hal-utils.c:42
-#: ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Cd-rw-skiva"
-
-#: ../monitor/hal/hal-utils.c:42
-#: ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Tom cd-rw-skiva"
-
-# http://www.nada.kth.se/dataterm/rek.html#a23
-#: ../monitor/hal/hal-utils.c:43
-#: ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43
-#: ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Dvd-romskiva"
-
-# http://www.nada.kth.se/dataterm/rek.html#a23
-#: ../monitor/hal/hal-utils.c:43
-#: ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43
-#: ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Tom dvd-rom-skiva"
-
-# http://www.nada.kth.se/dataterm/rek.html#a23
-#: ../monitor/hal/hal-utils.c:44
-#: ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Dvd-ramskiva"
-
-# http://www.nada.kth.se/dataterm/rek.html#a23
-#: ../monitor/hal/hal-utils.c:44
-#: ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Tom dvd-ramskiva"
-
-#: ../monitor/hal/hal-utils.c:46
-#: ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Dvd-rw-skiva"
-
-#: ../monitor/hal/hal-utils.c:46
-#: ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Tom dvd-rw-skiva"
-
-#: ../monitor/hal/hal-utils.c:47
-#: ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Dvd+r-skiva"
-
-#: ../monitor/hal/hal-utils.c:47
-#: ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Tom dvd+r-skiva"
-
-#: ../monitor/hal/hal-utils.c:48
-#: ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Dvd+rw-skiva"
-
-#: ../monitor/hal/hal-utils.c:48
-#: ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Tom dvd+rw-skiva"
-
-#: ../monitor/hal/hal-utils.c:49
-#: ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL-skiva"
-
-#: ../monitor/hal/hal-utils.c:49
-#: ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Tom DVD+R DL-skiva"
-
-#: ../monitor/hal/hal-utils.c:50
-#: ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray-skiva"
-
-#: ../monitor/hal/hal-utils.c:50
-#: ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Tom Blu-Ray-skiva"
-
-#: ../monitor/hal/hal-utils.c:51
-#: ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray r-skiva"
-
-#: ../monitor/hal/hal-utils.c:51
-#: ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Tom Blu-Ray r-skiva"
-
-#: ../monitor/hal/hal-utils.c:52
-#: ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray rw-skiva"
-
-#: ../monitor/hal/hal-utils.c:52
-#: ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Tom Blu-Ray rw-skiva"
-
-#: ../monitor/hal/hal-utils.c:53
-#: ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD dvd-skiva"
-
-#: ../monitor/hal/hal-utils.c:53
-#: ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Tom HD dvd-skiva"
-
-#: ../monitor/hal/hal-utils.c:54
-#: ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD dvd-r-skiva"
-
-#: ../monitor/hal/hal-utils.c:54
-#: ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Tom HD dvd-rom-skiva"
-
-#: ../monitor/hal/hal-utils.c:55
-#: ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD dvd-rw-skiva"
-
-#: ../monitor/hal/hal-utils.c:55
-#: ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Tom HD dvd-rw-skiva"
-
-# http://www.nada.kth.se/dataterm/rek.html#a23
-#: ../monitor/hal/hal-utils.c:56
-#: ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Mo-skiva"
-
-#: ../monitor/hal/hal-utils.c:56
-#: ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Tom mo-skiva"
-
-#: ../monitor/hal/hal-utils.c:57
-#: ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Skiva"
-
-#: ../monitor/hal/hal-utils.c:57
-#: ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Tom skiva"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: fel vid öppning av fil: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, fel vid skrivning till standard ut"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: fel vid läsning: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: fel vid stängning: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "PLATS... - sammanfoga PLATSER till standard ut."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid "Concatenate files at locations and print to the standard output. Works just like the traditional cat utility, but using gvfs location instead local files: for example you can use something like smb://server/resource/file.txt as location to concatenate."
-msgstr "Sammanfoga filer på platser och skriv ut till standard ut. Fungerar precis som det traditionella verktyget cat, men använder gvfs-plats istället för lokala filer: till exempel kan du använda något liknande smb://server/resurs/fil.txt som plats att sammanfoga."
-
-#: ../programs/gvfs-cat.c:148
-msgid "Note: just pipe through cat if you need its formatting option like -n, -T or other."
-msgstr "Observera: bara att skicka genom cat om du behöver dess formatflagga som -n, -T eller andra."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174
-#: ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: saknar platser"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: fel vid öppnande av plats: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: fel vid start av program: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILER... - öppna FILER med registrerade program."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid "Opens the file(s) with the default application registered to handle the type of the file."
-msgstr "Öppnar fil(er) med standardprogrammet registrerat att hantera den typen av fil."
-
-#, fuzzy
-#~ msgid "Error creating port info list"
-#~ msgstr "Fel vid skapande av uttag: %s"
-
-#, fuzzy
-#~ msgid "Error getting port info from port info list"
-#~ msgstr "Fel vid hämtning av monteringsinformation: %s"
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "Filsystemet är upptaget: %d öppnade filer"
-#~ msgid "Error listing folders"
-#~ msgstr "Fel vid mapplistning"
-#~ msgid "Error listing files in folder"
-#~ msgstr "Fel vid fillistning i mapp"
-#~ msgid "File unavailable"
-#~ msgstr "Filen är inte tillgänglig"
-#~ msgid "%.1f kB Media"
-#~ msgstr "%.1f kB-media"
-#~ msgid "%.1f MB Media"
-#~ msgstr "%.1f MB-media"
-#~ msgid "%.1f GB Media"
-#~ msgstr "%.1f GB-media"
-#~ msgid "Invalid reply from server"
-#~ msgstr "Ogiltigt svar från server"
-#~ msgid "File does not exist"
-#~ msgstr "Filen finns inte"
-#~ msgid "Operation cancelled"
-#~ msgstr "Åtgärden avbröts"
-#~ msgid "FTP on %s"
-#~ msgstr "FTP på %s"
-#~ msgid "FTP on %s:%u"
-#~ msgstr "FTP på %s:%u"
-#~ msgid "The file does not exist"
-#~ msgstr "Filen finns inte"
-#~ msgid "Audio Disc on %s"
-#~ msgstr "Ljudskiva på %s"
-#~ msgid "CD Burner"
-#~ msgstr "Cd-brännare"
-#~ msgid "Error connecting dbus: %s\n"
-#~ msgstr "Fel vid anslutning till dbus: %s\n"
-#~ msgid "Can't enumerate non-directory"
-#~ msgstr "Kan inte numrera icke-katalog"
-#~ msgid "Can't find mount for mounted volume"
-#~ msgstr "Kan inte hitta montering för monterad volym"
-#~ msgid "Failed to allocate smb context"
-#~ msgstr "Misslyckades med att allokera smb-kontext"
-#~ msgid "Failed to initialize smb context"
-#~ msgstr "Misslyckades med att initiera smb-kontext"
-#~ msgid ""
-#~ "A list of default mount options for volumes formatted with the iso9660 "
-#~ "file system."
-#~ msgstr ""
-#~ "En lista på standardmonteringsalternativ för volymer som är formaterade "
-#~ "med iso9660-filsystemet."
-#~ msgid ""
-#~ "A list of default mount options for volumes formatted with the ntfs file "
-#~ "system using ntfs-3g."
-#~ msgstr ""
-#~ "En lista på standardmonteringsalternativ för volymer som är formaterade "
-#~ "med ntfs-filsystemet med ntfs-3g."
-#~ msgid ""
-#~ "A list of default mount options for volumes formatted with the ntfs file "
-#~ "system."
-#~ msgstr ""
-#~ "En lista på standardmonteringsalternativ för volymer som är formaterade "
-#~ "med ntfs-filsystemet."
-#~ msgid ""
-#~ "A list of default mount options for volumes formatted with the udf file "
-#~ "system."
-#~ msgstr ""
-#~ "En lista på standardmonteringsalternativ för volymer som är formaterade "
-#~ "med udf-filsystemet."
-#~ msgid ""
-#~ "A list of default mount options for volumes formatted with the vfat file "
-#~ "system."
-#~ msgstr ""
-#~ "En lista på standardmonteringsalternativ för volymer som är formaterade "
-#~ "med vfat-filsystemet."
-#~ msgid "Default mount options for iso9660 fs"
-#~ msgstr "Standardmonteringsalternativ för iso9960-filsystem"
-#~ msgid "Default mount options for ntfs fs"
-#~ msgstr "Standardmonteringsalternativ för ntfs-filsystem"
-#~ msgid "Default mount options for ntfs-3g fs"
-#~ msgstr "Standardmonteringsalternativ för ntfs-3g-filsystem"
-#~ msgid "Default mount options for udf fs"
-#~ msgstr "Standardmonteringsalternativ för udf-filsystem"
-#~ msgid "Default mount options for vfat fs"
-#~ msgstr "Standardmonteringsalternativ för vfat-filsystem"
-#~ msgid ""
-#~ "The name of the file system driver to use by default when 'ntfs' is "
-#~ "detected. This is useful for configuring the system to use the 'ntfs-3g' "
-#~ "driver for all 'ntfs' file systems by default. User can still choose to "
-#~ "use the 'ntfs' file system driver by overriding it per-volume or on the "
-#~ "command line."
-#~ msgstr ""
-#~ "Namnet på filsystemdrivrutinen som ska användas som standard när \"ntfs\" "
-#~ "identifieras. Det här är användbart för konfigurering av systemet till "
-#~ "att använda drivrutinen \"ntfs-3g\" för alla \"ntfs\"-filsystem som "
-#~ "standard. Användaren kan fortfarande välja att använda "
-#~ "filsystemsdrivrutinen \"ntfs\" genom att åsidosätta den för varje volym "
-#~ "eller på kommandoraden."
-#~ msgid "When 'ntfs' is detected, what file system driver to use by default"
-#~ msgstr ""
-#~ "När \"ntfs\" identifieras, vilken filsystemdrivrutin ska användas som "
-#~ "standard"
-#~ msgid "_Username:"
-#~ msgstr "_Användarnamn:"
-#~ msgid "_Domain:"
-#~ msgstr "_Domän:"
-#~ msgid "_Password:"
-#~ msgstr "_Lösenord:"
-#~ msgid "Con_firm password:"
-#~ msgstr "_Bekräfta lösenord:"
-#~ msgid "Password quality:"
-#~ msgstr "Lösenordskvalitet:"
-#~ msgid "Co_nnect"
-#~ msgstr "Ans_lut"
-#~ msgid "Connect _anonymously"
-#~ msgstr "Anslut _anonymt"
-#~ msgid "Connect as u_ser:"
-#~ msgstr "Anslut som an_vändare:"
-#~ msgid "_Forget password immediately"
-#~ msgstr "_Glöm lösenordet omedelbart"
-#~ msgid "_Remember password until you logout"
-#~ msgstr "Kom ihåg lösenordet tills du loggar _ut"
-#~ msgid "_Remember forever"
-#~ msgstr "Kom ihåg _för alltid"
-#~ msgid "You are not privileged to eject the volume '%s'."
-#~ msgstr "Du har inte rättighet att mata ut volymen \"%s\"."
-#~ msgid "You are not privileged to eject this volume."
-#~ msgstr "Du har inte rättighet att mata ut denna volym."
-#~ msgid "An application is preventing the volume '%s' from being ejected."
-#~ msgstr "Ett program förhindrar att volymen \"%s\" kan matas ut."
-#~ msgid "An application is preventing the volume from being ejected."
-#~ msgstr "Ett program förhindrar att volymen kan matas ut."
-#~ msgid "Cannot eject the volume '%s'."
-#~ msgstr "Kan inte mata ut volymen \"%s\"."
-#~ msgid "Cannot eject the volume."
-#~ msgstr "Kan inte mata ut volymen."
-#~ msgid "You are not privileged to unmount the volume '%s'."
-#~ msgstr "Du har inte rättighet att avmontera volymen \"%s\"."
-#~ msgid "You are not privileged to unmount this volume."
-#~ msgstr "Du har inte rättighet att avmontera denna volym."
-#~ msgid "An application is preventing the volume '%s' from being unmounted."
-#~ msgstr "Ett program förhindrar att volymen \"%s\" kan avmonteras."
-#~ msgid "An application is preventing the volume from being unmounted."
-#~ msgstr "Ett program förhindrar att volymen kan avmonteras."
-#~ msgid "The volume '%s' is not mounted."
-#~ msgstr "Volymen \"%s\" är inte monterad."
-#~ msgid "Cannot unmount the volume '%s'."
-#~ msgstr "Kan inte avmontera volymen \"%s\"."
-#~ msgid "Cannot unmount the volume."
-#~ msgstr "Kan inte avmontera volymen."
-#~ msgid "The volume '%s' was probably mounted manually on the command line."
-#~ msgstr "Volymen \"%s\" blev antagligen monterad manuellt på kommandoraden."
-#~ msgid "The volume was probably mounted manually on the command line."
-#~ msgstr "Volymen blev antagligen monterad manuellt på kommandoraden."
-#~ msgid "Error <i>%s</i>."
-#~ msgstr "Fel <i>%s</i>."
-#~ msgid "_Details"
-#~ msgstr "_Detaljer"
-#~ msgid "You are not privileged to mount the volume '%s'."
-#~ msgstr "Du har inte rättighet att montera volymen \"%s\"."
-#~ msgid "You are not privileged to mount this volume."
-#~ msgstr "Du har inte rättighet att montera denna volym."
-#~ msgid "Invalid mount option when attempting to mount the volume '%s'."
-#~ msgstr "Ogiltig monteringsflagg vid försök att montera volymen \"%s\"."
-#~ msgid "Invalid mount option when attempting to mount the volume."
-#~ msgstr "Ogiltig monteringsflagg vid försök att montera volymen."
-#~ msgid ""
-#~ "The volume '%s' uses the <i>%s</i> file system which is not supported by "
-#~ "your system."
-#~ msgstr ""
-#~ "Volymen \"%s\" använder filsystemet <i>%s</i> som inte stöds av ditt "
-#~ "system."
-#~ msgid ""
-#~ "The volume uses the <i>%s</i> file system which is not supported by your "
-#~ "system."
-#~ msgstr ""
-#~ "Volymen använder filsystemet <i>%s</i> som inte stöds av ditt system."
-#~ msgid "Unable to mount the volume."
-#~ msgstr "Kan inte montera volymen."
-#~ msgid "Volume '%s' is already mounted."
-#~ msgstr "Volymen \"%s\" är redan monterad."
-#~ msgid "Mounted %s at \"%s\"\n"
-#~ msgstr "Monterade %s på \"%s\"\n"
-#~ msgid "Device %s is in /etc/fstab with mount point \"%s\"\n"
-#~ msgstr "Enheten %s finns i /etc/fstab med monteringspunkten \"%s\"\n"
-#~ msgid "Mounted %s at \"%s\" (using /etc/fstab)\n"
-#~ msgstr "Monterade %s på \"%s\" (enligt /etc/fstab)\n"
-#~ msgid "Writing data to device"
-#~ msgstr "Skriver data till enhet"
-#~ msgid ""
-#~ "There is data that needs to be written to the device %s before it can be "
-#~ "removed. Please do not remove the media or disconnect the drive."
-#~ msgstr ""
-#~ "Det finns data som behöver skrivas till enheten %s innan den kan kopplas "
-#~ "från. Ta inte bort mediet eller koppla från enheten."
-#~ msgid "Device is now safe to remove"
-#~ msgstr "Enheten kan nu kopplas från"
-#~ msgid "The device %s is now safe to remove."
-#~ msgstr "Enheten %s kan nu kopplas från."
-#~ msgid "Unmounted %s (using /etc/fstab)\n"
-#~ msgstr "Avmonterade %s (enligt /etc/fstab)\n"
-#~ msgid "Unmounted %s\n"
-#~ msgstr "Avmonterade %s\n"
-#~ msgid "Ejected %s (using /etc/fstab).\n"
-#~ msgstr "Matade ut %s (enligt /etc/fstab).\n"
-#~ msgid "Ejected %s\n"
-#~ msgstr "Matade ut %s\n"
-#~ msgid ""
-#~ "The storage device %s contains encrypted data. Enter a password to unlock."
-#~ msgstr ""
-#~ "Lagringsenheten %s innehåller krypterat data. Ange ett lösenord för att "
-#~ "låsa upp."
-#~ msgid "Setup clear-text device for %s.\n"
-#~ msgstr "Konfigurera klartextenhet för %s.\n"
-#~ msgid "Teared down clear-text device for %s.\n"
-#~ msgstr "Nedbruten klartextenhet för %s.\n"
-#~ msgid "Clear text device is %s. Mounting.\n"
-#~ msgstr "Klartextenheten är %s. Monterar.\n"
-#~ msgid "X display not available - using text-based operation.\n"
-#~ msgstr "X-display finns inte tillgänglig - använder textbaserad åtgärd.\n"
-#~ msgid "Resolved device file %s -> %s\n"
-#~ msgstr "Slog upp enhetsfilen %s -> %s\n"
-#~ msgid "Resolved pseudonym \"%s\" -> %s\n"
-#~ msgstr "Slog upp pseudonymen \"%s\" -> %s\n"
-#~ msgid "Cannot resolve pseudonym \"%s\" to a volume\n"
-#~ msgstr "Kan inte slå upp pseudonymen \"%s\" till en volym\n"
-#~ msgid "Use --hal-udi, --device or --pseudonym to specify volume\n"
-#~ msgstr "Använd --hal-udi, --device eller --pseudonym för att ange volym\n"
-#~ msgid "Given device '%s' is not a volume or a drive."
-#~ msgstr "Angivna enheten \"%s\" är inte en volym eller en enhet."
-#~ msgid "Cannot unmount and eject simultaneously"
-#~ msgstr "Kan inte avmontera och mata ut samtidigt"
-#~ msgid "Crypto volume '%s' is already setup with clear volume '%s'"
-#~ msgstr ""
-#~ "Kryptovolymen \"%s\" är redan konfigurerad med en klartextvolym \"%s\""
-#~ msgid "Bad crypto password"
-#~ msgstr "Felaktigt kryptolösenord"
-#~ msgid "Bailing out..."
-#~ msgstr "Avslutar..."
-#~ msgid "<b>Connection:</b>"
-#~ msgstr "<b>Anslutning:</b>"
-#~ msgid "<b>External:</b>"
-#~ msgstr "<b>Extern:</b>"
-#~ msgid "<b>Firmware:</b>"
-#~ msgstr "<b>Fast programvara:</b>"
-#~ msgid "<b>Label:</b>"
-#~ msgstr "<b>Etikett:</b>"
-#~ msgid "<b>Media:</b>"
-#~ msgstr "<b>Media:</b>"
-#~ msgid "<b>Model:</b>"
-#~ msgstr "<b>Modell:</b>"
-#~ msgid "<b>Mount Options:</b>"
-#~ msgstr "<b>Monteringsalternativ:</b>"
-#~ msgid "<b>Mount Point:</b>"
-#~ msgstr "<b>Monteringspunkt:</b>"
-#~ msgid "<b>Removable:</b>"
-#~ msgstr "<b>Flyttbar:</b>"
-#~ msgid "<b>Serial:</b>"
-#~ msgstr "<b>Serienummer:</b>"
-#~ msgid "<b>Settings</b>"
-#~ msgstr "<b>Inställningar</b>"
-#~ msgid "<b>Size:</b>"
-#~ msgstr "<b>Storlek:</b>"
-#~ msgid "<b>UUID:</b>"
-#~ msgstr "<b>UUID:</b>"
-#~ msgid "<b>Vendor:</b>"
-#~ msgstr "<b>Tillverkare:</b>"
-#~ msgid ""
-#~ "<small><i>Changes in settings will not take effect until the\n"
-#~ "volume is remounted.</i></small>"
-#~ msgstr ""
-#~ "<small><i>Ändringar i inställningarna kommer att börja gälla\n"
-#~ "först nästa gång du monterar volymen.</i></small>"
-#~ msgid ""
-#~ "<small><i>Settings for a drive affects all volumes inserted in\n"
-#~ "the drive. This can be overriden for individual \n"
-#~ " volumes using the \"Volume\" tab.</i></small>"
-#~ msgstr ""
-#~ "<small><i>Inställningar för en enhet påverkar alla volymer som\n"
-#~ "är inmatade i enheten. Detta kan åsidosättas för individuella \n"
-#~ " volymer under fliken \"Volym\".</i></small>"
-#~ msgid "Removable Hard Disk"
-#~ msgstr "Flyttbar hårddisk"
-#~ msgid "Hard Disk"
-#~ msgstr "Hårddisk"
-#~ msgid "Blank DVD-R Disc"
-#~ msgstr "Tom dvd-r-skiva"
-#~ msgid "DVD-R Disc"
-#~ msgstr "Dvd-r-skiva"
-#~ msgid "Blank DVD+R Dual Layer Disc"
-#~ msgstr "Tom dvd+r-skiva (dubbla lager)"
-#~ msgid "DVD+R Dual Layer Disc"
-#~ msgstr "Dvd+r-skiva (dubbla lager)"
-#~ msgid "Blank BD-RE Disc"
-#~ msgstr "Tom bd-re-skiva"
-#~ msgid "BD-RE Disc"
-#~ msgstr "Bd-re-skiva"
-
diff --git a/po/ta.po b/po/ta.po
deleted file mode 100644
index 74ea50e3..00000000
--- a/po/ta.po
+++ /dev/null
@@ -1,1551 +0,0 @@
-# translation of gvfs.HEAD.ta.po to Tamil
-# translation of gvfs.HEAD.ta.po to
-# Translation of gvfs.HEAD_ta.po to தமிழ்
-# Copyright (C) 2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the PACKAGE package.
-#
-# தங்கம் அருண் <thangam.arunx@gmail.com>, 2008..
-# I. Felix <ifelix@redhat.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs.HEAD.ta\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-21 15:25+0000\n"
-"PO-Revision-Date: 2008-09-10 17:40+0530\n"
-"Last-Translator: I. Felix <ifelix@redhat.com>\n"
-"Language-Team: Tamil <fedora-trans-ta@redhat.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "செயல்பாடு துணைபுரியவில்லை, பல்வேறு ஏற்றங்களில் கோப்புகள் உள்ளன"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info இலிருந்து கொடுக்கப்பட்ட தவறான மதிப்பு"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info இலிருந்து கொடுக்கப்பட்ட தவறான மதிப்பு"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "இணைப்பு கோப்பு குறிப்பியைப் பெற முடியவில்லை"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "திறப்பதிலிருந்து கொடுக்கப்பட்ட தவறான மதிப்பு"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "இணைப்பு கோப்பின் குறிப்பியைப் பெறவில்லை"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "அழைப்பிலிருந்து கொடுக்கப்பட்ட தவறான மதிப்பு"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info இலிருந்து கொடுக்கப்பட்ட தவறான மதிப்பு"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "இணைப்பட்ட ஏற்றத்தை காண முடியவில்லை"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "தவறான கோப்பு பெயர் %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "guery_filesystem_info இலிருந்து கொடுக்கப்பட்ட தவறான மதிப்பு"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir இலிருந்து திருப்பி கொடுக்கப்பட்ட தவறான மதிப்பு"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file இலிருந்து கொடுக்கப்பட்ட தவறான மதிப்பு"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "தொடர்பு நெறிமுறையில் பிழை: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "இணைப்பின் முடிவு"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "செயல்பாடு ரத்து செய்யப்பட்டது"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "இணைப்பில் தேடலுக்கு துணையில்லை"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "வினா தகவல் செயல்பாடு துணைபுரிவதில்லை"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "ஓடையில் கேள்வி தகலுக்கு ஆதரவில்லை"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "ஏற்றி தகவலைப் பெறும் போது பிழை: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "டீமானுடன் இணைக்கப்படும் போது பிழை: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "சாக்கெட்டை உருவாக்கும் போது பிழை : %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "சாக்கெட்டை இணைக்கும் போது பிழை: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "தவறான கோப்புத் தகவல் வடிவம்"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "தவறான அளவு தகவல் பட்டியல் உள்ளடக்கம்"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "D-Busஐ இணைக்கும் போது பிழை: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s கோப்பு முறைமை சேவை"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "பிழை: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "பயன்பாடு: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "பயன்பாடு: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "ஏற்ற வகை குறிப்பிடப்படவில்லை"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%sக்கான ஏற்றிப்புள்ளி ஏற்கனவே இயக்கத்திலுள்ளது"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "டீமானை ஏற்றும் போது பிழை"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "%s இல் /"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "புரவலன் பெயர் குறிப்பிடப்படவில்லை"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "தவறான ஏற்ற குறிப்பீடு"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "கோப்பு இல்லை"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "கோப்பு அடைவாகாது"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "எழுதுதல்"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "தற்காலிக கோப்பினை உருவாக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendgphoto2.c:2690
-#, c-format
-msgid "No such file or directory"
-msgstr "எந்த கோப்பு அல்லது அடைவும் இல்லை"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "அடைவு வெற்றாக இல்லை"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "அடைவில் கோப்பினை நகலெடுக்க முடியாது"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD Creator"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2763
-msgid "File exists"
-msgstr "கோப்பு உள்ளது"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "இலக்கு பாதையில் கோப்பு அல்லது அடைவு இல்லை"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "அடைவில் அடைவை நகலெடுக்க முடியாது"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "இலக்கு கோப்பு உள்ளது "
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "கோப்பினை நகர்த்த முடியாது"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2348
-#: ../daemon/gvfsbackendgphoto2.c:2556 ../daemon/gvfsbackendgphoto2.c:2651
-#: ../daemon/gvfsbackendgphoto2.c:2742
-msgid "Not supported"
-msgstr "துணைபுரியவில்லை"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "கணினி பஸ் உடன் இணைக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "லிப்ஹால் சூழலை உருவாக்க இயலவில்லை"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "லிப்ஹாலை துவக்க முடியவில்லை "
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "எந்த இயக்கியும் குறிப்பிடப்படவில்லை"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "இயக்கி %sஐ கண்டுபிடிக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "இயக்கி %s இசை கோப்புகளை வைத்திருக்கவில்லை "
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "%s இல் cdda ஏற்றி"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "இசை வட்டு"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "கோப்பு முறைமை வேலையாக உள்ளது: %d திறந்த கோப்பு"
-msgstr[1] "கோப்பு முறைமை வேலையாக உள்ளது: %d திறந்த கோப்புகள்"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "கோப்பு %s இயக்கி %sயில் இல்லை"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "இயக்கி %s இல் 'paranoia'இலிருந்து பிழை"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "%s இயக்கியல் இணைப்பை தேடும் போது பிழை"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1711
-#, c-format
-msgid "No such file"
-msgstr "எந்த கோப்பும் இல்லை"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "கோப்பு இல்லை அல்லது அது இசை பாதையாக இருக்காது"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "இசை குறுவட்டு கோப்பு முறைமை சேவை"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "கணினி"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "கோப்பு முறைமை"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1703
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "அடைவை திறக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "ஏற்றக்கூடிய கோப்பினை திறக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "உள்ளார்ந்த பிழை: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "கோப்பினை ஏற்றி முடியவில்லை"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "எந்த ஊடகமும் இயக்கியில் இல்லை"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "ஏற்றிக்கூடிய கோப்பு இல்லை"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "கோப்பினை ஏற்றம் நீக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "கோப்பினை வெளியேற்ற முடியவில்லை"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP பிழை: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "பதிலை பகுக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "வெற்று பதில்"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "சேவையகத்திலிருந்து எதிர்பாராத பதில்"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "தவறான பதில்"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "WebDAV பங்கீடு"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "%sக்கு கடவுச்சொல்லை உள்ளிடவும்"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "உங்கள் பதிலாள் கடவுச்சொல்லை உள்ளிடவும்"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr "WebDAV-செயல்படுத்தப்பட்ட பங்கீடு இல்லை"
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "%s WebDAV இல்"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "கோரிக்கையை உருவாக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "இலக்கில் கோப்பு ஏற்கனவே உள்ளது "
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "கோப்பு வெளியில் மாற்றப்பட்டுள்ளது"
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "பின்சேமிப்பு கோப்பினை உருவாக்க முடியவில்லை"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "கோப்பு அல்லது அடைவை கண்காணிக்க முடியவில்லை."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "பிணையம்"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "கணக்குகள் துணைபுரியவில்லை"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "புரவலன் மூடப்பட்ட இணைப்பு"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "தரவு இணைப்பை திறக்க முடியவில்லை. உங்கள் ஃபயர்வால் இதனை தடுக்கிறதா?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "தரவு இணைப்பு இல்லை"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "செயல்பாடு செயலிழக்கப்பட்டது"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "சேவையகத்தில் இடம் இல்லை"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "துணைபுரியாத செயல்பாடு"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "அனுமதி மறுக்கப்பட்டது"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "தெரியாத பக்கம் வகை"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "தவறான கோப்பு பெயர்"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "தவறான பதில்"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "பிளவுப்பட்ட பரிமாற்றம்"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "புரவலனுடன் இணைக்க முடியவில்லை"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "ftp கடவுச்சொல்லை %sஇல் உள்ளிடவும்"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "கடவுச்சொல் உரையாடல் ரத்தானது"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "%s இல் ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "%s இல் %s ஆக ftp"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "கோப்பு அடைவு ஆகாது"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "இதுவரை பின்சேமிப்புகள் துணைபுரியவில்லை"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "மிக நீளமான கோப்பு பெயர்"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "தவறான இலக்கு கோப்பு பெயர்"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: அடைவு அல்லது கோப்பு உள்ளது"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: அப்படிப்பட்ட எந்த கோப்பும் அல்லது அடைவும் இல்லை"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: செல்லுபடியாகாத கோப்பு பெயர்"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d:ஆதரவில்லை"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "டிஜிட்டல் நிழற்பட கருவி (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s நிழற்பட கருவி"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s இசை இயக்கி"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "நிழற்பட கருவி"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "இசை இயக்கி"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2008
-msgid "Failed to get folder list"
-msgstr "கோப்பு பட்டியல் ஐ பெற முடியவில்லை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "எந்த சாதனமும் குறிப்பிடப்படவில்லை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "ஜிபோட்டோ 2 சூழலை உருவாக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "காமிராவை உருவாக்கும் போது பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482 ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading device information"
-msgstr "சாதன தகவலை ஏற்றுவதில் பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up device information"
-msgstr "சாதன தகவலை காண்பதில் பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting device information"
-msgstr "சாதன தகவலை பெறுவதில் பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting up camera communications port"
-msgstr "காமிரா தொடர்பு துறையை அமைப்பதில் பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "காமிராவை துவக்குவதில் பிழை"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 %sஇல் ஏற்றப்பட்டது"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "காமரா பெயர் குறிப்பிடப்படவில்லை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1719
-msgid "Error creating file object"
-msgstr " கோப்பு பொருளை உருவாக்கும் போது பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1733
-msgid "Error getting file"
-msgstr "கோப்பு கொண்டு வருதலில் பிழை: "
-
-#: ../daemon/gvfsbackendgphoto2.c:1742
-msgid "Error getting data from file"
-msgstr "கோப்பிலிருந்து தகவல் பெறுவதில் பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1836 ../daemon/gvfsbackendgphoto2.c:3010
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "%s காமிராவை ஓடையில் தேடும் போது பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:1975 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "ஒரு அடைவு அல்ல"
-
-#: ../daemon/gvfsbackendgphoto2.c:2071
-msgid "Failed to get file list"
-msgstr "கோப்பு பட்டியலை பெறுவதில் பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:2360
-msgid "Error creating directory"
-msgstr "அடைவை உருவாக்கும் போது பிழை :"
-
-#: ../daemon/gvfsbackendgphoto2.c:2568
-msgid "Name already exists"
-msgstr "பெயர் ஏற்கனவே உள்ளது "
-
-#: ../daemon/gvfsbackendgphoto2.c:2579 ../daemon/gvfsbackendgphoto2.c:3200
-msgid "New name too long"
-msgstr "புது கோப்பு பெயர் மிக நீளமானது"
-
-#: ../daemon/gvfsbackendgphoto2.c:2589 ../daemon/gvfsbackendgphoto2.c:3211
-msgid "Error renaming dir"
-msgstr "அடைவை மறு பெயர் இடுவதில் பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:2601 ../daemon/gvfsbackendgphoto2.c:3223
-msgid "Error renaming file"
-msgstr "கோப்பு மறு பெயரிடுவதில் பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:2664
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "அடைவு '%s' வெற்றாக இல்லை"
-
-#: ../daemon/gvfsbackendgphoto2.c:2675
-msgid "Error deleting directory"
-msgstr "கோப்பு அழித்தலில் பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:2700
-msgid "Error deleting file"
-msgstr "கோப்பு அழித்தலில் பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:2752
-msgid "Can't write to directory"
-msgstr "அடைவில் எழுத முடியவில்லை"
-
-#: ../daemon/gvfsbackendgphoto2.c:2799
-msgid "Cannot allocate new file to append to"
-msgstr "பின்னொட்டாக்க புதிய கோப்பை ஒதுக்க இயலாது."
-
-#: ../daemon/gvfsbackendgphoto2.c:2813
-msgid "Cannot read file to append to"
-msgstr "பின்னொட்டாக்க கோப்பை படிக்க இயலவில்லை "
-
-#: ../daemon/gvfsbackendgphoto2.c:2823
-msgid "Cannot get data of file to append to"
-msgstr "பின்னொட்டாக்க கோப்பின் தரவை பெற இயலவில்லை"
-
-#: ../daemon/gvfsbackendgphoto2.c:3109
-msgid "Error writing file"
-msgstr "கோப்பு எழுதுவதில் பிழை"
-
-#: ../daemon/gvfsbackendgphoto2.c:3156
-msgid "Not supported (not same directory)"
-msgstr "ஆதரவு இல்லை (அதே அடைவு அல்ல)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3168
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "ஆதரவில்லை (src dir ஆகும், dst dir ஆகும்)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3176
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "ஆதரவில்லை (src dir ஆகும், dst இருப்பில் உள்ள கோப்பு ஆகும்)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3188
-msgid "Not supported (src is file, dst is dir)"
-msgstr "ஆதரவில்லை (src கோப்பு ஆகும், dst dir ஆகும்)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP கிளையன் பிழை: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (தவறான குறிமுறை)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "அடைவு அறிவிப்பு துணைபுரியவில்லை"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "விண்டோஸ் பிணையம்"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "உள்ளமை பிணையம்"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "பிணைய இட கண்காணி"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s இல் %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "சாதனத்துக்கு இணைப்பு முறிந்த"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "சாதனத்துக்கு மென்பொருள் இற்றைப்படுத்தல் தேவை"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh நிரல் எதிர்பாராமல் வெளியேறியது "
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "புரவலன் பெயர் தெரியவில்லை"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "நிறுவ வழித்தடம் எதுவும் இல்லை"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "சேவையகத்தால் இணைப்பு தவிர்க்கப்பட்டது"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "புரவலன் குறியீட்டை சரி பார்க்க முடியவில்லை"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "ssh நிரலை உருவாக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ssh நிரலை உருவாக்க முடியவில்லை: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "புகுபதிவு நேரம் முடிவடைந்தது"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "குறியீட்டிற்கு கடவுச்சொல்லை உள்ளிடவும்"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "கடவுச்சொல்லை உள்ளிடவும்"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "கடவுச்சொல்லை அனுப்ப முடியவில்லை"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "எவ்வாறேனும் புகுபதிவு செய்யவும்"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "புகுபதிவை ரத்து செய்யவும்"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"தொலைவில் உள்ள கணினியின் (%s) குறிப்பு தெறியவில்லை .\n"
-"முதல் முறை அந்த கணினியில் உள் நுழையும்போது அந்த மாதிரி விழையும்.\n"
-"\n"
-"தொலைவில் உள்ள கணினி (%s) அனுப்பிய குறிப்பு. உங்களுக்கு கண்டிப்பாக வேண்டுமானால் "
-"தொடருங்கள், கணினி மேலாளரை அனுகுங்கள்."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "புகுபதிவு உரையாடல் ரத்தானது"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "புரவலன் அடையாள உறுதிப்படுத்தலை அனுப்ப முடியவில்லை"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "நெறிமுறை பிழை"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "%sஇல் sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "துணைபுரியும் sshஇன் கட்டளையை கண்டுபிடிக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "தோல்வி"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "தவறான பதில் கிடைத்துள்ளது"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "பின்சேமிப்பு கோப்பினை உருவாக்க போது பிழை: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "தற்காலிக கோப்பினை உருவாக்க முடியவில்லை"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "அடைவை ஒன்றின் மேல் ஒன்றாக நகர்த்த முடியவில்லை"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "பங்கீடு %s இல் %sக்கு கடவுச்சொல் தேவைப்படுகிறது"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "உள்ளார்ந்த பிழை (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "விண்டோஸ் பங்கீட்டை ஏற்ற முடியவில்லை"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "துணைபுரியாத தேடும் வகை"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "பின்சேமிப்பு கோப்பினை உருவாக்க முடியவில்லை: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "கோப்பு அழித்தலில் பிழை: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "கோப்பு நகர்த்துவதில் பிழை: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "இலக்கு கோப்பினை நீக்க முடியவில்லை: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "அடைவை நகர்த்த முடியவில்லை"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "விண்டோஸ் பங்கீடு கோப்பு முறைமை சேவை"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "%sஇல் விண்டோஸ் பங்கீடுகள்"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "கோப்பு ஏற்றித்தக்கதல்ல"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "ஒழுங்கான கோப்பு அல்ல"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "விண்டோஸ் பிணைய கோப்பு முறைமை சேவை"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "மீள்சேமிப்பு"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (மீள்சேமிப்பில்)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "மீள்சேமிப்பை அழிக்க முடியாது"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "மீள்சேமிப்பு அடைவின் அறிவிப்பு துணைபுரியவில்லை"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "தவறான பின்புல வகை"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "fdயை அனுப்புவதில் பிழை: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "செயல்பாடு பின்புலத்தால் துணைபுரியவில்லை"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Symlinks பின்புலத்தால் துணைபுரிவதில்லை"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "தவறான dbus தகவல்"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "பழைய டீமானை மாற்றவும்."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "fuse ஐ துவக்க வேண்டாம்."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS டீமான்"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GVFSக்கான முக்கியமான டீமான்"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "மேலும் தகவலுக்கு \"%s --help\"ஐ முயற்சிக்கவும்."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "உருவாக்கப்பட்ட சேயிலிருந்து தவறான அளவுருக்கள்"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automount செயலிழக்கப்பட்டது: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "குறிப்பிடப்பட்ட இடத்தை ஏற்ற முடியவில்லை"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "குறிப்பிடப்பட்ட இடத்தை ஏற்ற முடியவில்லை"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "இடம் ஏற்கனவே ஏற்றப்பட்டள்ளது"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "இடம் ஏற்றப்படுமாறு இல்லை"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s இயக்கி"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "நெகிழ்வட்டு இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "மென்பொருள் RAID இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "நாடா இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "ஜிப் இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Thumb இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "அதிகமாக சேமிக்கும் இயக்கி"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"ஊடகத்தை வெளியேற்ற முடியவில்லை, ஊடகத்தில் ஒன்று அல்லது பல தொகுதிகள் பணியில் இருக்கலாம்."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "இசை/தரவு கலந்த வட்டு"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "%s ஊடகம்"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s மறைகுறியாக்கப்பட்ட தரவு"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM வட்டு"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "வெற்று CD-ROM வட்டு"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R வட்டு"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "வெற்று CD-R வட்டு"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW வட்டு"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "வெற்று CD-RW வட்டு"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM வட்டு"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "வெற்று DVD-ROM வட்டு"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM வட்டு"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "வெற்று DVD-RAM வட்டு"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW வட்டு"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "வெற்று DVD-RW வட்டு"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R வட்டு"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "வெற்று DVD+R வட்டு"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW வட்டு"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "வெற்று DVD+RW வட்டு"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL வட்டு"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "வெற்று DVD+R DL வட்டு"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray வட்டு"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "வெற்று Blu-Ray வட்டு"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R வட்டு"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "வெற்று Blu-Ray R வட்டு"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW வட்டு"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "வெற்று Blu-Ray RW வட்டு"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD வட்டு"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "வெற்று HD DVD வட்டு"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R வட்டு"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "வெற்று HD DVD-R வட்டு"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW வட்டு"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "வெற்று HD DVD-RW வட்டு"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO வட்டு"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "வெற்று MO வட்டு"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "வட்டு"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "வெற்று வட்டு"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s : கோப்பினை திறப்பதில் பிழை: %s \n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, stdoutக்கு எழுதும் போது பிழை"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: வாசிப்பதில் பிழை: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: மூடுவதில் பிழை: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "இடம்... - இடங்களை நிலையான வெளியீடு உடன் சேர்."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"கோப்புகளை இடங்களில் சேர் மற்றும் நிலையான வெளியிக்கு அச்சிடு. இது வலக்கமான cat "
-"செயலாற்றியை போல் வேலைச்செய்கிறது, ஆனால் சொந்த கோப்புகளுக்கு பதிலாக gvfs இடத்தைப் "
-"பயன்படுத்தும்எடுத்துக்காட்டாக இதுப்போன்ற smb://server/resource/file.txtபகுதிகளுக்குச் "
-"சேர்"
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"குறிப்பு: சற்று பைப் வழியாக cat பன்னுங்க, உங்களுக்கு உருமாற்றும் வழிகள் -n, -T or "
-"தேவைப்பட்டால் அல்லதுமற்ற"
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: விடுபட்ட இடங்கள்"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s : இடத்தை திறப்பதில் பிழை: %s \n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s : பயன்பாட்டை திறப்பதில் பிழை: %s \n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "கோப்புகள்... - திறந்த கோப்புகள் பயன்பாட்டுடன் பதிவானவை."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"திறந்த கோப்பு(கள்) ஏற்கனவேயுள்ள பயன்பாட்டுடன் பதிவானவைகள் மற்றும் கையாழக்கூடிய கோப்பு "
-"வகையை சரர்ந்தவை"
-
-#~ msgid "File unavailable"
-#~ msgstr "கோப்பு இல்லை"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "%.1f kB ஊடகம்"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "%.1f MB ஊடகம்"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "%.1f GB ஊடகம்"
diff --git a/po/te.po b/po/te.po
deleted file mode 100644
index 6ce12d86..00000000
--- a/po/te.po
+++ /dev/null
@@ -1,1539 +0,0 @@
-# translation of te.po to Telugu
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Krishna Babu K <kkrothap@redhat.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: te\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-10 04:14+0000\n"
-"PO-Revision-Date: 2008-09-10 12:58+0530\n"
-"Last-Translator: Krishna Babu K <kkrothap@redhat.com>\n"
-"Language-Team: Telugu <en@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "కార్యము మద్దతీయబడదు, దస్త్రములు భిన్నమైన మౌంట్‌లనందు వున్నవి"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info నుండి చెల్లని తిరుగు విలువ"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info నుండి చెల్లని తిరుగు విలువ"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "స్ట్రీమ్ దస్త్రం వివరణిని పొందలేకపోయింది"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "తెరువుట నుండి చెల్లని తిరుగు విలువ"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "స్ట్రీమ్ దస్త్రం వివరిణిని పొందలేదు"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "కాల్ నుండి చెల్లని తిరుగు విలువ"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info నుండి చెల్లని తిరుగు విలువ"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "ఎన్‌క్లోసింగ్ మౌంట్ ను కనుగొనలేక పోయింది"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "సరికాని దస్త్రనామము %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info నుండి సరికాని తిరుగు విలువ"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir నుండి సరికాని తిరుగు విలువ"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file నుండి సరికాని తిరుగు విలువ"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "స్ట్రీమ్ నియమం నందు దోషం: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "స్ట్రీమ్ యొక్క ముగింపు"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "కార్యము రద్దుచేయబడింది"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "స్ట్రీమ్ పై సీక్ మద్దతీయబడదు"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "సవాలు సమాచారం కార్యము మద్దతీయబడదు"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "క్వరీ సమాచారం స్ట్రీమ్‌నందు మద్దతీయబడదు"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "మౌంట్ సమాచారాన్ని పొందునప్పుడు దోషం: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "డెమోన్ కు అనుసంధానించబడుతున్నప్పుడు దోషం: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "సాకెట్ సృష్టించుటలో దోషం: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "సాకెట్ కు అనుసంధానించుటలో దోషం: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "సరికాని దస్త్రం సమాచారం రూపం"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "చెల్లని యాట్రిబ్యూట్ సమాచారం జాబితా సారం"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "D-Bus కు అనుసంధానించుటలో దోషం: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s ఫైల్‌సిస్టమ్ సేవ"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "దోషం: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "ఉపయోగం: %s --స్పానర్ dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "ఉపయోగం: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "ఏ మౌంట్ రకం తెలుపలేదు"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s కొరకు మౌంట్‌సూచి ఇప్పటికే నడుస్తోంది"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "మౌంట్ డెమోన్ ను ప్రారంభించుటలో దోషం"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "%s పై /"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "ఏ అతిధేయనామము తెలుపబడలేదు"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "చెల్లని మౌంట్ స్పెక్"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "దస్త్రం లేదు"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "ఆ దస్త్రము సంచయంకాదు"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "వ్రాయుము"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "తాత్కాలిక సంచయాన్ని సృష్టించలేదు"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "అటువంటి దస్త్రముగాని లేదా సంచయంగాని లేదు"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "సంచయం ఖాళీగా లేదు"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "సంచయంనుండి దస్త్రమును నకలుతీయలేము"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD సృష్టీకరణి"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "దస్త్రం ఉంది"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "బ్యాక్ఎండ్ చేత కార్యము మద్దతునీయబడదు"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "లక్ష్య మార్గమునందు అటువంటి దస్త్రముగాని లేదా సంచయంగాని లేదు"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "సంచయంనందు సంచయంను నకలుతీయలేము"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "లక్ష్యపు దస్త్రము ఉంది"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "సంచయంను మరలమరలా నకలు తీయలేము"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "మద్దతీయబడదు"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "సిస్టమ్ బస్‌కు అనుసంధానం కాలేదు"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "libhal సందర్భంను సృష్టించలేదు"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "libhalను సిద్దము చేయలేదు"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "ఏ డ్రైవ్ తెలుపబడలేదు"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "డ్రైవ్ %s ను కనుగొనలేకపోయింది"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "డ్రైవ్ %s ఆడియో దస్త్రములను కలిగిలేదు"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda %sనందు మౌంట్ అయినది"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "ఆడియో డిస్కు"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "దస్త్ర వ్యవస్థ రద్దీగా ఉంది: %d తెరిచిన దస్త్రం"
-msgstr[1] "దస్త్ర వ్యవస్థ రద్దీగా ఉంది: %d తెరిచిన దస్త్రం"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "%2$s డ్రై నందు %1$s లాంటి దస్త్రం లేదు"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "డ్రైవ్ %s పైన 'paranoia' నుండి దోషం"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "డ్రైవ్ %s పైన స్ట్రీమ్ నందు దోషం వెతుకుతోంది"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "అటువంటి దస్త్రం లేదు"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "ఆ దస్త్రం లేదు లేదా అది ఆడియో ట్రాక్ కాదు"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "ఆడియో CD దస్త్రవ్యవస్థ సేవ"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "కంప్యూటర్"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "దస్త్రవ్యవస్థ"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "సంచయంను తెరువలేదు"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "మౌంటబుల్ దస్త్రాన్ని తెరువలేదు"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "అంతర్గత దోషం: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "దస్త్రాన్ని మౌంట్ చేయలేము"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "డ్రైవ్‌నందు యెటువంటి మాధ్యమం లేదు"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "మౌంటబుల్ దస్త్రం కాదు"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "దస్త్రాన్ని అన్‌మౌంట్ చేయలేము"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "దస్త్రాన్ని బయటకు పంపలేము"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP దోషం: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "ప్రతిస్పందనను పార్శ్ చేయలేము"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "ఖాళీ ప్రతిస్పందన"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "సేవికనుండి అనుకోని ప్రత్యుత్తరము"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "ప్రతిస్పందన చెల్లనిది"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV భాగస్వామ్యం"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "%s కొరకు సంకేతపదాన్ని ప్రవేశపెట్టుము"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "ప్రాక్సీ సంకేతపదంను ప్రవేశపెట్టండి"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "అది WebDAV చేతనమైన భాగస్వామ్యంకాదు"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "%s నందు WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "అభ్యర్ధనను సృష్టించలేక పోయింది"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "లక్ష్యపు దస్త్రం ఇప్పటికే ఉంది"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "ఆ దస్త్రం బహిర్గతంగా సవరించబడింది"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "బ్యాక్‌అప్ దస్త్రం సృష్టీకరణ విఫలమైంది"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "దస్త్రమును లేదా డైరెక్టరీని పర్యవేక్షించలేదు."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "నెట్ వర్క్"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "ఖాతాలు మద్దతీయనివి"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "హోస్ట్‍ అనుసంధానంను మూసివేసినది"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "డాటా అనుసంధానంను తెరువలేదు. బహుశా మీ ఫైర్‌వాల్ దీనిని నిరోధిస్తోందా?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "డాటా అనుసంధానం ముయబడింది"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "ఆపరేషన్ విఫలమైంది"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "సేవికనందు ఖాళీ మిగిలిలేదు"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "ఆపరేషన్ మద్దతీయుటలేదు"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "అనుమతి తిరస్కరించబడినది"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "పుట రకము తెలియనిది"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "చెల్లని దస్త్రమునామము"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "చెల్లని ప్రత్యుత్తరము"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "విరిగిన బదిలీకరణ"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "హోస్ట్‍‌కు అనుసంధానం కాలేకపోయింది"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "%sపైన ftp కొరకు సంకేతపదమును ప్రవేశపెట్టండి"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "సంకేతపదం డైలాగ్ రద్దుచేయబడింది"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "%s పైన ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "%2$s పైన %1$sలా ftp"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "దస్త్రము సంచయం"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "బ్యాక్అప్స్‍ యింకా మద్దతునీయుటలేదు"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "దస్త్రమునామము మరీ పొడవైనది"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "గమ్య దస్త్రనామము చెల్లనిది"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: డైరెక్టరీ లేదా దస్త్రము వుంది"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: అటువంటి దస్త్రము లేదా డైరక్టరీ లేదు"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: చెల్లని దస్త్రనామము"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: మద్దతీయుటలేదు"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "డిజిటల్ కామెరా(%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s కేమెరా"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s ఆడియో ప్లేయర్"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "కేమెరా"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "ఆడియో ప్లేయర్"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "సంచయం జాబితాను పొందుటలో విఫలమైంది"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "ఎటువంచి పరికరము తెలుపబడలేదు"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "gphoto2 సందర్భంను సృష్టించలేదు"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "కామెరా సృష్టించుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "పరికరము సమాచారం లోడ్‌చేయుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "పరికరము సమాచారం చూడుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "పరికరము సమాచారం పొందుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "కామెరా సంప్రదింపుల పోర్ట్‍‌ను అమర్చుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "కామెరాను సిద్దముచేయుటలో దోషము"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "%s పై gphoto2 మౌంట్"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "ఎటువంటి కామెరా తెలుపబడలేదు"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "దస్త్రము ఆబ్జక్‌ను సృష్టించుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "దస్త్రమును పొందుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "దస్త్రమునుండి డాటాను పొందుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "కామెరా %s నందు స్ట్రీమ్ సీకింగ్ దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "సంచయం కాదు"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "దస్త్రము జాబితాను పొందుటలో విఫలమైంది"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "డైరెక్టరీ సృష్టించుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "నామము యిప్పటికే వుంది"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "కొత్త నామము మరీ పొడవైనది"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "డైరెక్టరీ పునఃనామకరణ చేయుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "దస్త్రము పునఃనామకరణలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "డైరెక్టరీ '%s'లో ఖాళీలేదు"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "డైరక్టీ తొలగించుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "దస్త్రము తొలగించుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "డైరక్టరీకి వ్రాయలేదు"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "దీనికి కలుపుటకు కొత్త దస్త్రమును కేటాయించలేదు"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "దీనికి కలుపుటకు దస్త్రమును చదువలేదు"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "దీనికి కలుపుటకు దస్త్రముయొక్క డాటాను పొందలేదు"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "దస్త్రముకు వ్రాయుటలో దోషము"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "మద్దతీయుటలేదు (అదే డైరక్టరీకాదు)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "మద్దతీయుటలేదు (మూలం డైరెక్టరీనే, గమ్యం డైరక్టరీనే)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "మద్దతీయుట లేదు (మూలం డైరెక్టరీ, గమ్యం కలిగివున్న దస్త్రము)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "మద్దతీయుటలేదు (మూలం దస్త్రము, గమ్యం డైరెక్టరీ)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP కక్షిదారి దోషం: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (సరికాని ఎన్కోడింగ్)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "సంచయం ప్రకటన మద్దతిచ్చునదికాదు"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "విండోస్ నెట్వర్కు"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "స్థానిక నెట్వర్క్‍"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "నెట్వర్క్‍ స్థానము పర్యవేక్షణి"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s పైన %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "పరికరమునకు అనుసంధానం కోల్పోయింది"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "పరికరంకు సాఫ్ట్‍‌వేర్ నవీకరణ అవసరము"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh ప్రోగ్రామ్ అనుకోకుండా బయటకువచ్చింది"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "అతిధేయనామము తెలియనిది"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "అతిధేయ కు ఏ రూట్ లేదు"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "సేవిక చేత అనుసంధానం తిరస్కరించబడింది"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "అతిధేయ కీ నిర్ధారణ విఫలమైంది"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "ssh ప్రోగ్రమ్ ను విస్తరింప లేదు"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ssh ప్రోగ్రామ్ ను విస్తరింపలేదు: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "లాగిన్ అవుతున్నప్పుడు కాలముమించినది"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "కీ కొరకు సంకేతపదాన్ని ప్రవేశపెట్టండి"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "రహస్య పదమును ప్రవేశపెట్టండి"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "సంకేతపదాన్ని పంపలేదు"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "ఏవిధంగానైనా లాగిన్ అవ్వుము"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "లాగిన్ రద్దుచేయుము"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"దూరస్థ కంప్యూటర్ (%s)యొక్క గుర్తింపు తెలియనిది.\n"
-"మీరు కంప్యూటర్‌కు మొదటిసారి లాగిన్ అయినప్పుడు ఇది జరుగుతుంది.\n"
-"\n"
-"దూరస్థ కంప్యూటర్ ద్వారా పంపబడిన గుర్తింపు %s. మీరు యిలా కొనసాగించుట "
-"ఖచ్చితంగా సురక్షితమైన అనుకుంటే, సిస్టమ్ నిర్వాహకుడను సంప్రదించండి."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "లాగిన్ డైలాగ్ రద్దుచేయబడింది."
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "హోస్ట్‍ గుర్తింపు నిర్ధారణను పంపలేదు"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "నియమం దోషం"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "%s పై sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "మద్దతివ్వబడే ssh ఆదేశాన్ని కనుగొనలేకపోయింది"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "వైఫల్యం"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "చెల్లని ప్రత్యుత్తరం స్వీకరించబడింది"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "బ్యాక్‌అప్ దస్త్రం సృష్టించటలో దోషం: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "తాత్కాలిక దస్త్రాన్ని సృష్టించలేక పోయింది"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "సంచయంను సంచయం మీదకు కదుపలేము"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "%2$s పైన %1$s పంచుకోవడానికి సంకేతపదం అవసరం"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "అంతర్గత దోషం (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "విండోల భాగస్వామ్యాన్ని మౌంట్ చేయుటకు విఫలమైంది"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "మద్దతీయబడని సీక్ రకము"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "బ్యాక్అప్ దస్త్రము సృష్టీకరణ విఫలమైంది: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "దస్త్రము తొలగించుటలో దోషం: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "దస్త్రము కదుపుటలో దోషం: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "లక్ష్యపు దస్త్రంను తీసివేయుటలో దోషం: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "సంచయంను మరలమరలా కదుపలేము"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "విండోలు దస్త్రవ్యవస్థ సేవను పంచుకొంటాయి"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "%s పైన విండోస్ భాగస్వామ్యం"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "ఆ దస్త్రం మౌంటవునది కాదు"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "సాదారణ దస్త్రం కాదు"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "విండోస్ నెట్వర్క్‍ దస్త్రవ్యవస్థ సేవ"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "చెత్తకుండి"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (ట్రాష్ నందు)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "చెత్తను తొలగించ లేదు"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "చెత్త సంచయం యొక్క ప్రకటన మద్దతునీయదు"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "చెల్లని బ్యాక్ఎండ్ రకం"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "fd పంపుటలో దోషం: %s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "బ్యాక్ఎండ్ ద్వారా సిమ్‌లింక్స్ మద్దతునీయబడవు"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "సరికాని dbus సందేశం"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "ాత డెమోన్ ను పునఃస్థాపించుమ.ు"
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "ఫ్యూజ్ ను ప్రారంభించ వద్దు."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS డెమోన్"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GVFS కొరకు ముఖ్య డెమోన్"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "ఎక్కువ సమాచారం కొరకు \"%s --సహాయం\" ను ప్రయత్నించండి."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "ఉద్బవించిన శిశువునుండి చెల్లని ఆర్గుమెంట్లు"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "స్వయంచాలకమౌంట్ విఫలమైంది: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "తెలుపబడిన స్థానము మౌంట్ కాలేదు"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "తెలుపబడిన స్థానము మద్దతివ్వబడలేదు"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "స్థానము ఇప్పటికే మౌంటుఅయిఉంది"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "స్థానము మౌంటగునది కాదు"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s డ్రైవ్"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "ఫ్లాపీ డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "సాఫ్టువేర్ RAID డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "ఫైర్‌వైర్ డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "టేప్ డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "కాంపాక్ట్‌ఫ్లాష్ డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "మెమొరీస్టిక్ డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "స్మార్ట్‌మాద్యమం డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "జిప్ డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "జాజ్ డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "థంబ్ డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "అధిక నిల్వ డ్రైవ్"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"మాద్యమాన్ని బయటకు పంపుట విఫలమైంది, మాద్యమం పైని ఒకటి లేదా ఎక్కువ వాల్యూమ్స్ "
-"రద్దీగా ఉన్నాయి."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "మిశ్రమ ఆడియో/డాటా డిస్కు"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "%s మాద్యమం"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s ఎన్క్రిప్టెడ్ డాటా"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "ఖాళీ CD-ROM డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "ఖాళీ CD-R డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "ఖాళీ CD-RW డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "ఖాళీ DVD-ROM డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "ఖాళీ DVD-RAM డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "ఖాళీ DVD-RW డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "ఖాళీ DVD+R డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "ఖాళీ DVD+RW డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "ఖాళీ DVD+R DL డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "ఖాళీ Blu-Ray డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "ఖాళీ Blu-Ray R డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "ఖాళీ Blu-Ray RW డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "ఖాళీ HD DVD డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "ఖాళీ HD DVD-R డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "ఖాళీ HD DVD-RW డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "ఖాళీ MO డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "డిస్కు"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "ఖాళీ డిస్కు"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: దొషం దస్త్రాన్ని తెరువుటలో: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, దోషం stdout కు వ్రాస్తోంది"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: దోషం చదువుతోంది: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:దోషం మూసివేస్తోంది: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "స్థానము... - ప్రామాణిక అవుట్‌పుట్ కు స్థానములను కలుపుట."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"స్థానములవద్ద దస్త్రాలను కులుపుము మరియు ప్రామాణిక అవుట్‌పుట్ కు ముద్రించుము. ఇది "
-"సాంప్రదాయ cat సౌలబ్యంలాగా నే పనిచేస్తుంది, అయితే gvfs స్థానమును స్థానిక దస్త్రముల "
-"బదులుగా ఉపయోగిస్తుంది: ఉదాహరణకు మీరు smb://server/resource/file.txt వంటి "
-"దాన్ని స్థానముగా కలుపుటకొరకు ఉపయోగించవచ్చు."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"గమనిక: మీకు రూపీకరణ ఐచ్చికం -n, -T లేదా ఇతరం అవసరం అయితే cat గుండా "
-"పైప్ చేయుము."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: తప్పిపోయిన స్థానములు"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: దోషం స్థానము తెరువుటలో: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: దోషం అనువర్తనం దించుటలో: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "దస్త్రములు... - నమోదైన అనువర్తనం తో దస్త్రములను తెరువుము."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"ఈ రకమైన దస్త్రము(ల) ను సంభాలించుటకు నమోదైన అప్రమేయ అనువర్తనంతో దస్త్రము ను "
-"తెరువుము."
-
diff --git a/po/th.po b/po/th.po
deleted file mode 100644
index eda582ed..00000000
--- a/po/th.po
+++ /dev/null
@@ -1,1571 +0,0 @@
-# Thai translation for gvfs.
-# Copyright (C) 2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gvfs package.
-#
-# Theppitak Karoonboonyanan <thep@linux.thai.net>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-24 12:13+0700\n"
-"PO-Revision-Date: 2008-08-24 12:17+0700\n"
-"Last-Translator: Theppitak Karoonboonyanan <thep@linux.thai.net>\n"
-"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "ไม่รองรับการกระทำนี้ เนื่องจากแฟ้มอยู่ใต้จุดเมานท์คนละจุดกัน"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "มีการคืนค่าที่ใช้การไม่ได้จาก get_info"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "มีการคืนค่าที่ใช้การไม่ได้จาก query_info"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "ไม่สามารถหยิบ file descriptor ของสตรีมมาใช้ได้"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "มีการคืนค่าที่ใช้การไม่ได้จาก open"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "ไม่สามารถหยิบ file descriptor ของสตรีมมาใช้ได้"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "มีการคืนค่าที่ใช้การไม่ได้จาก call"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "มีการคืนค่าที่ใช้การไม่ได้จาก get_filesystem_info"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "ไม่สามารถหาจุดเมานท์ที่บรรจุ"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "ชื่อแฟ้ม %s ใช้ไม่ได้"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "มีการคืนค่าที่ใช้การไม่ได้จาก query_filesystem_info"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "มีการคืนค่าที่ใช้การไม่ได้จาก monitor_dir"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "มีการคืนค่าที่ใช้การไม่ได้จาก monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "เกิดข้อผิดพลาดในโพรโทคอลของสตรีม: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "จบสตรีม"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "ปฏิบัติการถูกยกเลิก"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "ไม่รองรับการเลื่อนตำแหน่งในสตรีม"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "ไม่รองรับการสอบถามข้อมูล"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "ไม่รองรับการสอบถามข้อมูลในสตรีม"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "เกิดข้อผิดพลาดขณะอ่านข้อมูลการเมานท์: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "เกิดข้อผิดพลาดขณะเชื่อมต่อไปยังดีมอน: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "เกิดข้อผิดพลาดขณะสร้างซ็อกเก็ต: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "เกิดข้อผิดพลาดขณะเชื่อมต่อไปยังซ็อกเก็ต: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "รูปแบบของข้อมูลเกี่ยวกับแฟ้มผิดพลาด"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "เนื้อหารายการข้อมูลคุณลักษณะผิดพลาด"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "เกิดข้อผิดพลาดขณะเชื่อมต่อไปยัง D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "บริการระบบแฟ้ม %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "ผิดพลาด: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "วิธีใช้: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "วิธีใช้: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "ไม่ได้ระบุชนิดของการเมานท์"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "จุดเมานท์สำหรับ %s ได้ทำงานอยู่แล้ว"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "เกิดข้อผิดพลาดขณะตั้งต้นดีมอนสำหรับเมานท์"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ ที่ %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "ไม่ได้ระบุชื่อโฮสต์"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "ข้อกำหนดการเมานท์ผิดพลาด"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "ไม่มีแฟ้มอยู่"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "แฟ้มดังกล่าวไม่ใช่ไดเรกทอรี"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "เขียนแผ่น"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "ไม่สามารถสร้างไดเรกทอรีชั่วคราว"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendgphoto2.c:2690
-#, c-format
-msgid "No such file or directory"
-msgstr "ไม่มีแฟ้มหรือไดเรกทอรีดังกล่าว"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "ไดเรกทอรีไม่ว่าง"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "ไม่สามารถคัดลอกแฟ้มทับไดเรกทอรี"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "แบ็กเอนด์เขียนซีดี/ดีวีดี"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2763
-msgid "File exists"
-msgstr "แฟ้มมีอยู่แล้ว"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "ไม่มีแฟ้มหรือไดเรกทอรีดังกล่าวในพาธปลายทาง"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "ไม่สามารถคัดลอกไดเรกทอรีทับไดเรกทอรี"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "มีแฟ้มปลายทางอยู่แล้ว"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "ไม่สามารถคัดลอกไดเรกทอรีทั้งยวง"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2348
-#: ../daemon/gvfsbackendgphoto2.c:2556 ../daemon/gvfsbackendgphoto2.c:2651
-#: ../daemon/gvfsbackendgphoto2.c:2742
-msgid "Not supported"
-msgstr "ไม่รองรับ"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "ไม่สามารถเชื่อมต่อไปยังบัสระบบ"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "ไม่สามารถสร้างบริบทสำหรับ libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "ไม่สามารถตั้งต้น libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "ไม่ได้ระบุไดรว์"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "หาไดรว์ %s ไม่พบ"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "ไดรว์ %s ไม่ได้บรรจุแฟ้มเสียง"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "การเมานท์ cdda ที่ %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "แผ่นเพลง"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "ระบบแฟ้มถูกใช้งานอยู่: เปิดแฟ้มอยู่ %d แฟ้ม"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "ไม่มีแฟ้ม %s ที่ว่าในไดรว์ %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "เกิดข้อผิดพลาดจาก 'paranoia' ที่ไดรว์ %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "เกิดข้อผิดพลาดขณะเลื่อนตำแหน่งในสตรีมที่ไดรว์ %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1711
-#, c-format
-msgid "No such file"
-msgstr "ไม่มีแฟ้มดังกล่าว"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "ไม่มีแฟ้มดังกล่าวอยู่ หรือไม่ใช่ร่องเสียง"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "บริการระบบแฟ้มซีดีเพลง"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "คอมพิวเตอร์"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "ระบบแฟ้ม"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1703
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "ไม่สามารถเปิดไดเรกทอรี"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "ไม่สามารถเปิดแฟ้มสำหรับเมานท์"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "เกิดข้อผิดพลาดภายใน: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "ไม่สามารถเมาทน์แฟ้ม"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "ไม่มีสื่อในไดรว์"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "ไม่ใช่แฟ้มสำหรับเมานท์"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "ไม่สามารถเลิกเมาทน์แฟ้ม"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "ไม่สามารถดันแฟ้มออก"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "ข้อผิดพลาด HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "ไม่สามารถแจงคำตอบ"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "คำตอบว่างเปล่า"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "ได้รับคำตอบที่ไม่คาดหมายจากเซิร์ฟเวอร์"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "คำตอบใช้ไม่ได้"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "การเปิดให้ใช้ร่วมผ่าน WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "กรุณาป้อนรหัสผ่านสำหรับ %s"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "กรุณาป้อนรหัสผ่านสำหรับพร็อกซี"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr "ไม่ใช่แหล่งใช้ร่วมที่ใช้ WebDAV ได้"
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV ที่ %s"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "ไม่สามารถสร้างคำร้องขอ"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "มีแฟ้มปลายทางอยู่ก่อนแล้ว"
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "แฟ้มถูกเปลี่ยนแปลงจากโปรแกรมภายนอก"
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "สร้างแฟ้มสำรองไม่สำเร็จ"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "ไม่สามารถติดตามแฟ้มหรือไดเรกทอรี"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "เครือข่าย"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "ไม่รองรับการเข้าระบบผ่านบัญชีผู้ใช้"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "โฮสต์ปิดการเชื่อมต่อ"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "ไม่สามารถเปิดการเชื่อมต่อเพื่อรับส่งข้อมูล บางทีไฟร์วอลล์ของคุณอาจปิดกั้นไว้"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "การเชื่อมต่อเพื่อรับส่งข้อมูลถูกปิด"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "ปฏิบัติการล้มเหลว"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "ไม่มีที่ว่างเหลือในเซิร์ฟเวอร์"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "ไม่รองรับปฏิบัติการนี้"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "ไม่ได้รับอนุญาต"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "ได้รับชนิดของเพจที่ไม่รู้จัก"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "ชื่อแฟ้มใช้ไม่ได้"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "ได้รับคำตอบที่ใช้ไม่ได้"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "การส่งข้อมูลขาดตอน"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "ไม่สามารถเชื่อมต่อไปยังโฮสต์"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "กรุณาป้อนรหัสผ่านสำหรับ ftp ที่ %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "กล่องโต้ตอบรหัสผ่านถูกยกเลิก"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp ที่ %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp ในนาม %s ที่ %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "แฟ้มเป็นไดเรกทอรี"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "ยังไม่รองรับการสำรองแฟ้ม"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "ชื่อแฟ้มยาวเกินไป"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "ชื่อแฟ้มปลายทางใช้ไม่ได้"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: มีแฟ้มหรือไดเรกทอรีอยู่ก่อนแล้ว"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: ไม่มีแฟ้มหรือไดเรกทอรีดังกล่าว"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: ชื่อแฟ้มใช้ไม่ได้"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: ไม่รองรับ"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "กล้องดิจิทัล (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "กล้อง %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "เครื่องเล่นเพลง %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "กล้อง"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "เครื่องเล่นเพลง"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2008
-msgid "Failed to get folder list"
-msgstr "ดึงรายชื่อโฟลเดอร์ไม่สำเร็จ"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "ไม่ได้ระบุอุปกรณ์"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "ไม่สามารถสร้างบริบทสำหรับ gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "เกิดข้อผิดพลาดขณะสร้างอ็อบเจกต์กล้องถ่ายรูป"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482 ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading device information"
-msgstr "เกิดข้อผิดพลาดขณะโหลดข้อมูลอุปกรณ์"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up device information"
-msgstr "เกิดข้อผิดพลาดขณะหาข้อมูลอุปกรณ์"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting device information"
-msgstr "เกิดข้อผิดพลาดขณะอ่านข้อมูลอุปกรณ์"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting up camera communications port"
-msgstr "เกิดข้อผิดพลาดขณะกำหนดค่าพอร์ตสื่อสารของกล้องถ่ายรูป"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "เกิดข้อผิดพลาดขณะตั้งค่าเริ่มต้นของกล้องถ่ายรูป"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "การเมานท์ gphoto2 ที่ %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "ไม่ได้ระบุกล้องถ่ายรูป"
-
-#: ../daemon/gvfsbackendgphoto2.c:1719
-msgid "Error creating file object"
-msgstr "เกิดข้อผิดพลาดขณะสร้างอ็อบเจกต์แฟ้ม"
-
-#: ../daemon/gvfsbackendgphoto2.c:1733
-msgid "Error getting file"
-msgstr "เกิดข้อผิดพลาดขณะหยิบแฟ้มมาใช้"
-
-#: ../daemon/gvfsbackendgphoto2.c:1742
-msgid "Error getting data from file"
-msgstr "เกิดข้อผิดพลาดขณะอ่านข้อมูลจากแฟ้ม"
-
-#: ../daemon/gvfsbackendgphoto2.c:1836 ../daemon/gvfsbackendgphoto2.c:3010
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "เกิดข้อผิดพลาดขณะเลื่อนตำแหน่งในสตรีมที่กล้องถ่ายรูป %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1975 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "ไม่ใช่ไดเรกทอรี"
-
-#: ../daemon/gvfsbackendgphoto2.c:2071
-msgid "Failed to get file list"
-msgstr "ดึงรายชื่อแฟ้มไม่สำเร็จ"
-
-#: ../daemon/gvfsbackendgphoto2.c:2360
-msgid "Error creating directory"
-msgstr "เกิดข้อผิดพลาดขณะสร้างไดเรกทอรี"
-
-#: ../daemon/gvfsbackendgphoto2.c:2568
-msgid "Name already exists"
-msgstr "มีชื่อซ้ำอยู่ก่อนแล้ว"
-
-#: ../daemon/gvfsbackendgphoto2.c:2579 ../daemon/gvfsbackendgphoto2.c:3200
-msgid "New name too long"
-msgstr "ชื่อใหม่ยาวเกินไป"
-
-#: ../daemon/gvfsbackendgphoto2.c:2589 ../daemon/gvfsbackendgphoto2.c:3211
-msgid "Error renaming dir"
-msgstr "เกิดข้อผิดพลาดขณะเปลี่ยนชื่อไดเรกทอรี"
-
-#: ../daemon/gvfsbackendgphoto2.c:2601 ../daemon/gvfsbackendgphoto2.c:3223
-msgid "Error renaming file"
-msgstr "เกิดข้อผิดพลาดขณะเปลี่ยนชื่อแฟ้ม"
-
-#: ../daemon/gvfsbackendgphoto2.c:2664
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "ไดเรกทอรี '%s' ไม่ว่าง"
-
-#: ../daemon/gvfsbackendgphoto2.c:2675
-msgid "Error deleting directory"
-msgstr "เกิดข้อผิดพลาดขณะลบไดเรกทอรี"
-
-#: ../daemon/gvfsbackendgphoto2.c:2700
-msgid "Error deleting file"
-msgstr "เกิดข้อผิดพลาดขณะลบแฟ้ม"
-
-#: ../daemon/gvfsbackendgphoto2.c:2752
-msgid "Can't write to directory"
-msgstr "ไม่สามารถเขียนลงในไดเรกทอรี"
-
-#: ../daemon/gvfsbackendgphoto2.c:2799
-msgid "Cannot allocate new file to append to"
-msgstr "ไม่สามารถสร้างแฟ้มใหม่เพื่อเขียนต่อท้าย"
-
-#: ../daemon/gvfsbackendgphoto2.c:2813
-msgid "Cannot read file to append to"
-msgstr "ไม่สามารถอ่านแฟ้มที่จะเขียนต่อท้าย"
-
-#: ../daemon/gvfsbackendgphoto2.c:2823
-msgid "Cannot get data of file to append to"
-msgstr "ไม่สามารถอ่านข้อมูลจากแฟ้มที่จะเขียนต่อท้าย"
-
-#: ../daemon/gvfsbackendgphoto2.c:3109
-msgid "Error writing file"
-msgstr "เกิดข้อผิดพลาดขณะเขียนแฟ้ม"
-
-#: ../daemon/gvfsbackendgphoto2.c:3156
-msgid "Not supported (not same directory)"
-msgstr "ไม่รองรับ (ไม่ใช่ไดเรกทอรีเดียวกัน)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3168
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "ไม่รองรับ (ต้นทางเป็นไดเรกทอรี, ปลายทางเป็นไดเรกทอรี)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3176
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "ไม่รองรับ (ต้นทางเป็นไดเรกทอรี, ปลายทางเป็นแฟ้มที่มีอยู่)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3188
-msgid "Not supported (src is file, dst is dir)"
-msgstr "ไม่รองรับ (ต้นทางเป็นแฟ้ม, ปลายทางเป็นไดเรกทอรี)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "ข้อผิดพลาดของลูกข่าย HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (รหัสอักขระผิดรูปแบบ)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "ไม่รองรับการแจ้งเหตุไดเรกทอรี"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "เครือข่ายวินโดวส์"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "เครือข่ายท้องถิ่น"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "หน้าต่างติดตามตำแหน่งในเครือข่าย"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s ที่ %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "การเชื่อมต่อไปยังอุปกรณ์ถูกตัดขาด"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "อุปกรณ์ต้องการซอฟต์แวร์รุ่นใหม่"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "โปรแกรม ssh จบการทำงานกะทันหัน"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "ไม่รู้จักชื่อโฮสต์"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "ไม่มีเส้นทางไปยังโฮสต์"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "เซิร์ฟเวอร์ปฏิเสธการเชื่อมต่อ"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "การตรวจสอบกุญแจสำหรับโฮสต์ไม่ผ่าน"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "ไม่สามารถ spawn โปรแกรม ssh"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ไม่สามารถ spawn โปรแกรม ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "หมดเวลาขณะเข้าระบบ"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "กรุณาป้อนวลีรหัสผ่านสำหรับกุญแจ"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "กรุณาป้อนรหัสผ่าน"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "ไม่สามารถส่งรหัสผ่าน"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "เข้าระบบต่อไป"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "ยกเลิกการเข้าระบบ"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"ไม่รู้จักเอกลักษณ์ของคอมพิวเตอร์ (%s) ในเครือข่าย\n"
-"เหตุการณ์นี้จะเกิดเมื่อคุณเข้าระบบไปยังคอมพิวเตอร์อื่นเป็นครั้งแรก\n"
-"\n"
-"ข้อความบอกเอกลักษณ์ที่เครื่องฝั่งโน้นส่งมาคือ %s ถ้าคุณต้องการมั่นใจว่าปลอดภัยที่จะดำเนินการต่อ "
-"กรุณาติดต่อผู้ดูแลระบบ"
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "กล่องโต้ตอบเข้าระบบถูกยกเลิก"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "ไม่สามารถส่งคำยืนยันเอกลักษณ์โฮสต์"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "โพรโทคอลผิดพลาด"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp ที่ %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "ไม่พบคำสั่ง ssh ที่รองรับ"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "ล้มเหลว"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "ได้รับคำตอบที่ใช้ไม่ได้"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "เกิดข้อผิดพลาดขณะสร้างแฟ้มสำรอง: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "ไม่สามารถสร้างแฟ้มชั่วคราว"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "ไม่สามารถย้ายไดเรกทอรีทับไดเรกทอรี"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "ต้องใช้รหัสผ่านในการเข้าใช้แหล่งใช้ร่วม %s ที่ %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "เกิดข้อผิดพลาดภายใน (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "เมาทน์แหล่งใช้ร่วมของวินโดวส์ไม่สำเร็จ"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "ไม่รองรับการเลื่อนตำแหน่งวิธีนี้"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "สร้างแฟ้มสำรองไม่สำเร็จ: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "เกิดข้อผิดพลาดขณะลบแฟ้ม: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "เกิดข้อผิดพลาดขณะย้ายแฟ้ม: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "เกิดข้อผิดพลาดขณะลบแฟ้มปลายทาง: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "ไม่สามารถย้ายไดเรกทอรีทั้งยวง"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "บริการระบบแฟ้มแหล่งใช้ร่วมของวินโดวส์"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "แหล่งใช้ร่วมของวินโดวส์ที่ %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "แฟ้มเมานท์ไม่ได้"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "ไม่ใช่แฟ้มปกติ"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "บริการระบบแฟ้มในเครือข่ายของวินโดวส์"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "ถังขยะ"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (ในถังขยะ)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "ไม่สามารถลบขยะ"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "ไม่รองรับการแจ้งเหตุไดเรกทอรีถังขยะ"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "ชนิดแบ็กเอนด์ใช้ไม่ได้"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "เกิดข้อผิดพลาดขณะส่ง fd: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "แบ็กเอนด์ไม่รองรับปฏิบัติการ"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "แบ็กเอนด์ไม่รองรับการใช้จุดเชื่อมโยง"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "ข้อความ dbus ใช้ไม่ได้"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "แทนที่ดีมอนเดิม"
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "ไม่ต้องเรียก fuse ทำงาน"
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "ดีมอน GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "ดีมอนหลักสำหรับ GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "ลองใช้ \"%s --help\" เพื่อดูรายละเอียดเพิ่มเติม"
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "ได้รับอาร์กิวเมนต์ผิดพลาดจากโพรเซสลูกที่ spawn ออกไป"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Automount ล้มเหลว: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "ตำแหน่งที่ระบุไม่ได้ถูกเมานท์"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "ไม่รองรับตำแหน่งที่ระบุ"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "ตำแหน่งถูกเมานท์ไว้ก่อนแล้ว"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "ตำแหน่งไม่สามารถเมานท์ได้"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "ไดรว์ %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "ไดรว์ %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "ไดรว์ฟลอปปี้"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "ไดรว์ RAID แบบซอฟต์แวร์"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "ไดรว์ USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ไดรว์ ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "ไดรว์ SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "ไดรว์ไฟร์ไวร์"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "ไดรว์เทป"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "ไดรว์ CompactFlash"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "ไดรว์ MemoryStick"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "ไดรว์ SmartMedia"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "ไดรว์ SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "ไดรว์ Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "ไดรว์ Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Thumb Drive"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "ไดรว์แหล่งเก็บข้อมูล"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "ไม่สามารถดันสื่อออก: มีโวลุมตั้งแต่หนึ่งโวลุมขึ้นไปในสื่อกำลังถูกใช้งานอยู่"
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "แผ่นผสมเพลง/ข้อมูล"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "สื่อ %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "ข้อมูลเข้ารหัสลับ %s"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "แผ่น CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "แผ่น CD-ROM เปล่า"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "แผ่น CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "แผ่น CD-R เปล่า"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "แผ่น CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "แผ่น CD-RW เปล่า"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "แผ่น DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "แผ่น DVD-ROM เปล่า"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "แผ่น DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "แผ่น DVD-RAM เปล่า"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "แผ่น DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "แผ่น DVD-RW เปล่า"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "แผ่น DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "แผ่น DVD+R เปล่า"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "แผ่น DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "แผ่น DVD+RW เปล่า"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "แผ่น DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "แผ่น DVD+R DL เปล่า"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "แผ่น Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "แผ่น Blu-Ray เปล่า"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "แผ่น Blu-Ray R"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "แผ่น Blu-Ray R เปล่า"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "แผ่น Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "แผ่น Blu-Ray RW เปล่า"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "แผ่น HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "แผ่น HD DVD เปล่า"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "แผ่น HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "แผ่น HD DVD-R เปล่า"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "แผ่น HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "แผ่น HD DVD-RW เปล่า"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "แผ่น MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "แผ่น MO เปล่า"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "แผ่น"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "แผ่นเปล่า"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: เกิดข้อผิดพลาดขณะเปิดแฟ้ม: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, เกิดข้อผิดพลาดขณะเขียน stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: เกิดข้อผิดพลาดขณะอ่าน: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: เกิดข้อผิดพลาดขณะปิด: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATION... - แสดงเนื้อหาของตำแหน่งต่างๆ ต่อกันออกทางเอาต์พุตมาตรฐาน"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"ต่อเนื้อหาของแฟ้มต่างๆ ที่ตำแหน่งที่ระบุเข้าด้วยกัน แล้วพิมพ์ออกทางเอาต์พุตมาตรฐาน "
-"ทำงานคล้ายกับโปรแกรม cat ดั้งเดิม เพียงแต่ใช้ตำแหน่งของ gvfs แทนแฟ้มในเครื่อง ตัวอย่างเช่น "
-"คุณสามารถใช้ตำแหน่งในลักษณะ smb://server/resource/file.txt ได้"
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"หมายเหตุ: คุณสามารถส่งผ่านไปป์ต่อให้คำสั่ง cat ได้ ถ้าต้องการใช้ตัวเลือกการจัดรูปแบบบางอย่าง "
-"เช่น -n, -T และอื่นๆ"
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: ไม่ได้ระบุตำแหน่ง"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: เกิดข้อผิดพลาดขณะเปิดตำแหน่ง: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: เกิดข้อผิดพลาดขณะเรียกโปรแกรม: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - เปิดแฟ้มต่างๆ ด้วยโปรแกรมที่ลงทะเบียนไว้"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr "เปิดแฟ้มด้วยโปรแกรมปริยายที่ลงทะเบียนไว้สำหรับจัดการแฟ้มชนิดนั้นๆ"
-
-#~ msgid "Error listing folders to figure out ignore prefix"
-#~ msgstr "เกิดข้อผิดพลาดขณะไล่เรียงโฟลเดอร์เพื่อหาส่วนหน้าที่จะตัดทิ้งของชื่อแฟ้ม"
-
-#~ msgid "Error creating port info list"
-#~ msgstr "เกิดข้อผิดพลาดขณะสร้างรายชื่อข้อมูลพอร์ต"
-
-#~ msgid "Error getting port info from port info list"
-#~ msgstr "เกิดข้อผิดพลาดขณะอ่านข้อมูลพอร์ตจากรายชื่อข้อมูลพอร์ต"
-
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "ระบบแฟ้มถูกใช้งานอยู่: เปิดแฟ้มอยู่ %d แฟ้ม"
-
-#~ msgid "Error listing folders"
-#~ msgstr "เกิดข้อผิดพลาดขณะไล่เรียงโฟลเดอร์"
-
-#~ msgid "Error listing files in folder"
-#~ msgstr "เกิดข้อผิดพลาดขณะไล่เรียงแฟ้มในโฟลเดอร์"
-
-#~ msgid "File unavailable"
-#~ msgstr "ไม่มีแฟ้มอยู่"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "สื่อ %.1f kB"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "สื่อ %.1f MB"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "สื่อ %.1f GB"
-
-#~ msgid "Invalid reply from server."
-#~ msgstr "ได้รับคำตอบที่ใช้ไม่ได้จากเซิร์ฟเวอร์"
-
-#~ msgid "The file does not exist"
-#~ msgstr "ไม่มีแฟ้มดังกล่าวอยู่"
-
-#~ msgid "Audio Disc on %s"
-#~ msgstr "แผ่นเพลงที่ %s"
diff --git a/po/tr.po b/po/tr.po
deleted file mode 100644
index 8e8452c9..00000000
--- a/po/tr.po
+++ /dev/null
@@ -1,1382 +0,0 @@
-# translation of gvfs.gnome-2-22.tr.po to Turkish
-# Turkish translation of gvfs.
-# Copyright (C) 2008 THE gvfs'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the gvfs package.
-#
-#
-# <>, 2008.
-# Baris Cicek <baris@teamforce.name.tr>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs.gnome-2-22.tr\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-31 14:23+0300\n"
-"PO-Revision-Date: 2008-03-31 14:19+0300\n"
-"Last-Translator: Baris Cicek <baris@teamforce.name.tr>\n"
-"Language-Team: Turkish <gnome-turk@gnome.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1977
-msgid "Operation not supported, files on different mounts"
-msgstr "Dosyalar farklı bağlantılar üzerinde olduğundan işlem desteklenmiyor"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info geçersiz bir değer döndürdü"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info geçersiz bir değer döndürdü"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Akış dosyası belirteci alınamadı"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2242
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2599
-msgid "Invalid return value from open"
-msgstr "open geçersiz bir değer döndürdü"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2200
-msgid "Didn't get stream file descriptor"
-msgstr "Akış dosyası belirteci alınmadı"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "call geçersiz bir değer döndürdü"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info geçersiz bir değer döndürdü"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Kapsanılan bağlantı bulunamadı"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Geçersiz dosya adı %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info geçersiz bir değer döndürdü"
-
-#: ../client/gdaemonfile.c:2122
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir geçersiz bir değer döndürdü"
-
-#: ../client/gdaemonfile.c:2171
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file geçersiz bir değer döndürdü"
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Akış protokolünde hata oluştu: %s"
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr "Akış sonu"
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendobexftp.c:774
-#: ../daemon/gvfsbackendobexftp.c:795 ../daemon/gvfsbackendobexftp.c:914
-#: ../daemon/gvfsbackendobexftp.c:1051 ../daemon/gvfsbackendobexftp.c:1115
-#: ../daemon/gvfsbackendobexftp.c:1252 ../daemon/gvfsbackendobexftp.c:1279
-#: ../daemon/gvfsbackendobexftp.c:1338 ../daemon/gvfsbackendobexftp.c:1360
-#: ../daemon/gvfsbackendobexftp.c:1420 ../daemon/gvfsbackendobexftp.c:1439
-#: ../daemon/gvfsbackendsmb.c:1042 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "İşlem iptal edildi"
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr "Akış üzerinde atlama desteklenmiyor"
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr "Sorgu bilgisi işlemi desteklenmiyor"
-
-#: ../client/gdaemonvfs.c:731
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Bağlanma bilgileri alınırken hata oluştu: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Servise bağlanırken hata oluştu: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Soket oluşturulurken hata oluştu: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Sokete bağlanırken hata oluştu: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Geçersiz dosya bilgi biçimi "
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Geçersiz öznitelik bilgi listesi içeriği"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "D-Bus'a bağlanırken hata oluştu: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s Dosya Sistemi Servisi"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Hata: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Kullanım: %s ---spawner dbus-id nesne_yolu"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Kullanım: %s anahtar=değer anahtar=değer ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Belirtilmiş bağlama türü yok"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s için bağlama noktası zaten çalışıyor"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "bağlama servisi başlatılırken hata"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:316 ../daemon/gvfsbackendftp.c:909
-#: ../daemon/gvfsbackendsftp.c:1865
-#, c-format
-msgid "/ on %s"
-msgstr "%s üzerinde /"
-
-#: ../daemon/gvfsbackendarchive.c:496 ../daemon/gvfsbackendftp.c:1425
-#: ../daemon/gvfsbackendsftp.c:1524
-msgid "No hostname specified"
-msgstr "Makine adı belirtilmemiş"
-
-#: ../daemon/gvfsbackendarchive.c:507 ../daemon/gvfsbackendarchive.c:536
-#: ../daemon/gvfsbackenddav.c:1206 ../daemon/gvfsbackendhttp.c:273
-#: ../daemon/gvfsbackendobexftp.c:605 ../daemon/gvfsbackendobexftp.c:616
-#: ../daemon/gvfsbackendsmb.c:592
-msgid "Invalid mount spec"
-msgstr "Geçersiz bağlama belirtimi"
-
-#: ../daemon/gvfsbackendarchive.c:611 ../daemon/gvfsbackendarchive.c:661
-#: ../daemon/gvfsbackendarchive.c:690 ../daemon/gvfsbackendcdda.c:825
-#: ../daemon/gvfsbackendcomputer.c:573 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2027 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Dosya mevcut değil"
-
-#: ../daemon/gvfsbackendarchive.c:699 ../daemon/gvfsbackendburn.c:681
-#: ../daemon/gvfsbackendcomputer.c:652 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:858 ../daemon/gvfsbackendnetwork.c:637
-#, c-format
-msgid "The file is not a directory"
-msgstr "Dosya bir dizin değil"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr "Yazdır"
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr "Geçiçi dizin oluşturulamadı"
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr "Böyle dosya ya da dizin yok"
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1804
-msgid "Directory not empty"
-msgstr "Dizin boş değil"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr "Dizin üstüne dosya kopyalanamıyor"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "CD/DVD Oluşturucu"
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "Dosya mevcut"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr "Hedef yolda böyle dosya ya da dizin yoktur"
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr "Dizin üstüne dizin kopyalanamıyor"
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr "Hedef dosya mevcut"
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr "Dizin iç içe kopyalanamıyor"
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr "Desteklenmiyor"
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr "Sürücü belirtilmemiş"
-
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "%s sürücüsü bulunamıyor"
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Sürücü %s ses dosyaları içermiyor"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda bağı %s üzerinde"
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:492 ../hal/ghalvolume.c:298 ../hal/ghalvolume.c:319
-#, c-format
-msgid "Audio Disc"
-msgstr "Ses Diski"
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Dosya sistemi meşgul: %d açık dosya"
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "%2$s sürücüsü üzerinde %1$s dosyası yok"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "%s sürücüsünde 'paranoia' kaynaklı hata oluştu"
-
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "%s sürücüsünde akışta atlama hatası"
-
-#: ../daemon/gvfsbackendcdda.c:818 ../daemon/gvfsbackendgphoto2.c:1695
-#, c-format
-msgid "No such file"
-msgstr "Böyle dosya yok"
-
-#: ../daemon/gvfsbackendcdda.c:832
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Dosya mevcut değil ya da bir ses parçası değil"
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr "Ses CD'si Dosya Sistemi Servisi"
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr "Bilgisayar"
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr "Dosya sistemi"
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendgphoto2.c:1687
-#: ../daemon/gvfsbackendobexftp.c:760 ../daemon/gvfsbackendtrash.c:641
-msgid "Can't open directory"
-msgstr "Dizin açılamıyor"
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr "Bağlanılabilir dosya açılamıyor"
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr "Dahili hata: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:930
-msgid "Can't mount file"
-msgstr "Dosya bağlanamıyor"
-
-#: ../daemon/gvfsbackendcomputer.c:825
-msgid "No media in the drive"
-msgstr "Sürücüde hiçbir ortam bulunamadı"
-
-#: ../daemon/gvfsbackendcomputer.c:882 ../daemon/gvfsbackendcomputer.c:973
-#: ../daemon/gvfsbackendcomputer.c:1073
-msgid "Not a mountable file"
-msgstr "Bağlanılabilir bir dosya değil"
-
-#: ../daemon/gvfsbackendcomputer.c:988
-msgid "Can't unmount file"
-msgstr "Dosya bağlantısı kaldırılamıyor"
-
-#: ../daemon/gvfsbackendcomputer.c:1104
-msgid "Can't eject file"
-msgstr "Dosya çıkartılamıyor"
-
-#: ../daemon/gvfsbackenddav.c:269 ../daemon/gvfsbackenddav.c:1289
-#: ../daemon/gvfsbackendhttp.c:220
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP Hatası: %s"
-
-#: ../daemon/gvfsbackenddav.c:285
-msgid "Could not parse response"
-msgstr "Cevap ayrıştırılamadı"
-
-#: ../daemon/gvfsbackenddav.c:294
-msgid "Empty response"
-msgstr "Boş cevap"
-
-#: ../daemon/gvfsbackenddav.c:301
-msgid "Unexpected reply from server"
-msgstr "Sunucudan beklenilmeyen yanıt"
-
-#: ../daemon/gvfsbackenddav.c:944 ../daemon/gvfsbackenddav.c:1421
-#, c-format
-msgid "Response invalid"
-msgstr "Geçersiz cevap"
-
-#: ../daemon/gvfsbackenddav.c:1087
-msgid "WebDAV share"
-msgstr "WebDAV paylaşımı"
-
-#: ../daemon/gvfsbackenddav.c:1089
-#, c-format
-msgid "Enter password for %s"
-msgstr "%s için parolayı girin"
-
-#: ../daemon/gvfsbackenddav.c:1092
-msgid "Please enter proxy password"
-msgstr "Lütfen vekil sunucu parolasını girin"
-
-#: ../daemon/gvfsbackenddav.c:1293 ../daemon/gvfsbackenddav.c:1297
-msgid "Not a WebDAV enabled share"
-msgstr "Paylaşımı etkinleştirilmiş bir WebDAV yok"
-
-#: ../daemon/gvfsbackenddav.c:1319
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV %s üzerinde"
-
-#: ../daemon/gvfsbackenddav.c:1377 ../daemon/gvfsbackenddav.c:1448
-msgid "Could not create request"
-msgstr "İstek oluşturulamadı"
-
-#: ../daemon/gvfsbackenddav.c:1511 ../daemon/gvfsbackenddav.c:1764
-#: ../daemon/gvfsbackendftp.c:1627 ../daemon/gvfsbackendftp.c:2291
-#: ../daemon/gvfsbackendsftp.c:3507 ../daemon/gvfsbackendsmb.c:1778
-#, c-format
-msgid "Target file already exists"
-msgstr "Hedef dosya zaten mevcut"
-
-#: ../daemon/gvfsbackenddav.c:1584 ../daemon/gvfsbackendsftp.c:2755
-#: ../daemon/gvfsbackendsmb.c:1010
-msgid "The file was externally modified"
-msgstr "Dosya harici olarak değiştirilmiş"
-
-#: ../daemon/gvfsbackenddav.c:1615 ../daemon/gvfsbackendsmb.c:1048
-#: ../daemon/gvfsbackendsmb.c:1795
-msgid "Backup file creation failed"
-msgstr "Yedek dosyası oluşturma başarısız oldu"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Dosya ya da dizin izlenemiyor."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Ağ"
-
-#: ../daemon/gvfsbackendftp.c:235
-msgid "Accounts are unsupported"
-msgstr "Hesaplar desteklenmiyor"
-
-#: ../daemon/gvfsbackendftp.c:239
-msgid "Host closed connection"
-msgstr "Makine bağlantıyı kapattı"
-
-#: ../daemon/gvfsbackendftp.c:243
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Veri bağlantısı açılamıyor. Güvenlik duvarınız bunu engelliyor olabilir mi?"
-
-#: ../daemon/gvfsbackendftp.c:247
-msgid "Data connection closed"
-msgstr "Veri bağlantısı kapatıldı"
-
-#: ../daemon/gvfsbackendftp.c:254
-msgid "File unavailable"
-msgstr "Dosya mevcut değil"
-
-#: ../daemon/gvfsbackendftp.c:258
-msgid "Operation failed"
-msgstr "İşlem başarısız oldu"
-
-#: ../daemon/gvfsbackendftp.c:263
-msgid "No space left on server"
-msgstr "Sunucuda yer kalmadı"
-
-#: ../daemon/gvfsbackendftp.c:271 ../daemon/gvfsbackendsftp.c:3814
-msgid "Operation unsupported"
-msgstr "İşlem desteklenmiyor"
-
-#: ../daemon/gvfsbackendftp.c:275 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "İzin verilmedi"
-
-#: ../daemon/gvfsbackendftp.c:279
-msgid "Page type unknown"
-msgstr "Sayfa türü bilinmiyor"
-
-#: ../daemon/gvfsbackendftp.c:283 ../daemon/gvfsbackendftp.c:2137
-#, c-format
-msgid "Invalid filename"
-msgstr "Geçersiz dosya adı"
-
-#: ../daemon/gvfsbackendftp.c:287 ../daemon/gvfsbackendftp.c:361
-#: ../daemon/gvfsbackendftp.c:390 ../daemon/gvfsbackendftp.c:409
-#: ../daemon/gvfsbackendftp.c:422 ../daemon/gvfsbackendftp.c:763
-#, c-format
-msgid "Invalid reply"
-msgstr "Geçersiz cevap"
-
-#: ../daemon/gvfsbackendftp.c:529
-#, c-format
-msgid "broken transmission"
-msgstr "bozuk iletişim"
-
-#: ../daemon/gvfsbackendftp.c:623 ../daemon/gvfsbackendftp.c:783
-#, c-format
-msgid "Could not connect to host"
-msgstr "Makineye bağlanılamadı"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1283
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "%s üzerindeki ftp için parola girin"
-
-#: ../daemon/gvfsbackendftp.c:1308 ../daemon/gvfsbackendsftp.c:864
-msgid "Password dialog cancelled"
-msgstr "Parola penceresi iptal edildi"
-
-#: ../daemon/gvfsbackendftp.c:1387
-#, c-format
-msgid "ftp on %s"
-msgstr "%s üzerinde ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1391
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "%s olarak %s üzerinde ftp"
-
-#: ../daemon/gvfsbackendftp.c:1679 ../daemon/gvfsbackendftp.c:2252
-msgid "backups not supported yet"
-msgstr "yedekler henüz desteklenmiyor"
-
-#: ../daemon/gvfsbackendftp.c:1756
-#, c-format
-msgid "filename too long"
-msgstr "dosya ismi çok uzun"
-
-#: ../daemon/gvfsbackendftp.c:2271
-#, c-format
-msgid "Invalid destination filename"
-msgstr "Geçersiz hedef dosya adı"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:697
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Dijital Fotoğraf Makinesi (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:843 ../hal/ghalvolume.c:398
-#, c-format
-msgid "%s Camera"
-msgstr "%s Fotoğraf Makinası"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:846 ../hal/ghalvolume.c:393
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s Ses Çalıcısı"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../hal/ghalvolume.c:407
-msgid "Camera"
-msgstr "Fotoğraf Makinası"
-
-#: ../daemon/gvfsbackendgphoto2.c:857 ../hal/ghalvolume.c:405
-msgid "Audio Player"
-msgstr "Ses Çalıcısı"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1539
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 bağı %s üzerinde"
-
-#: ../daemon/gvfsbackendhttp.c:216
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP İstemci Hatası: %s"
-
-#: ../daemon/gvfsbackendhttp.c:534 ../daemon/gvfsbackendsftp.c:1853
-#: ../daemon/gvfsbackendsmb.c:1275 ../daemon/gvfsbackendtrash.c:969
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr ".(geçersiz kodlama)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Dizin bildirimi desteklenmiyor"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows Ağı"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Yerel Ağ"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Ağ Konum İzleyici"
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:444 ../daemon/gvfsbackendsmb.c:510
-#: ../daemon/gvfsbackendsmb.c:1268
-#, c-format
-msgid "%s on %s"
-msgstr "%2$s üzerinde %1$s"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh programından beklenilmeyen çıkış"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Makine adı bilinmiyor"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Makineye ulaşılamıyor"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Bağlantı sunucu tarafından reddedildi"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Makine anahtarının onaylanması başarısız oldu"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "ssh programı yeniden başlatılamadı"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "ssh programı yeniden başlatılamadı: %s"
-
-#: ../daemon/gvfsbackendsftp.c:518 ../daemon/gvfsbackendsftp.c:770
-msgid "Timed out when logging in"
-msgstr "Giriş yapılırken zaman aşımına uğradı"
-
-#: ../daemon/gvfsbackendsftp.c:848
-msgid "Enter passphrase for key"
-msgstr "Anahtar için parola metnini girin"
-
-#: ../daemon/gvfsbackendsftp.c:850
-msgid "Enter password"
-msgstr "Parolayı girin"
-
-#: ../daemon/gvfsbackendsftp.c:911
-msgid "Can't send password"
-msgstr "Parola gönderilemiyor"
-
-#: ../daemon/gvfsbackendsftp.c:919
-msgid "Log In Anyway"
-msgstr "Gene de Giriş Yap"
-
-#: ../daemon/gvfsbackendsftp.c:919
-msgid "Cancel Login"
-msgstr "Girişi İptal Et"
-
-#: ../daemon/gvfsbackendsftp.c:929
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Uzaktaki bilgisayarın (%s) kimliği bilinmiyor.\n"
-"Bu bir bilgisayara ilk kez giriş yaptığınızda olur.\n"
-"\n"
-"Uzaktaki bilgisayardan gelen kimlik ise %s. Eğer devam etmek için tamamen "
-"güvenli olduğundan emin olmak istiyorsanız, sistem yöneticinizle bağlantıya "
-"geçin."
-
-#: ../daemon/gvfsbackendsftp.c:949
-msgid "Login dialog cancelled"
-msgstr "Giriş penceresi iptal edildi"
-
-#: ../daemon/gvfsbackendsftp.c:969
-msgid "Can't send host identity confirmation"
-msgstr "Makine kimlik onayı gönderilemiyor"
-
-#: ../daemon/gvfsbackendsftp.c:1443 ../daemon/gvfsbackendsftp.c:1466
-msgid "Protocol error"
-msgstr "Protokol hatası"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1490
-#, c-format
-msgid "sftp on %s"
-msgstr "%s üzerinde sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1514
-msgid "Unable to find supported ssh command"
-msgstr "Desteknelen ssh komut komutu bulunamadı"
-
-#: ../daemon/gvfsbackendsftp.c:1929 ../daemon/gvfsbackendsftp.c:3498
-msgid "File is directory"
-msgstr "Dosya bir dizin"
-
-#: ../daemon/gvfsbackendsftp.c:1938
-msgid "Failure"
-msgstr "Başarısız"
-
-#: ../daemon/gvfsbackendsftp.c:1994 ../daemon/gvfsbackendsftp.c:2053
-#: ../daemon/gvfsbackendsftp.c:2064 ../daemon/gvfsbackendsftp.c:2120
-#: ../daemon/gvfsbackendsftp.c:2206 ../daemon/gvfsbackendsftp.c:2234
-#: ../daemon/gvfsbackendsftp.c:2280 ../daemon/gvfsbackendsftp.c:2355
-#: ../daemon/gvfsbackendsftp.c:2462 ../daemon/gvfsbackendsftp.c:2502
-#: ../daemon/gvfsbackendsftp.c:2552 ../daemon/gvfsbackendsftp.c:2621
-#: ../daemon/gvfsbackendsftp.c:2641 ../daemon/gvfsbackendsftp.c:2792
-#: ../daemon/gvfsbackendsftp.c:2817 ../daemon/gvfsbackendsftp.c:2872
-#: ../daemon/gvfsbackendsftp.c:2929 ../daemon/gvfsbackendsftp.c:3200
-#: ../daemon/gvfsbackendsftp.c:3267 ../daemon/gvfsbackendsftp.c:3396
-#: ../daemon/gvfsbackendsftp.c:3431 ../daemon/gvfsbackendsftp.c:3459
-#: ../daemon/gvfsbackendsftp.c:3567 ../daemon/gvfsbackendsftp.c:3621
-#: ../daemon/gvfsbackendsftp.c:3655 ../daemon/gvfsbackendsftp.c:3687
-#: ../daemon/gvfsbackendsftp.c:3702 ../daemon/gvfsbackendsftp.c:3717
-#: ../daemon/gvfsbackendsftp.c:3795
-msgid "Invalid reply received"
-msgstr "Geçersiz cevap alındı"
-
-#: ../daemon/gvfsbackendsftp.c:2300
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Yedek dosya oluşturulurken hata: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2702
-msgid "Unable to create temporary file"
-msgstr "Geçici dosya oluşturulamadı"
-
-#: ../daemon/gvfsbackendsftp.c:3493 ../daemon/gvfsbackendsmb.c:1767
-msgid "Can't move directory over directory"
-msgstr "Dizin üstüne dizin taşınamıyor"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:215
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "%2$s üzerinde %1$s paylaşımı için parola gerekli"
-
-#: ../daemon/gvfsbackendsmb.c:468 ../daemon/gvfsbackendsmb.c:502
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Dahili Hata (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:558
-msgid "Failed to mount Windows share"
-msgstr "Windows paylaşımı bağlama başarısız oldu"
-
-#: ../daemon/gvfsbackendsmb.c:688 ../daemon/gvfsbackendsmb.c:1147
-msgid "Unsupported seek type"
-msgstr "Atlama türü desteklenmiyor"
-
-#: ../daemon/gvfsbackendsmb.c:1211
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Yedek dosyası oluşturma başarısız: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1669
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Dosya silinirken hata: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1743
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Dosya taşınırken hata: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1815
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Hedef dosya silinirken hata: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1839
-msgid "Can't recursively move directory"
-msgstr "Dizin iç içe taşınamıyor"
-
-#: ../daemon/gvfsbackendsmb.c:1902
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows Paylaşımlar Dosya Sistemi Servisi"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "%s üzerindeki Windows paylaşımları"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Dosya bağlanılabilir değil"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Düzenli bir dosya değil"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Bir dizin değil"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windows Ağ Dosya Sistemi Servisi"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:604 ../daemon/gvfsbackendtrash.c:1189
-msgid "Trash"
-msgstr "Çöp"
-
-#: ../daemon/gvfsbackendtrash.c:979
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (çöpte)"
-
-#: ../daemon/gvfsbackendtrash.c:1290
-msgid "Can't delete trash"
-msgstr "Çöp silinemiyor"
-
-#: ../daemon/gvfsbackendtrash.c:1637 ../daemon/gvfsbackendtrash.c:1712
-msgid "Trash directory notification not supported"
-msgstr "Çöp dizin bildirimi desteklenmiyor"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Geçersiz arkayüz türü"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "fd gönderilirken hata: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Arkayüz tarafından işlem desteklenmiyor"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Arkayüz tarafından sembolik bağlar desteklenmiyor"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Geçersiz dbus mesajı"
-
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr "Eski servisin yerine kondu."
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr "fuse'ü başlatma."
-
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "GVFS Servisi"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr "GVFS için ana servis"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:78
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:80 ../programs/gvfs-cat.c:165 ../programs/gvfs-cat.c:178
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:388 ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:133 ../programs/gvfs-open.c:146
-#: ../programs/gvfs-save.c:165 ../programs/gvfs-tree.c:253
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Daha fazla bilgi için \"%s --help\" deneyin."
-
-#: ../daemon/mount.c:432
-msgid "Invalid arguments from spawned child"
-msgstr "Yeniden başlatılan alt süreçler için geçersiz parametreler"
-
-#: ../daemon/mount.c:731
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Kendiliğinden bağlama başarısız oldu: %s"
-
-#: ../daemon/mount.c:776
-msgid "The specified location is not mounted"
-msgstr "Belirtilen konum bağlanmamış"
-
-#: ../daemon/mount.c:781
-msgid "The specified location is not supported"
-msgstr "Belirtilen konum desteklenmiyor"
-
-#: ../daemon/mount.c:944
-msgid "Location is already mounted"
-msgstr "Konum zaten bağlanmış"
-
-#: ../daemon/mount.c:952
-msgid "Location is not mountable"
-msgstr "Konum bağlanılabilir değil"
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:148
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:162
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:165
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:168
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../hal/ghaldrive.c:174
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../hal/ghaldrive.c:180
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:186
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s Sürücü"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:192
-#, c-format
-msgid "%s Drive"
-msgstr "%s Sürücü"
-
-#: ../hal/ghaldrive.c:196
-msgid "Floppy Drive"
-msgstr "Disket Sürücü"
-
-#: ../hal/ghaldrive.c:202
-msgid "Software RAID Drive"
-msgstr "Yazılımsal RAID Sürücü"
-
-#: ../hal/ghaldrive.c:204
-msgid "USB Drive"
-msgstr "USB Sürücü"
-
-#: ../hal/ghaldrive.c:206
-msgid "ATA Drive"
-msgstr "ATA Sürücü"
-
-#: ../hal/ghaldrive.c:208
-msgid "SCSI Drive"
-msgstr "SCSI Sürücü"
-
-#: ../hal/ghaldrive.c:210
-msgid "FireWire Drive"
-msgstr "FireWire Sürücü"
-
-#: ../hal/ghaldrive.c:214
-msgid "Tape Drive"
-msgstr "Bant Sürücü"
-
-#: ../hal/ghaldrive.c:216
-msgid "CompactFlash Drive"
-msgstr "CompactFlash Sürücüsü"
-
-#: ../hal/ghaldrive.c:218
-msgid "MemoryStick Drive"
-msgstr "MemoryStick Sürücü"
-
-#: ../hal/ghaldrive.c:220
-msgid "SmartMedia Drive"
-msgstr "SmartMedia Sürücü"
-
-#: ../hal/ghaldrive.c:222
-msgid "SD/MMC Drive"
-msgstr "SD/MMC Sürücü"
-
-#: ../hal/ghaldrive.c:224
-msgid "Zip Drive"
-msgstr "Zip Sürücü"
-
-#: ../hal/ghaldrive.c:226
-msgid "Jaz Drive"
-msgstr "Jaz Sürücü"
-
-#: ../hal/ghaldrive.c:228
-msgid "Thumb Drive"
-msgstr "Thumb Sürücü"
-
-#: ../hal/ghaldrive.c:231
-msgid "Mass Storage Drive"
-msgstr "Depolama Aygıtı Sürücü"
-
-#: ../hal/ghaldrive.c:730
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Ortamı çıkartma başarısız; ortam üzerinde bir ya da daha fazla sistem meşgul."
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "CD-ROM Disc"
-msgstr "CD-ROM Diski"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "Blank CD-ROM Disc"
-msgstr "Boş CD-ROM Diski"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "CD-R Disc"
-msgstr "CD-R Diski"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "Blank CD-R Disc"
-msgstr "Boş CD-R Diski"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "CD-RW Disc"
-msgstr "CD-RW Diski"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "Blank CD-RW Disc"
-msgstr "Boş CD-RW Diski"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM Diski"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "Blank DVD-ROM Disc"
-msgstr "Boş DVD-ROM Diski"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM Diski"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "Blank DVD-RAM Disc"
-msgstr "Boş DVD-RAM Diski"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "DVD-RW Disc"
-msgstr "DVD-RW Diski"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "Blank DVD-RW Disc"
-msgstr "Boş DVD-RW·Diski"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "DVD+R Disc"
-msgstr "DVD+R Diski"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "Blank DVD+R Disc"
-msgstr "Boş DVD+R Diski"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "DVD+RW Disc"
-msgstr "DVD+RW Diski"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "Blank DVD+RW Disc"
-msgstr "Boş DVD+RW Diski"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL Diski"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "Blank DVD+R DL Disc"
-msgstr "Boş DVD+R DL Diski"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray Diski"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blank Blu-Ray Disc"
-msgstr "Boş Blu-Ray Diski"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R Diski"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blank Blu-Ray R Disc"
-msgstr "Boş Blu-Ray R Diski"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW Diski"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Boş Blu-Ray RW Diski"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "HD DVD Disc"
-msgstr "HD DVD Diski"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "Blank HD DVD Disc"
-msgstr "Boş HD DVD Diski"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R Diski"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "Blank HD DVD-R Disc"
-msgstr "Boş HD DVD-R Diski"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW Diski"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "Blank HD DVD-RW Disc"
-msgstr "Boş HD DVD-RW Diski"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "MO Disc"
-msgstr "MO Diski"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "Blank MO Disc"
-msgstr "Boş MO Diski"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Disc"
-msgstr "Disk"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Blank Disc"
-msgstr "Boş Disk"
-
-#: ../hal/ghalmount.c:368
-#, c-format
-msgid "%.1f kB Media"
-msgstr "%.1f kB Ortam"
-
-#: ../hal/ghalmount.c:373
-#, c-format
-msgid "%.1f MB Media"
-msgstr "%.1f MB Ortam"
-
-#: ../hal/ghalmount.c:378
-#, c-format
-msgid "%.1f GB Media"
-msgstr "% 1f GB Ortam"
-
-#: ../hal/ghalmount.c:490 ../hal/ghalvolume.c:317
-msgid "Mixed Audio/Data Disc"
-msgstr "Karışık Ses/Veri Diski"
-
-#: ../hal/ghalvolume.c:206
-#, c-format
-msgid "%.1f kB"
-msgstr "% 1f kB"
-
-#: ../hal/ghalvolume.c:211
-#, c-format
-msgid "%.1f MB"
-msgstr "% 1f MB"
-
-#: ../hal/ghalvolume.c:216
-#, c-format
-msgid "%.1f GB"
-msgstr "% 1f GB"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:305
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s Şifreli Veri"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:328
-#, c-format
-msgid "%s Media"
-msgstr "%s Ortam"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: dosya açılırken hata: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, stdout'a yazılırken hata"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: okuma hatası: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:kapatma hatası: %s\n"
-
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "KONUM... - standart çıktıya KONUMLAR ile '-' birleştirilir."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Konumlardaki dosyalar birleştirilir ve standart çıktıya yazılır. Geleneksel "
-"cat aracı gibi çalışır, fakat yerel dosyalar yerine gvfs yeri kullanılır: "
-"örneğin yer olarak birleştirmede smb://sunucu/kaynak/dosya.txt gibi bir şeyi "
-"kullanabilirsiniz."
-
-#: ../programs/gvfs-cat.c:150
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Not: eğer biçimleme seçenekleri -n, -T ya da diğerlerine ihtiyaç "
-"duyuyorsanız sadece cat'e borulayın."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:176 ../programs/gvfs-open.c:144
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: eksik konumlar"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: konum açılırken hata: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: uygulama başlatılırken hata: %s\n"
-
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr "DOSYALAR... - kayıtlı uygulamayla DOSYALAR açılır."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Dosya türünü işlemek için kayıtlı öntanımlı uygulama ile dosya(lar) açılır."
diff --git a/po/uk.po b/po/uk.po
deleted file mode 100644
index 9197779d..00000000
--- a/po/uk.po
+++ /dev/null
@@ -1,1375 +0,0 @@
-# translation of gvfs to Ukrainian
-# Copyright (C) Free Software Foundation
-# This file is distributed under the same license as the gvfs package.
-#
-# Maxim Dziumanenko <dziumanenko@gmail.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-07 22:18+0200\n"
-"PO-Revision-Date: 2008-03-07 14:54+0200\n"
-"Last-Translator: Maxim Dziumanenko <dziumanenko@gmail.com>\n"
-"Language-Team: Russian <en@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: ../client/gdaemonfile.c:464 ../client/gdaemonfile.c:1867
-msgid "Operation not supported, files on different mounts"
-msgstr "Дія не підтримується, файли на різних точках монтування"
-
-#: ../client/gdaemonfile.c:758
-msgid "Invalid return value from get_info"
-msgstr "Функція get_info повернула неправильне значення"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from query_info"
-msgstr "Функція query_info повернула неправильне значення"
-
-#: ../client/gdaemonfile.c:865
-msgid "Couldn't get stream file descriptor"
-msgstr "Не вдається отримати опис файлу потоку"
-
-#: ../client/gdaemonfile.c:897 ../client/gdaemonfile.c:967
-#: ../client/gdaemonfile.c:1026 ../client/gdaemonfile.c:1085
-#: ../client/gdaemonfile.c:1147
-msgid "Invalid return value from open"
-msgstr "Функція open повернула неправильне значення"
-
-#: ../client/gdaemonfile.c:977 ../client/gdaemonfile.c:1036
-#: ../client/gdaemonfile.c:1095 ../client/gdaemonfile.c:1157
-msgid "Didn't get stream file descriptor"
-msgstr "Дескриптор файлу потоку не був отриманий"
-
-#: ../client/gdaemonfile.c:1209 ../client/gdaemonfile.c:1226
-msgid "Invalid return value from call"
-msgstr "Функція call повернула неправильне значення"
-
-#: ../client/gdaemonfile.c:1505
-msgid "Invalid return value from get_filesystem_info"
-msgstr "Функція get_filesystem_info повернула неправильне значення"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1549
-msgid "Could not find enclosing mount"
-msgstr "Не вдається знайти точку монтування"
-
-#: ../client/gdaemonfile.c:1579
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Неправильна назва файлу %s"
-
-#: ../client/gdaemonfile.c:1621
-msgid "Invalid return value from query_filesystem_info"
-msgstr "Функція query_filesystem_info повернула неправильне значення"
-
-#: ../client/gdaemonfile.c:2012
-msgid "Invalid return value from monitor_dir"
-msgstr "Отримано неправильне значення від функції monitor_dir"
-
-#: ../client/gdaemonfile.c:2061
-msgid "Invalid return value from monitor_file"
-msgstr "Отримано неправильне значення від функції monitor_file"
-
-#: ../client/gdaemonfileinputstream.c:451
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1304
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:403
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1052
-#: ../client/gdaemonfileoutputstream.c:1062
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Помилка у протоколі потоку: %s"
-
-#: ../client/gdaemonfileinputstream.c:459
-#: ../client/gdaemonfileinputstream.c:1314
-#: ../client/gdaemonfileoutputstream.c:411
-#: ../client/gdaemonfileoutputstream.c:1062
-msgid "End of stream"
-msgstr "Кінець потоку"
-
-#: ../client/gdaemonfileinputstream.c:519
-#: ../client/gdaemonfileinputstream.c:676
-#: ../client/gdaemonfileinputstream.c:785
-#: ../client/gdaemonfileinputstream.c:1036
-#: ../client/gdaemonfileoutputstream.c:460
-#: ../client/gdaemonfileoutputstream.c:639
-#: ../client/gdaemonfileoutputstream.c:835 ../daemon/gvfsbackendobexftp.c:774
-#: ../daemon/gvfsbackendobexftp.c:795 ../daemon/gvfsbackendobexftp.c:914
-#: ../daemon/gvfsbackendobexftp.c:1051 ../daemon/gvfsbackendobexftp.c:1115
-#: ../daemon/gvfsbackendobexftp.c:1252 ../daemon/gvfsbackendobexftp.c:1279
-#: ../daemon/gvfsbackendobexftp.c:1338 ../daemon/gvfsbackendobexftp.c:1360
-#: ../daemon/gvfsbackendobexftp.c:1420 ../daemon/gvfsbackendobexftp.c:1439
-#: ../daemon/gvfsbackendsmb.c:1015 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:297
-msgid "Operation was cancelled"
-msgstr "Дія була перервана"
-
-#: ../client/gdaemonfileinputstream.c:1211
-#: ../client/gdaemonfileoutputstream.c:946
-msgid "Seek not supported on stream"
-msgstr "Пошук у потоці не підтримується"
-
-#: ../client/gdaemonfileinputstream.c:1241
-msgid "The query info operation is not supported"
-msgstr "Операція запиту інформації не підтримується"
-
-#: ../client/gdaemonvfs.c:731
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Помилка при отриманні інформації про монтування: %s"
-
-#: ../client/gvfsdaemondbus.c:559 ../client/gvfsdaemondbus.c:946
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Помилка при підключенні до служби: %s"
-
-#: ../common/gsysutils.c:133
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Помилка при створенні сокета: %s"
-
-#: ../common/gsysutils.c:171
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Помилка при підключенні до сокету: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Неправильний формат інформації про файл"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Неправильний зміст списку інформації про атрибути"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Помилка приєднання до D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Служба файлової системи %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Помилка: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Використання: %s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Використання: %s ключ=значення ключ=значення ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Тип монтування не вказано"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "точка монтування для %s уже запущена"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "помилка запуску служби монтування"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:347
-msgid "Burn"
-msgstr "Записати"
-
-#: ../daemon/gvfsbackendburn.c:377
-msgid "Unable to create temporary directory"
-msgstr "Не вдається створити тимчасовий каталог"
-
-#: ../daemon/gvfsbackendburn.c:406 ../daemon/gvfsbackendburn.c:417
-#: ../daemon/gvfsbackendburn.c:452 ../daemon/gvfsbackendburn.c:673
-#: ../daemon/gvfsbackendburn.c:720 ../daemon/gvfsbackendburn.c:746
-#: ../daemon/gvfsbackendburn.c:784
-msgid "No such file or directory"
-msgstr "Немає такого файлу чи каталогу"
-
-#: ../daemon/gvfsbackendburn.c:426 ../daemon/gvfsbackenddav.c:1804
-msgid "Directory not empty"
-msgstr "Каталог не порожній"
-
-#: ../daemon/gvfsbackendburn.c:460 ../daemon/gvfsbackendburn.c:898
-msgid "Can't copy file over directory"
-msgstr "Не вдається скопіювати файл поверх каталогу"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:652
-msgid "CD/DVD Creator"
-msgstr "Створення CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:681 ../daemon/gvfsbackendcomputer.c:652
-#: ../daemon/gvfsbackenddnssd.c:393 ../daemon/gvfsbackendftp.c:846
-#: ../daemon/gvfsbackendnetwork.c:637
-#, c-format
-msgid "The file is not a directory"
-msgstr "Цей файл не є каталогом"
-
-#: ../daemon/gvfsbackendburn.c:756 ../daemon/gvfsbackendburn.c:792
-#: ../daemon/gvfsbackendburn.c:918
-msgid "File exists"
-msgstr "Файл існує"
-
-#: ../daemon/gvfsbackendburn.c:846
-msgid "No such file or directory in target path"
-msgstr "Немає такого файлу чи каталогу у шляху призначення"
-
-#: ../daemon/gvfsbackendburn.c:869
-msgid "Can't copy directory over directory"
-msgstr "Не вдається скопіювати каталог поверх каталогу"
-
-#: ../daemon/gvfsbackendburn.c:878
-msgid "Target file exists"
-msgstr "Файл призначення вже існує"
-
-#: ../daemon/gvfsbackendburn.c:885
-msgid "Can't recursively copy directory"
-msgstr "Не вдається скопіювати каталог рекурсивно"
-
-#: ../daemon/gvfsbackendburn.c:944
-msgid "Not supported"
-msgstr "Не підтримується"
-
-#: ../daemon/gvfsbackendcdda.c:264 ../daemon/gvfsbackendcdda.c:335
-msgid "No drive specified"
-msgstr "Пристрій не вказано"
-
-#: ../daemon/gvfsbackendcdda.c:279
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Не вдається найти пристрій %s"
-
-#: ../daemon/gvfsbackendcdda.c:289
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Пристрій %s не містить звукових файлів"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:297
-#, c-format
-msgid "cdda mount on %s"
-msgstr "підключення cdda до %s"
-
-#: ../daemon/gvfsbackendcdda.c:298 ../daemon/gvfsbackendcdda.c:802
-#: ../hal/ghalmount.c:492 ../hal/ghalvolume.c:298 ../hal/ghalvolume.c:319
-#, c-format
-msgid "Audio Disc"
-msgstr "Звуковий диск"
-
-#: ../daemon/gvfsbackendcdda.c:359
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Файлова система зайнята: %d відкритий файл"
-msgstr[1] "Файлова система зайнята: %d відкритих файли"
-msgstr[2] "Файлова система зайнята: %d відкритих файлів"
-
-#: ../daemon/gvfsbackendcdda.c:549
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Немає такого файлу %s на пристрої %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:658
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Помилка програми \"paranoia\" на пристрої %s"
-
-#: ../daemon/gvfsbackendcdda.c:721
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Помилка пошуку у потоці на пристрої %s"
-
-#: ../daemon/gvfsbackendcdda.c:818 ../daemon/gvfsbackendgphoto2.c:1695
-#, c-format
-msgid "No such file"
-msgstr "Немає такого файлу"
-
-#: ../daemon/gvfsbackendcdda.c:825 ../daemon/gvfsbackendcomputer.c:573
-#: ../daemon/gvfsbackenddnssd.c:345 ../daemon/gvfsbackendftp.c:1955
-#: ../daemon/gvfsbackendnetwork.c:590 ../daemon/gvfsbackendsmbbrowse.c:799
-#: ../daemon/gvfsbackendsmbbrowse.c:866 ../daemon/gvfsbackendsmbbrowse.c:1037
-#: ../daemon/gvfsbackendsmbbrowse.c:1111
-#, c-format
-msgid "File doesn't exist"
-msgstr "Файл не існує"
-
-#: ../daemon/gvfsbackendcdda.c:832
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Файл не існує або не є звуковою доріжкою"
-
-#: ../daemon/gvfsbackendcdda.c:938
-msgid "Audio CD Filesystem Service"
-msgstr "Служба файлової системи Audio CD"
-
-#: ../daemon/gvfsbackendcomputer.c:180 ../daemon/gvfsbackendcomputer.c:694
-msgid "Computer"
-msgstr "Комп'ютер"
-
-#: ../daemon/gvfsbackendcomputer.c:467
-msgid "Filesystem"
-msgstr "Файлова система"
-
-#: ../daemon/gvfsbackendcomputer.c:591 ../daemon/gvfsbackendgphoto2.c:1687
-#: ../daemon/gvfsbackendobexftp.c:760 ../daemon/gvfsbackendtrash.c:637
-msgid "Can't open directory"
-msgstr "Не вдається відкрити каталог"
-
-#: ../daemon/gvfsbackendcomputer.c:595 ../daemon/gvfsbackendcomputer.c:733
-msgid "Can't open mountable file"
-msgstr "Не вдається відкрити файл, що монтується"
-
-#: ../daemon/gvfsbackendcomputer.c:781
-#, c-format
-msgid "Internal error: %s"
-msgstr "Внутрішня помилка: %s"
-
-#: ../daemon/gvfsbackendcomputer.c:813 ../daemon/gvfsbackendcomputer.c:930
-msgid "Can't mount file"
-msgstr "Не вдається змонтувати файл"
-
-#: ../daemon/gvfsbackendcomputer.c:825
-msgid "No media in the drive"
-msgstr "У пристрої відсутній диск"
-
-#: ../daemon/gvfsbackendcomputer.c:882 ../daemon/gvfsbackendcomputer.c:973
-#: ../daemon/gvfsbackendcomputer.c:1073
-msgid "Not a mountable file"
-msgstr "Файл не є файлом для підключення"
-
-#: ../daemon/gvfsbackendcomputer.c:988
-msgid "Can't unmount file"
-msgstr "Не вдається відключити файл"
-
-#: ../daemon/gvfsbackendcomputer.c:1104
-msgid "Can't eject file"
-msgstr "Не вдається витягнути файл"
-
-#: ../daemon/gvfsbackenddav.c:269 ../daemon/gvfsbackenddav.c:1289
-#: ../daemon/gvfsbackendhttp.c:220
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Помилка HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:285
-msgid "Could not parse response"
-msgstr "Не вдається розібрати відповідь"
-
-#: ../daemon/gvfsbackenddav.c:294
-msgid "Empty response"
-msgstr "Відповідь порожня"
-
-#: ../daemon/gvfsbackenddav.c:301
-msgid "Unexpected reply from server"
-msgstr "Неочікувана відповідь від сервера"
-
-#: ../daemon/gvfsbackenddav.c:944 ../daemon/gvfsbackenddav.c:1421
-#, c-format
-msgid "Response invalid"
-msgstr "Неправильна відповідь"
-
-#: ../daemon/gvfsbackenddav.c:1087
-msgid "WebDAV share"
-msgstr "Ресурс WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1089
-#, c-format
-msgid "Enter password for %s"
-msgstr "Введіть пароль для %s"
-
-#: ../daemon/gvfsbackenddav.c:1092
-msgid "Please enter proxy password"
-msgstr "Введіть пароль проксі-сервера"
-
-#: ../daemon/gvfsbackenddav.c:1206 ../daemon/gvfsbackendhttp.c:273
-#: ../daemon/gvfsbackendobexftp.c:605 ../daemon/gvfsbackendobexftp.c:616
-#: ../daemon/gvfsbackendsmb.c:595
-msgid "Invalid mount spec"
-msgstr "Неправильна специфікація монтування"
-
-#: ../daemon/gvfsbackenddav.c:1293 ../daemon/gvfsbackenddav.c:1297
-msgid "Not a WebDAV enabled share"
-msgstr "Не є ресурсом WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1319
-#, c-format
-msgid "WebDAV on %s"
-msgstr "Ресурс WebDAV на %s"
-
-#: ../daemon/gvfsbackenddav.c:1377 ../daemon/gvfsbackenddav.c:1448
-msgid "Could not create request"
-msgstr "Не вдається створити запит"
-
-#: ../daemon/gvfsbackenddav.c:1511 ../daemon/gvfsbackenddav.c:1764
-#: ../daemon/gvfsbackendftp.c:1558 ../daemon/gvfsbackendftp.c:2189
-#: ../daemon/gvfsbackendsmb.c:1701
-#, c-format
-msgid "Target file already exists"
-msgstr "Файл призначення вже існує"
-
-#: ../daemon/gvfsbackenddav.c:1584 ../daemon/gvfsbackendsftp.c:2662
-#: ../daemon/gvfsbackendsmb.c:983
-msgid "The file was externally modified"
-msgstr "Файл був змінений зовні"
-
-#: ../daemon/gvfsbackenddav.c:1615 ../daemon/gvfsbackendsmb.c:1021
-#: ../daemon/gvfsbackendsmb.c:1718
-msgid "Backup file creation failed"
-msgstr "Помилка при створенні резервної копії файлу"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Не вдається стежити за станом файлу чи каталогу."
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Мережа"
-
-#: ../daemon/gvfsbackendftp.c:224
-msgid "Accounts are unsupported"
-msgstr "Облікові записи не підтримуються"
-
-#: ../daemon/gvfsbackendftp.c:228
-msgid "Host closed connection"
-msgstr "Вузол закрив з'єднання"
-
-#: ../daemon/gvfsbackendftp.c:232
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr ""
-"Не вдається встановити з'єднання даних. Перевірте параметри брандмауера."
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Data connection closed"
-msgstr "З'єднання даних закрите"
-
-#: ../daemon/gvfsbackendftp.c:242
-msgid "File unavailable"
-msgstr "Файл недоступний"
-
-#: ../daemon/gvfsbackendftp.c:246
-msgid "Operation failed"
-msgstr "Помилка операції"
-
-#: ../daemon/gvfsbackendftp.c:251
-msgid "No space left on server"
-msgstr "На сервері не залишилось вільного місця"
-
-#: ../daemon/gvfsbackendftp.c:259 ../daemon/gvfsbackendsftp.c:3684
-msgid "Operation unsupported"
-msgstr "Дія підтримується"
-
-#: ../daemon/gvfsbackendftp.c:263 ../daemon/gvfsbackendsftp.c:259
-msgid "Permission denied"
-msgstr "Доступ заборонено"
-
-#: ../daemon/gvfsbackendftp.c:267
-msgid "Page type unknown"
-msgstr "Невідомий тип сторінки"
-
-#: ../daemon/gvfsbackendftp.c:271 ../daemon/gvfsbackendftp.c:2059
-#, c-format
-msgid "Invalid filename"
-msgstr "Неправильна назва файлу"
-
-#: ../daemon/gvfsbackendftp.c:275 ../daemon/gvfsbackendftp.c:349
-#: ../daemon/gvfsbackendftp.c:378 ../daemon/gvfsbackendftp.c:397
-#: ../daemon/gvfsbackendftp.c:410 ../daemon/gvfsbackendftp.c:751
-#, c-format
-msgid "Invalid reply"
-msgstr "Неправильна відповідь"
-
-#: ../daemon/gvfsbackendftp.c:517
-#, c-format
-msgid "broken transmission"
-msgstr "помилка при передачі"
-
-#: ../daemon/gvfsbackendftp.c:611 ../daemon/gvfsbackendftp.c:771
-#, c-format
-msgid "Could not connect to host"
-msgstr "Не вдається з'єднатися з вузлом"
-
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendftp.c:897 ../daemon/gvfsbackendsftp.c:1736
-#, c-format
-msgid "/ on %s"
-msgstr "/ на %s"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1259
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Введіть пароль для ftp на %s"
-
-#: ../daemon/gvfsbackendftp.c:1279 ../daemon/gvfsbackendsftp.c:833
-msgid "Password dialog cancelled"
-msgstr "Діалог вводу паролю перервано"
-
-#: ../daemon/gvfsbackendftp.c:1345
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp на %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1351
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "ftp як %s на %s"
-
-#: ../daemon/gvfsbackendftp.c:1385 ../daemon/gvfsbackendsftp.c:1410
-msgid "No hostname specified"
-msgstr "Назва вузла не вказана"
-
-#: ../daemon/gvfsbackendftp.c:1608 ../daemon/gvfsbackendftp.c:2150
-msgid "backups not supported yet"
-msgstr "резервні копії ще не підтримуються"
-
-#: ../daemon/gvfsbackendftp.c:1684
-#, c-format
-msgid "filename too long"
-msgstr "назва файлу надто довга"
-
-#: ../daemon/gvfsbackendftp.c:2169
-#, c-format
-msgid "Invalid destination filename"
-msgstr "Неправильна назва файлу призначення"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:697
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Цифрова камера (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:843 ../hal/ghalvolume.c:398
-#, c-format
-msgid "%s Camera"
-msgstr "Камера %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:846 ../hal/ghalvolume.c:393
-#, c-format
-msgid "%s Audio Player"
-msgstr "Звуковий програвач %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../hal/ghalvolume.c:407
-msgid "Camera"
-msgstr "Камера"
-
-#: ../daemon/gvfsbackendgphoto2.c:857 ../hal/ghalvolume.c:405
-msgid "Audio Player"
-msgstr "Звуковий програвач"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1539
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "підключення gphoto2 на %s"
-
-#: ../daemon/gvfsbackendhttp.c:216
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Помилка клієнта HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:534 ../daemon/gvfsbackendsftp.c:1724
-#: ../daemon/gvfsbackendsmb.c:1230 ../daemon/gvfsbackendtrash.c:962
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (неправильне кодування)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Сповіщення для каталогів не підтримується"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:694
-msgid "Windows Network"
-msgstr "Мережа Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Локальна мережа"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Огляд мережі"
-
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:444 ../daemon/gvfsbackendsmb.c:514
-#: ../daemon/gvfsbackendsmb.c:1223
-#, c-format
-msgid "%s on %s"
-msgstr "%s на %s"
-
-#: ../daemon/gvfsbackendsftp.c:251
-msgid "ssh program unexpectedly exited"
-msgstr "Програма ssh несподівано завершилась"
-
-#: ../daemon/gvfsbackendsftp.c:266
-msgid "Hostname not known"
-msgstr "Невідома назва вузла"
-
-#: ../daemon/gvfsbackendsftp.c:273
-msgid "No route to host"
-msgstr "Немає маршруту до вузла"
-
-#: ../daemon/gvfsbackendsftp.c:280
-msgid "Connection refused by server"
-msgstr "З'єднання відхилено сервером"
-
-#: ../daemon/gvfsbackendsftp.c:287
-msgid "Host key verification failed"
-msgstr "Помилка при перевірці сертифікату вузла"
-
-#: ../daemon/gvfsbackendsftp.c:370
-msgid "Unable to spawn ssh program"
-msgstr "Не вдається виконати програму ssh"
-
-#: ../daemon/gvfsbackendsftp.c:386
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Не вдається виконати програму ssh: %s"
-
-#: ../daemon/gvfsbackendsftp.c:489 ../daemon/gvfsbackendsftp.c:741
-msgid "Timed out when logging in"
-msgstr "Час очікування входу у систему вийшов"
-
-#: ../daemon/gvfsbackendsftp.c:817
-msgid "Enter passphrase for key"
-msgstr "Введіть ключову фразу для ключа"
-
-#: ../daemon/gvfsbackendsftp.c:819
-msgid "Enter password"
-msgstr "Введіть пароль"
-
-#: ../daemon/gvfsbackendsftp.c:880
-msgid "Can't send password"
-msgstr "Не вдається надіслати пароль"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Log In Anyway"
-msgstr "З'єднатися попри все"
-
-#: ../daemon/gvfsbackendsftp.c:888
-msgid "Cancel Login"
-msgstr "Скасувати з'єднання"
-
-#: ../daemon/gvfsbackendsftp.c:898
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Не вдається перевірити автентичність віддаленого комп'ютера (%s).\n"
-"Це зазвичай відбувається при першому з'єданні з комп'ютером.\n"
-"\n"
-"Рядок ідентифікації, переданий віддаленим комп'ютером: %s. Якщо ви хочете "
-"бути абсолютно впевнені у безпеці з'єднання з цим комп'ютером, "
-"зверніться до системного адміністратора."
-
-#: ../daemon/gvfsbackendsftp.c:918
-msgid "Login dialog cancelled"
-msgstr "Діалог вводу паролю перервано"
-
-#: ../daemon/gvfsbackendsftp.c:938
-msgid "Can't send host identity confirmation"
-msgstr "Не вдається надіслати підтвердження ідентифікації вузла"
-
-#: ../daemon/gvfsbackendsftp.c:1329 ../daemon/gvfsbackendsftp.c:1352
-msgid "Protocol error"
-msgstr "Помилка у протоколі"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1376
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp на %s"
-
-#: ../daemon/gvfsbackendsftp.c:1400
-msgid "Unable to find supported ssh command"
-msgstr "Не вдається знайти підтримувану команду ssh"
-
-#: ../daemon/gvfsbackendsftp.c:1800
-msgid "File is directory"
-msgstr "Файл є каталогом"
-
-#: ../daemon/gvfsbackendsftp.c:1809
-msgid "Failure"
-msgstr "Помилка"
-
-#: ../daemon/gvfsbackendsftp.c:1874 ../daemon/gvfsbackendsftp.c:1936
-#: ../daemon/gvfsbackendsftp.c:1947 ../daemon/gvfsbackendsftp.c:2005
-#: ../daemon/gvfsbackendsftp.c:2095 ../daemon/gvfsbackendsftp.c:2124
-#: ../daemon/gvfsbackendsftp.c:2172 ../daemon/gvfsbackendsftp.c:2251
-#: ../daemon/gvfsbackendsftp.c:2362 ../daemon/gvfsbackendsftp.c:2403
-#: ../daemon/gvfsbackendsftp.c:2455 ../daemon/gvfsbackendsftp.c:2526
-#: ../daemon/gvfsbackendsftp.c:2546 ../daemon/gvfsbackendsftp.c:2700
-#: ../daemon/gvfsbackendsftp.c:2726 ../daemon/gvfsbackendsftp.c:2783
-#: ../daemon/gvfsbackendsftp.c:2842 ../daemon/gvfsbackendsftp.c:3122
-#: ../daemon/gvfsbackendsftp.c:3251 ../daemon/gvfsbackendsftp.c:3284
-#: ../daemon/gvfsbackendsftp.c:3385 ../daemon/gvfsbackendsftp.c:3426
-#: ../daemon/gvfsbackendsftp.c:3482 ../daemon/gvfsbackendsftp.c:3518
-#: ../daemon/gvfsbackendsftp.c:3552 ../daemon/gvfsbackendsftp.c:3567
-#: ../daemon/gvfsbackendsftp.c:3586 ../daemon/gvfsbackendsftp.c:3664
-msgid "Invalid reply received"
-msgstr "Отримано неправильну відповідь"
-
-#: ../daemon/gvfsbackendsftp.c:2193
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Помилка створення резервної копії файлу: %s"
-
-#: ../daemon/gvfsbackendsftp.c:2608
-msgid "Unable to create temporary file"
-msgstr "Не вдається створити тимчасовий файл"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:214
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Вимагається пароль для ресурсу %s на %s"
-
-#: ../daemon/gvfsbackendsmb.c:466 ../daemon/gvfsbackendsmb.c:506
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Внутрішня помилка (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:561
-msgid "Failed to mount Windows share"
-msgstr "Помилка приєднання ресурсу Windows"
-
-#: ../daemon/gvfsbackendsmb.c:686 ../daemon/gvfsbackendsmb.c:1117
-msgid "Unsupported seek type"
-msgstr "Непідтримуваний тип пошуку"
-
-#: ../daemon/gvfsbackendsmb.c:1171
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Помилка при створенні резервного файлу: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1602
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Помилка при видалення файлу: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1666
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Помилка при переміщенні файлу: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1690
-msgid "Can't move directory over directory"
-msgstr "Не вдається перемістити каталог над каталогом"
-
-#: ../daemon/gvfsbackendsmb.c:1738
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Помилка при видаленні файла призначення: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1762
-msgid "Can't recursively move directory"
-msgstr "Не вдається перемістити каталог рекурсивно"
-
-#: ../daemon/gvfsbackendsmb.c:1825
-msgid "Windows Shares Filesystem Service"
-msgstr "Служба файлової системи ресурсів Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:702
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Ресурси Windows на %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:794 ../daemon/gvfsbackendsmbbrowse.c:840
-msgid "The file is not a mountable"
-msgstr "Цей файл не є монтованим"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:862
-msgid "Not a regular file"
-msgstr "Не є звичайним файлом"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1107
-msgid "Not a directory"
-msgstr "Не є каталогом"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1219
-msgid "Windows Network Filesystem Service"
-msgstr "Служба мережної файлової системи Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:600 ../daemon/gvfsbackendtrash.c:1190
-msgid "Trash"
-msgstr "Смітник"
-
-#: ../daemon/gvfsbackendtrash.c:972
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (на смітнику)"
-
-#: ../daemon/gvfsbackendtrash.c:1291
-msgid "Can't delete trash"
-msgstr "Не можна видаляти смітник"
-
-#: ../daemon/gvfsbackendtrash.c:1638 ../daemon/gvfsbackendtrash.c:1713
-msgid "Trash directory notification not supported"
-msgstr "Сповіщення не підтримується для каталогу смітника"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Неправильний тип драйвера"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Помилка передачі fd: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:119
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:169 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Дія не підтримується драйвером"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Символічні посилання не підтримуються драйвером"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Неправильне повідомлення dbus"
-
-#: ../daemon/main.c:47
-msgid "Replace old daemon."
-msgstr "Замінити старий демон."
-
-#: ../daemon/main.c:48
-msgid "Don't start fuse."
-msgstr "Не запускати fuse."
-
-#: ../daemon/main.c:60
-msgid "GVFS Daemon"
-msgstr "Демон GVFS"
-
-#: ../daemon/main.c:63
-msgid "Main daemon for GVFS"
-msgstr "Основна служба GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:74
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:76 ../programs/gvfs-cat.c:165 ../programs/gvfs-cat.c:178
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:388 ../programs/gvfs-move.c:97
-#: ../programs/gvfs-open.c:133 ../programs/gvfs-open.c:146
-#: ../programs/gvfs-save.c:165 ../programs/gvfs-tree.c:253
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr ""
-"Для отримання додаткової інформації використовуйте команду \"%s --help\""
-
-#: ../daemon/mount.c:432
-msgid "Invalid arguments from spawned child"
-msgstr "Неправильні аргументи від дочірнього процесу"
-
-#: ../daemon/mount.c:731
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Помилка автомонтування: %s"
-
-#: ../daemon/mount.c:776
-msgid "The specified location is not mounted"
-msgstr "Вказана адреса не підключена"
-
-#: ../daemon/mount.c:781
-msgid "The specified location is not supported"
-msgstr "Вказана адреса не підтримується"
-
-#: ../daemon/mount.c:944
-msgid "Location is already mounted"
-msgstr "Адреса вже підключена"
-
-#: ../daemon/mount.c:952
-msgid "Location is not mountable"
-msgstr "Адреса не є монтованою"
-
-#: ../hal/ghaldrive.c:144
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../hal/ghaldrive.c:146
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../hal/ghaldrive.c:148
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../hal/ghaldrive.c:152
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../hal/ghaldrive.c:154
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../hal/ghaldrive.c:156
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../hal/ghaldrive.c:158
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../hal/ghaldrive.c:160
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../hal/ghaldrive.c:162
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../hal/ghaldrive.c:165
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../hal/ghaldrive.c:168
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../hal/ghaldrive.c:170
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../hal/ghaldrive.c:172
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../hal/ghaldrive.c:174
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../hal/ghaldrive.c:176
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../hal/ghaldrive.c:178
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../hal/ghaldrive.c:180
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../hal/ghaldrive.c:186
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Пристрій %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../hal/ghaldrive.c:192
-#, c-format
-msgid "%s Drive"
-msgstr "Пристрій %s"
-
-#: ../hal/ghaldrive.c:196
-msgid "Floppy Drive"
-msgstr "Флопі-дисковод"
-
-#: ../hal/ghaldrive.c:202
-msgid "Software RAID Drive"
-msgstr "Пристрій програмного RAID"
-
-#: ../hal/ghaldrive.c:204
-msgid "USB Drive"
-msgstr "Пристрій USB"
-
-#: ../hal/ghaldrive.c:206
-msgid "ATA Drive"
-msgstr "Пристрій ATA"
-
-#: ../hal/ghaldrive.c:208
-msgid "SCSI Drive"
-msgstr "Пристрій SCSI"
-
-#: ../hal/ghaldrive.c:210
-msgid "FireWire Drive"
-msgstr "Пристрій FireWire"
-
-#: ../hal/ghaldrive.c:214
-msgid "Tape Drive"
-msgstr "Стрічковий накопичувач"
-
-#: ../hal/ghaldrive.c:216
-msgid "CompactFlash Drive"
-msgstr "Пристрій CompactFlash"
-
-#: ../hal/ghaldrive.c:218
-msgid "MemoryStick Drive"
-msgstr "Пристрій MemoryStick"
-
-#: ../hal/ghaldrive.c:220
-msgid "SmartMedia Drive"
-msgstr "Пристрій SmartMedia"
-
-#: ../hal/ghaldrive.c:222
-msgid "SD/MMC Drive"
-msgstr "Пристрій SD/MMC"
-
-#: ../hal/ghaldrive.c:224
-msgid "Zip Drive"
-msgstr "Дисковод Zip"
-
-#: ../hal/ghaldrive.c:226
-msgid "Jaz Drive"
-msgstr "Дисковод Jaz"
-
-#: ../hal/ghaldrive.c:228
-msgid "Thumb Drive"
-msgstr "USB Flash брелок"
-
-#: ../hal/ghaldrive.c:231
-msgid "Mass Storage Drive"
-msgstr "Накопичувач"
-
-#: ../hal/ghaldrive.c:730
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr ""
-"Не вдається витягнути диск, оскільки один чи декілька томів цього диску "
-"зайняті."
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "CD-ROM Disc"
-msgstr "Диск CD-ROM"
-
-#: ../hal/ghalmount.c:166 ../hal/ghalvolume.c:155
-msgid "Blank CD-ROM Disc"
-msgstr "Чистий диск CD-ROM"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "CD-R Disc"
-msgstr "Диск CD-R"
-
-#: ../hal/ghalmount.c:167 ../hal/ghalvolume.c:156
-msgid "Blank CD-R Disc"
-msgstr "Чистий диск CD-R"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "CD-RW Disc"
-msgstr "Диск CD-RW"
-
-#: ../hal/ghalmount.c:168 ../hal/ghalvolume.c:157
-msgid "Blank CD-RW Disc"
-msgstr "Чистий диск CD-RW"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "DVD-ROM Disc"
-msgstr "Диск DVD-ROM"
-
-#: ../hal/ghalmount.c:169 ../hal/ghalmount.c:171 ../hal/ghalvolume.c:158
-#: ../hal/ghalvolume.c:160
-msgid "Blank DVD-ROM Disc"
-msgstr "Чистий диск DVD-ROM"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "DVD-RAM Disc"
-msgstr "Диск DVD-RAM"
-
-#: ../hal/ghalmount.c:170 ../hal/ghalvolume.c:159
-msgid "Blank DVD-RAM Disc"
-msgstr "Чистий диск DVD-RAM"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "DVD-RW Disc"
-msgstr "Диск DVD-RW"
-
-#: ../hal/ghalmount.c:172 ../hal/ghalvolume.c:161
-msgid "Blank DVD-RW Disc"
-msgstr "Чистий диск DVD-RW"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "DVD+R Disc"
-msgstr "Диск DVD+R"
-
-#: ../hal/ghalmount.c:173 ../hal/ghalvolume.c:162
-msgid "Blank DVD+R Disc"
-msgstr "Чистий диск DVD+R"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "DVD+RW Disc"
-msgstr "Диск DVD+RW"
-
-#: ../hal/ghalmount.c:174 ../hal/ghalvolume.c:163
-msgid "Blank DVD+RW Disc"
-msgstr "Чистий диск DVD+RW"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "DVD+R DL Disc"
-msgstr "Диск DVD+R DL"
-
-#: ../hal/ghalmount.c:175 ../hal/ghalvolume.c:164
-msgid "Blank DVD+R DL Disc"
-msgstr "Чистий диск DVD+R DL"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blu-Ray Disc"
-msgstr "Диск Blu-Ray"
-
-#: ../hal/ghalmount.c:176 ../hal/ghalvolume.c:165
-msgid "Blank Blu-Ray Disc"
-msgstr "Чистий диск Blu-Ray"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blu-Ray R Disc"
-msgstr "Диск Blu-Ray R"
-
-#: ../hal/ghalmount.c:177 ../hal/ghalvolume.c:166
-msgid "Blank Blu-Ray R Disc"
-msgstr "Чистий диск Blu-Ray R"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blu-Ray RW Disc"
-msgstr "Диск Blu-Ray RW"
-
-#: ../hal/ghalmount.c:178 ../hal/ghalvolume.c:167
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Чистий диск Blu-Ray RW"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "HD DVD Disc"
-msgstr "Диск HD DVD"
-
-#: ../hal/ghalmount.c:179 ../hal/ghalvolume.c:168
-msgid "Blank HD DVD Disc"
-msgstr "Чистий диск HD DVD"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "HD DVD-R Disc"
-msgstr "Диск HD DVD-R"
-
-#: ../hal/ghalmount.c:180 ../hal/ghalvolume.c:169
-msgid "Blank HD DVD-R Disc"
-msgstr "Чистий диск HD DVD-R"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "HD DVD-RW Disc"
-msgstr "Диск HD DVD-RW"
-
-#: ../hal/ghalmount.c:181 ../hal/ghalvolume.c:170
-msgid "Blank HD DVD-RW Disc"
-msgstr "Чистий диск HD DVD-RW"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "MO Disc"
-msgstr "МО диск"
-
-#: ../hal/ghalmount.c:182 ../hal/ghalvolume.c:171
-msgid "Blank MO Disc"
-msgstr "Чистий МО диск"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Disc"
-msgstr "Диск"
-
-#: ../hal/ghalmount.c:183 ../hal/ghalvolume.c:172
-msgid "Blank Disc"
-msgstr "Чистий диск"
-
-#: ../hal/ghalmount.c:368
-#, c-format
-msgid "%.1f kB Media"
-msgstr "Диск %.1f КБ"
-
-#: ../hal/ghalmount.c:373
-#, c-format
-msgid "%.1f MB Media"
-msgstr "Диск %.1f МБ"
-
-#: ../hal/ghalmount.c:378
-#, c-format
-msgid "%.1f GB Media"
-msgstr "Диск %.1f ГБ"
-
-#: ../hal/ghalmount.c:490 ../hal/ghalvolume.c:317
-msgid "Mixed Audio/Data Disc"
-msgstr "Змішаний диск звук/дані"
-
-#: ../hal/ghalvolume.c:206
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f КБ"
-
-#: ../hal/ghalvolume.c:211
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f МБ"
-
-#: ../hal/ghalvolume.c:216
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f ГБ"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:305
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "Зашифровані дані %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../hal/ghalvolume.c:328
-#, c-format
-msgid "%s Media"
-msgstr "Диск %s"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:59
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: помилка при відкриванні файлу: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:82
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, помилка при записі на стандартний вивід"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:94
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s, помилка при читанні: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:112
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:помилка при закритті: %s\n"
-
-#: ../programs/gvfs-cat.c:138
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "АДРЕС... - конкатенувати АДРЕСА на стандартний вивід."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:143
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Об'єднувати всі файли у каталозі та вивести їх на стандартний вивід. Працює "
-"як стандартна утиліта cat, але замість адреси локального файлу використовує "
-"адресу gvfs. Наприклад, ви можете використовувати адресу у вигляді smb://server/"
-"resource/file.txt"
-
-#: ../programs/gvfs-cat.c:150
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Примітка: якщо потрібні параметри форматування, такі як -n, -T "
-"чи інші, достатньо просто пропустити вивід через команду cat."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:176 ../programs/gvfs-open.c:144
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: не вказано адресу"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:58
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: помилка при відкритті адреси: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:85
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: помилка запуску програми: %s\n"
-
-#: ../programs/gvfs-open.c:115
-msgid "FILES... - open FILES with registered application."
-msgstr "ФАЙЛИ... - відкриває ФАЙЛИ у зареєстрованій програмі."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:119
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Відкриває файл(ы) у стандартній програмі, що зареєстрована для "
-"обробки файлів цього типу."
diff --git a/po/vi.po b/po/vi.po
deleted file mode 100644
index 618f4881..00000000
--- a/po/vi.po
+++ /dev/null
@@ -1,1541 +0,0 @@
-# Vietnamese translation for GVFS.
-# Copyright © 2008 GNOME i18n Project for Vietnamese.
-# Clytie Siddall <clytie@riverland.net.au>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs 0.99.1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-21 15:25+0000\n"
-"PO-Revision-Date: 2008-08-24 15:18+0700\n"
-"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
-"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: LocFactoryEditor 1.7b3\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "Thao tác không được hỗ trợ, vì tập tin nằm ở điểm gắn kết khác nhau"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "Giá trị đáp ứng không hợp lệ từ hàm lấy thông tin (get_info)"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "Giá trị đáp ứng không hợp lệ từ hàm truy vấn thông tin (query_info)"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "Không thể lấy bộ mô tả tập tin luồng"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "Giá trị đáp ứng không hợp lệ từ hàm mở (open)"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "Đã không lấy được bộ mô tả tập tin luồng"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "Giá trị đáp ứng không hợp lệ từ hàm gọi (call)"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr ""
-"Giá trị đáp ứng không hợp lệ từ hàm lấy thông tin về hệ thống tập tin "
-"(get_filesystem_info)"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "Không thể tìm thấy điểm gắn kết bao bọc"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "Tên tập tin không hợp lệ %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr ""
-"Giá trị đáp ứng không hợp lệ từ hàm truy vấn thông tin về hệ thống tập tin "
-"(query_filesystem_info)"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "Giá trị đáp ứng không hợp lệ từ hàm theo dõi thư mục (monitor_dir)"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "Giá trị đáp ứng không hợp lệ từ hàm theo dõi tập tin (monitor_file)"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "Lỗi trong giao thức luồng: %s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "Kết thúc luồng"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "Thao tác bị thôi"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "Chức năng seek (tìm nơi) không được hỗ trợ trên luồng"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "Thao tác truy vấn thông tin không được hỗ trợ"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "Chức năng truy vấn thông không được hỗ trợ trên luồng"
-
-#: ../client/gdaemonvfs.c:749
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "Gặp lỗi khi lấy thông tin về điểm gắn kết: %s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "Gặp lỗi khi kết nối tới trình nền: %s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "Gặp lỗi khi tạo ổ cắm: %s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "Gặp lỗi khi kết nối tới ổ cắm: %s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "Định dạng thông tin tập tin không hợp lệ"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "Nội dung danh sách thông tin thuộc tính không hợp lệ"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "Gặp lỗi khi kết nối tới mạch nối D-Bus: %s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "Dịch vụ Hệ thống Tập tin %s"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "Lỗi: %s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "Sử dụng: %s --spawner dbus-id đường_dẫn_đối_tường"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "Sử dụng: %s khoá=giá_trị khoá=giá_trị ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "Chưa xác định kiểu điểm gắn kết"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "điểm gắn kết cho %s đã bắt đầu chạy"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "gặp lỗi khi khởi chạy trình nền gắn kết"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ trên %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "Chưa chỉ ra tên máy"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1449 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "đặc tả gắn kết không hợp lệ"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "Tập tin không tồn tại"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "Tập tin không phải là một thư mục"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "Ghi chép"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "Không thể tạo thư mục tạm thời"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendgphoto2.c:2690
-#, c-format
-msgid "No such file or directory"
-msgstr "Không có tập tin hay thư mục nào như vậy"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2036
-msgid "Directory not empty"
-msgstr "Thư mục không rỗng"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "Không thể sao chép tập tin đè lên thư mục"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "Bộ tạo đĩa CD/DVD"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2763
-msgid "File exists"
-msgstr "Tập tin đã có"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "Không có tập tin hay thư mục nào như vậy trên đường dẫn đích đến"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "Không thể sao chép thư mục đè lên thư mục"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "Tập tin đích đã có"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "Không thể sao chép đệ quy thư mục"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2348
-#: ../daemon/gvfsbackendgphoto2.c:2556 ../daemon/gvfsbackendgphoto2.c:2651
-#: ../daemon/gvfsbackendgphoto2.c:2742
-msgid "Not supported"
-msgstr "Không được hỗ trợ"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1402
-msgid "Cannot connect to the system bus"
-msgstr "Không thể kết nối tới mạch hệ thống"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1414
-msgid "Cannot create libhal context"
-msgstr "Không thể tạo ngữ cảnh libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1427
-msgid "Cannot initialize libhal"
-msgstr "Không thể khởi động libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "Chưa ghi rõ ổ đĩa"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "Không thể tìm ổ đĩa %s."
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "Ổ đĩa %s không chứa tập tin âm thanh"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "điểm gắn kết cdda trên %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "Đĩa âm thanh"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1655
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "Hệ thống tập tin đang bận: %d tập tin còn mở"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "Không có tập tin %s như vậy trên ồ đĩa %s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "Lỗi từ « paranoia » trên ổ đĩa %s"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "Gặp lỗi khi tìm nơi trên ổ đĩa %s"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1711
-#, c-format
-msgid "No such file"
-msgstr "Không có tập tin như vậy."
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "Tập tin không tồn tại hoặc không phải là một rãnh âm thanh."
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "Dịch vụ Hệ thống Tập tin Đĩa CD Âm thanh"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "Máy tính"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "Hệ thống tập tin"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1703
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "Không thể mở thư mục"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "Không thể mở tập tin có khả năng gắn kết"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "Lỗi nội bộ : %s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "Không thể gắn kết tập tin"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "Không có vật chứa trong ổ"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "Không phải là một tập tin có khả năng gắn kết"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "Không thể tháo gắn kết tập tin"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "Không thể đẩy tập tin ra"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1516
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "Lỗi HTTP: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "Không thể phân tích đáp ứng"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "Đáp ứng rỗng"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "Gặp đáp ứng bất thường từ máy phục vụ"
-
-#: ../daemon/gvfsbackenddav.c:1149 ../daemon/gvfsbackenddav.c:1651
-msgid "Response invalid"
-msgstr "Đáp ứng không hợp lệ"
-
-#: ../daemon/gvfsbackenddav.c:1292
-msgid "WebDAV share"
-msgstr "Vùng chia sẻ WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1294
-#, c-format
-msgid "Enter password for %s"
-msgstr "Nhập mật khẩu cho %s"
-
-#: ../daemon/gvfsbackenddav.c:1297
-msgid "Please enter proxy password"
-msgstr "Hãy nhập mật khẩu ủy nhiệm"
-
-#: ../daemon/gvfsbackenddav.c:1520 ../daemon/gvfsbackenddav.c:1524
-msgid "Not a WebDAV enabled share"
-msgstr "Không phải một vùng chia sẻ có khả năng WebDAV"
-
-#: ../daemon/gvfsbackenddav.c:1547
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV trên %s"
-
-#: ../daemon/gvfsbackenddav.c:1607 ../daemon/gvfsbackenddav.c:1680
-msgid "Could not create request"
-msgstr "Không thể tạo yêu cầu"
-
-#: ../daemon/gvfsbackenddav.c:1743 ../daemon/gvfsbackenddav.c:1996
-#: ../daemon/gvfsbackenddav.c:2107 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "Tập tin đích đã có"
-
-#: ../daemon/gvfsbackenddav.c:1816 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "Tập tin đã bị sửa đổi bên ngoài"
-
-#: ../daemon/gvfsbackenddav.c:1847 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "Lỗi tạo tập tin sao lưu"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "Không thể theo dõi tập tin hay thư mục"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "Mạng"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "Tài khoản không được hỗ trợ"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "Máy đã đóng kết nối"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "Không thể mở kết nối dữ liệu. Có thể bức tường lửa ngăn cản ?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "Kết nối dữ liệu bị đóng"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "Thao tác bị lỗi"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "Không có sức chứa còn rảnh trên máy phục vụ"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "Thao tác không được hỗ trợ"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "Không đủ quyền truy cập"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "Không rõ kiểu trang"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "Tên tập tin không hợp lệ"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "Đáp ứng không hợp lệ"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "lỗi truyền"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "Không thể kết nối tới máy chủ"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "Nhập mật khẩu cho dịch vụ FTP trên %s"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "Hộp thoại mật khẩu bị thôi"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "FTP trên %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "FTP dưới %s trên %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "Tập tin là thư mục"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "chưa hỗ trợ chức năng sao lưu"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "tên tập tin quá dài"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "Tên tập tin đích không hợp lệt"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: Thư mục hoặc tập tin đã có"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: Không có thư mục hoặc tập tin như thế"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: Tên tập tin không hợp lệ"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: Không được hỗ trợ"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "Máy ảnh số (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "Máy ảnh %s"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "Bộ phát nhạc %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "Máy ảnh"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "Bộ phát âm thanh"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2008
-msgid "Failed to get folder list"
-msgstr "Lỗi lấy danh sách thư mục"
-
-#: ../daemon/gvfsbackendgphoto2.c:1442
-msgid "No device specified"
-msgstr "Chưa xác định thiết bị"
-
-#: ../daemon/gvfsbackendgphoto2.c:1459
-msgid "Cannot create gphoto2 context"
-msgstr "Không thể tạo ngữ cảnh gphoto2"
-
-#: ../daemon/gvfsbackendgphoto2.c:1469
-msgid "Error creating camera"
-msgstr "Lỗi tạo máy quay"
-
-#: ../daemon/gvfsbackendgphoto2.c:1482 ../daemon/gvfsbackendgphoto2.c:1492
-msgid "Error loading device information"
-msgstr "Lỗi nạp thông tin thiết bị"
-
-#: ../daemon/gvfsbackendgphoto2.c:1504
-msgid "Error looking up device information"
-msgstr "Lỗi tìm thông tin thiết bị"
-
-#: ../daemon/gvfsbackendgphoto2.c:1514
-msgid "Error getting device information"
-msgstr "Lỗi lấy thông tin thiết bị"
-
-#: ../daemon/gvfsbackendgphoto2.c:1527
-msgid "Error setting up camera communications port"
-msgstr "Lỗi thiết lập cổng liên lạc với máy quay"
-
-#: ../daemon/gvfsbackendgphoto2.c:1538
-msgid "Error initializing camera"
-msgstr "Lỗi khởi động máy quay"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1552
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "điểm gắn kết gphoto2 trên %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1627
-msgid "No camera specified"
-msgstr "Chưa xác định máy quay"
-
-#: ../daemon/gvfsbackendgphoto2.c:1719
-msgid "Error creating file object"
-msgstr "Lỗi tạo đối tượng tập tin"
-
-#: ../daemon/gvfsbackendgphoto2.c:1733
-msgid "Error getting file"
-msgstr "Lỗi lấy tập tin"
-
-#: ../daemon/gvfsbackendgphoto2.c:1742
-msgid "Error getting data from file"
-msgstr "Lỗi lấy dữ liệu từ tập tin"
-
-#: ../daemon/gvfsbackendgphoto2.c:1836 ../daemon/gvfsbackendgphoto2.c:3010
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "Gặp lỗi dịch chuyển trong luồng của máy quay %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1975 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "Không phải là một thư mục"
-
-#: ../daemon/gvfsbackendgphoto2.c:2071
-msgid "Failed to get file list"
-msgstr "Lỗi lấy danh sách tập tin"
-
-#: ../daemon/gvfsbackendgphoto2.c:2360
-msgid "Error creating directory"
-msgstr "Lỗi tạo thư mục"
-
-#: ../daemon/gvfsbackendgphoto2.c:2568
-msgid "Name already exists"
-msgstr "Tên đã có"
-
-#: ../daemon/gvfsbackendgphoto2.c:2579 ../daemon/gvfsbackendgphoto2.c:3200
-msgid "New name too long"
-msgstr "Tên mới quá dài"
-
-#: ../daemon/gvfsbackendgphoto2.c:2589 ../daemon/gvfsbackendgphoto2.c:3211
-msgid "Error renaming dir"
-msgstr "Lỗi đổi tên thư mục"
-
-#: ../daemon/gvfsbackendgphoto2.c:2601 ../daemon/gvfsbackendgphoto2.c:3223
-msgid "Error renaming file"
-msgstr "Lỗi đổi tên tập tin"
-
-#: ../daemon/gvfsbackendgphoto2.c:2664
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "Thư mục '%s' không rỗng"
-
-#: ../daemon/gvfsbackendgphoto2.c:2675
-msgid "Error deleting directory"
-msgstr "Lỗi xoá thư mục"
-
-#: ../daemon/gvfsbackendgphoto2.c:2700
-msgid "Error deleting file"
-msgstr "Lỗi xoá tập tin"
-
-#: ../daemon/gvfsbackendgphoto2.c:2752
-msgid "Can't write to directory"
-msgstr "Không thể ghi vào thư mục"
-
-#: ../daemon/gvfsbackendgphoto2.c:2799
-msgid "Cannot allocate new file to append to"
-msgstr "Không thể cấp phát tập tin mới để nối thêm vào"
-
-#: ../daemon/gvfsbackendgphoto2.c:2813
-msgid "Cannot read file to append to"
-msgstr "Không thể đọc tập tin để nối thêm vào"
-
-#: ../daemon/gvfsbackendgphoto2.c:2823
-msgid "Cannot get data of file to append to"
-msgstr "Không thể lấy dữ liệu tập tin để nối thêm vào"
-
-#: ../daemon/gvfsbackendgphoto2.c:3109
-msgid "Error writing file"
-msgstr "Lỗi xoá tập tin"
-
-#: ../daemon/gvfsbackendgphoto2.c:3156
-msgid "Not supported (not same directory)"
-msgstr "Không hỗ trợ (không cùng thư mục)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3168
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "Không hỗ trợ (nguồn thư mục, đích thư mục)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3176
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "Không hỗ trợ (nguồn thư mục, đích tập tin đã có)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3188
-msgid "Not supported (src is file, dst is dir)"
-msgstr "Không hỗ trợ (nguồn tập tin, đích thư mục)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "Lỗi ứng dụng khách HTTP: %s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (bảng mã không hợp lệ)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "Thông báo thư mục không được hỗ trợ"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Mạng Windows"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "Mạng nội bộ"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "Theo dõi Vị trí Mạng"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s trên %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "Mất kết nối đến thiết bị"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "Thiết bị yêu cầu cập nhật phần mềm"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "Chương trình SSH đã thoát bất thường"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "Không rõ tên máy"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "Không có đường dẫn đến máy"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "Kết nối bị máy phục vụ từ chối"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "Lỗi thẩm tra khoá của máy"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "Không thể tạọ và thực hiện chương trình SSH"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "Không thể tạọ và thực hiện chương trình SSH: %s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "Quá hạn trong khi đăng nhập"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "Gõ cụm từ mật khẩu cho khoá"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "Gõ mật khẩu"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "Không thể gửi mật khẩu"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "Vẫn đăng nhập"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "Thôi đăng nhập"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"Không rõ máy ở xa (%s) là máy gì.\n"
-"Trường hợp này xảy ra khi bạn đăng nhập vào một máy tính lần đầu tiên.\n"
-"\n"
-"Máy tính ở xa đã gửi thông tin nhận diện là %s. Nếu bạn muốn đảm bảo là an "
-"toàn để tiếp tục, hãy liên lạc với nhà quản trị hệ thống."
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "Hộp thoại đăng nhập bị thôi"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "Không thể gửi thông tin xác nhận sự giống hệt của máy"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "Lỗi giao thức"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "SFTP trên %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "Không tìm thấy câu lệnh ssh được hỗ trợ"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "Không thành công"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "Nhận được đáp ứng không hợp lệ"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "Gặp lỗi khi tạo tập tin sao lưu : %s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "Không thể tạo tập tin tạm thời"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "Không thể di chuyển thư mục đè lên thư mục"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "Yêu cầu mật khẩu cho vùng chia sẻ %s trên %s"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "Lỗi nội bộ (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "Lỗi gắn kết vùng chia sẻ Windows"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "Cách tìm nơi không được hỗ trợ"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "Gặp lỗi khi tạo tập tin sao lưu : %s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "Gặp lỗi khi xoá tập tin: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "Gặp lỗi khi di chuyển tập tin: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "Gặp lỗi khi gỡ bỏ tập tin đích: %s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "Không thể di chuyển đệ quy thư mục"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Dịch vụ Hệ thống Tập tin Chia sẻ Windows"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Vùng chia sẻ Windows trên %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "Tập tin không có khả năng gắn kết"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "Không phải là một tập tin tiêu chuẩn"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Dịch vụ Hệ thống Tập tin Mạng Windows"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "Sọt Rác"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (trong Sọt Rác)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "Không thể xoá Sọt Rác"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "Thông báo thư mục Sọt Rác không được hỗ trợ"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "Kiểu hậu phương không hợp lệ"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "Gặp lỗi khi gửi bộ mô tả tập tin: %s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:154
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "Thao tác không được hậu phương hỗ trợ"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "Liên kết tượng trưng không được hậu phương hỗ trợ"
-
-#: ../daemon/gvfsjobsetattribute.c:123
-msgid "Invalid dbus message"
-msgstr "Thông điệp dbus không hợp lệ"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "Thay thế trình nền cũ."
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "Không chạy fuse."
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "Trình nền GVFS"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "Trình nền chính cho GVFS"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Hãy thử câu lệnh trợ giúp « %s --help » để xem thông tin thêm."
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "Đối số không hợp lệ từ tiến trình con đã tạo và thực hiện"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "Lỗi tự động gắn kết: %s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "Vị trí đã ghi rõ không phải được gắn kết"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "Vị trí đã ghi rõ không được hỗ trợ"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "Vị trí đã được gắn kết"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "Vị trí không có khả năng gắn kết"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "Ổ %s/%s"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "Ổ %s"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "Ổ đĩa mềm"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "Ổ phần mềm RAID"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "Ổ USB"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "Ổ đĩa ATA"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "Ổ đĩa SCSI"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "Ổ đĩa FireWire"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Ổ băng từ"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "Ổ CompactFlash (CF)"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "Ổ thanh bộ nhớ"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "Ổ vật chứa khéo"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "Ổ thẻ SD/MMC"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Ổ đĩa Zip"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Ổ đĩa Jaz"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Ổ thanh ghi nhớ"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "Ổ lưu trữ hàng loạt"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "Lỗi đẩy ra vật chứa; một hay nhiều khối tin trên vật chứa vẫn còn bận."
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "Đĩa hỗn hợp Âm thanh/Dữ liệu"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "Vật chứa %s"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "Dữ liệu mật mã %s"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "Đĩa CD-ROM"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "Đĩa CD-ROM trắng"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "Đĩa CD-R"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "Đĩa CD-R trắng"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "Đĩa CD-RW"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "Đĩa CD-RW trắng"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "Đĩa DVD-ROM"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "Đĩa DVD-ROM trắng"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "Đĩa DVD-RAM"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "Đĩa DVD-RAM trắng"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "Đĩa DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "Đĩa DVD-RW trắng"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "Đĩa DVD+R"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "Đĩa DVD+R trắng"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "Đĩa DVD+RW"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "Đĩa DVD+RW trắng"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "Đĩa DVD+R DL"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "Đĩa DVD+R DL trắng"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Đĩa Blu-Ray"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "Đĩa Blu-Ray trắng"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Đĩa Blu-Ray R trắng"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "Đĩa Blu-Ray R trắng"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Đĩa Blu-Ray RW"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "Đĩa Blu-Ray RW trắng"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "Đĩa HD DVD"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "Đĩa HD DVD trắng"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "Đĩa HD DVD-R"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "Đĩa HD DVD-R trắng"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "Đĩa HD DVD-RW"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "Đĩa HD DVD-RW trắng"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "Đĩa MO"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "Đĩa MO trắng"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "Đĩa"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "Đĩa trắng"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: gặp lỗi khi mở tập tin: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, gặp lỗi khi ghi vào đầu ra tiêu chuẩn"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: lỗi đọc: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: lỗi đóng: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "VỊ TRÍ... — ghép nối các VỊ TRÍ ra đầu ra tiêu chuẩn."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"Ghép nối các tập tin ở vị trí, và in ra đầu ra tiêu chuẩn (stdout). Chạy "
-"đúng như tiện ích cat truyền thống, nhưng dùng vị trí gvfs thay cho tập tin "
-"cục bộ. Ví dụ, bạn có thể sử dụng cái gì như « smb://máy/tài_nguyên/tập_tin."
-"txt » làm vị trí cần ghép nối."
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr ""
-"Ghi chú : chỉ gửi dữ liệu qua ống dẫn cho tiện ích cat nếu bạn cần dùng tùy "
-"chọn định dạng của nó (v.d. « -n », « -T »)."
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: thiếu vị trí"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: gặp lỗi khi mở vị trí: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: gặp lỗi khi khởi chạy ứng dụng: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "TẬP TIN... — mở các TẬP TIN dùng ứng dụng đã đăng ký."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr ""
-"Mở (các) tập tin bằng ứng dụng mặc định được đăng ký để xử lý tập tin kiểu "
-"đó."
-
-#~ msgid "File unavailable"
-#~ msgstr "Tập tin không sẵn sàng"
diff --git a/po/zh_CN.po b/po/zh_CN.po
deleted file mode 100644
index bb869b78..00000000
--- a/po/zh_CN.po
+++ /dev/null
@@ -1,1529 +0,0 @@
-# translation of gvfs.HEAD.po to Simplified Chinese
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Xin Guan <guanx.bac@gmail.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs.HEAD\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-05 07:54+0000\n"
-"PO-Revision-Date: 2008-03-08 10:23+0800\n"
-"Last-Translator: Xin Guan <guanx.bac@gmail.com>\n"
-"Language-Team: Simplified Chinese <en@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1984
-msgid "Operation not supported, files on different mounts"
-msgstr "文件在不同挂载点下,不支持此操作"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "get_info 返回无效值"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "query_info 返回无效值"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "无法取得流文件描述符"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2252
-#: ../client/gdaemonfile.c:2330 ../client/gdaemonfile.c:2589
-msgid "Invalid return value from open"
-msgstr "open 返回无效值"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2220
-msgid "Didn't get stream file descriptor"
-msgstr "未曾取得流文件描述符"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "返回值无效"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "get_filesystem_info 返回无效值"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "找不到所属挂载点"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "无效文件名:%s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "query_filesystem_info 返回无效值"
-
-#: ../client/gdaemonfile.c:2142
-msgid "Invalid return value from monitor_dir"
-msgstr "monitor_dir 返回无效值"
-
-#: ../client/gdaemonfile.c:2191
-msgid "Invalid return value from monitor_file"
-msgstr "monitor_file 返回无效值"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "流协议 %s 有错"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "流终止"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "操作被取消"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "流不支持搜索"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "不支持“query info”操作"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "流不支持查询信息"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "获取挂载信息时出错:%s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "连接守护进程出错:%s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "建立套接字出错:%s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "连接套接字出错:%s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "无效的文件信息格式:%s"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "属性信息列表内容无效"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "连接 D-Bus 出错:%s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s 文件系统服务"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "错误:%s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "用法:%s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "用法:%s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "未指定挂载类型"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s 的挂载点已在运行"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "启动挂载守护进程失败"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "%s 上的 /"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "未指定主机名"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "无效的挂载描述"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "文件不存在"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "此文件不是目录文件"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "烧录"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "无法创建临时目录"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "文件或目录不存在"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "目录非空"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:906
-msgid "Can't copy file over directory"
-msgstr "不能将文件复制到目录上"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD 生成器"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:926 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "文件已存在"
-
-#: ../daemon/gvfsbackendburn.c:829 ../daemon/gvfsjobcloseread.c:112
-#: ../daemon/gvfsjobclosewrite.c:120 ../daemon/gvfsjobcopy.c:169
-#: ../daemon/gvfsjobcreatemonitor.c:140 ../daemon/gvfsjobcreatemonitor.c:151
-#: ../daemon/gvfsjobcreatemonitor.c:174 ../daemon/gvfsjobcreatemonitor.c:192
-#: ../daemon/gvfsjobdelete.c:122 ../daemon/gvfsjobenumerate.c:256
-#: ../daemon/gvfsjobmakedirectory.c:122 ../daemon/gvfsjobmount.c:109
-#: ../daemon/gvfsjobmountmountable.c:156 ../daemon/gvfsjobmove.c:168
-#: ../daemon/gvfsjobopenforread.c:130 ../daemon/gvfsjobopenforwrite.c:148
-#: ../daemon/gvfsjobopenforwrite.c:162 ../daemon/gvfsjobopenforwrite.c:176
-#: ../daemon/gvfsjobpull.c:173 ../daemon/gvfsjobpush.c:173
-#: ../daemon/gvfsjobqueryattributes.c:135 ../daemon/gvfsjobqueryfsinfo.c:131
-#: ../daemon/gvfsjobqueryinfo.c:149 ../daemon/gvfsjobread.c:120
-#: ../daemon/gvfsjobseekread.c:119 ../daemon/gvfsjobseekwrite.c:119
-#: ../daemon/gvfsjobsetattribute.c:150 ../daemon/gvfsjobsetdisplayname.c:127
-#: ../daemon/gvfsjobtrash.c:122 ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "后端不支持此操作"
-
-#: ../daemon/gvfsbackendburn.c:854
-msgid "No such file or directory in target path"
-msgstr "目的路径中不存在此文件或目录"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Can't copy directory over directory"
-msgstr "不能将目录复制到目录上"
-
-#: ../daemon/gvfsbackendburn.c:886
-msgid "Target file exists"
-msgstr "目标文件已存在"
-
-#: ../daemon/gvfsbackendburn.c:893
-msgid "Can't recursively copy directory"
-msgstr "无法递归复制目录"
-
-#: ../daemon/gvfsbackendburn.c:952 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "不支持"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "无法连接到系统总线"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-msgid "Cannot create libhal context"
-msgstr "无法创建 libhal 环境"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "无法初始化 libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "未指定驱动器"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "找不到驱动器 %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "驱动器 %s 不含音频文件"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "%s 上挂载的 cdda"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:233
-#: ../monitor/hal/ghalvolume.c:254
-#, c-format
-msgid "Audio Disc"
-msgstr "音频光盘"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "文件系统忙:打开了 %d 个文件"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "文件 %s 在驱动器 %s 上不存在"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "驱动器 %s 上有错误来自 'paranoia'"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "在驱动器 %s 上的流搜索时出错"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "无此文件"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "文件不存在或不是音轨"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "音频 CD 文件系统服务"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "计算机"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "文件系统"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678 ../daemon/gvfsbackendtrash.c:1786
-msgid "Can't open directory"
-msgstr "无法打开目录"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "无法打开可挂载文件"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "内部错误:%s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "无法挂载文件"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "驱动器中没有介质"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "非可挂载文件"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "无法卸载文件"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "无法弹出文件"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP 错误:%s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "无法分析响应"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "空响应"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "服务器给出意外回复"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "响应无效"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV 共享"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "输入 %s 的密码"
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "请输入代理密码"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "不是 WebDAV 使能的共享"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "%s 上的 WebDAV 共享"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "无法创建请求"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "目标文件已存在"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "文件被其它程序更改"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "建立备份文件失败"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "无法监视文件或目录"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "网络"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "不支持这些帐号"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "主机已关闭连接"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "无法打开数据连接。是不是您的防火墙不允许?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "数据连接已关闭"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "操作失败"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "服务器上没有剩余空间了"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "不支持此操作"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "权限不足"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "页面类型未知"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "无效文件名"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "无效回复"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "传输损坏"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "无法连接到主机"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "请输入 %s 上 ftp 的密码"
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "密码对话框被取消"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "%s 上的 ftp"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "以 %s ftp 到 %s"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "此文件是目录文件"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "尚不支持备份"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "文件名过长"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "无效目标文件名"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s: %d: 目录或文件已存在"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s: %d: 文件或目录不存在"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s: %d: 无效文件名"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s: %d: 不支持"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "数码相机(%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s 相机"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s 音频播放器"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "相机"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "音频播放器"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "获得文件列表失败"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "未指定驱动器"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr "无法创建 gphoto2 环境"
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "创建相机出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "装入设备信息出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "查阅设备信息出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "获得设备信息出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "设置相机通讯端口出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "初始化相机出错"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "%s 上的 gphoto2 挂载"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "未指定相机"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "创建文件对象出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "获得文件出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "从文件获得数据出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "在相机 %s 上搜索流时出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "不是目录"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "获得文件列表失败"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "创建目录出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "名称已存在"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "新名称过长"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "重命名目录出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "重命名文件出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "目录“%s”非空"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "删除目录出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "删除文件出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "无法写入目录"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "无法分配要追加的新文件"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "无法读取要追加的文件"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "无法从要追加的文件中获得数据"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "写入文件出错"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "不支持(不是同一目录)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "不支持(源是目录,目标是目录)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "不支持(源是目录,目标是已有文件)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "不支持(源是文件,目标是目录)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP 客户端错误:%s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr " (无效编码)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "不支持目录通知"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows 网络"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "本地网络"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "网络位置监测器"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%2$s 上的 %1$s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "到设备的连接丢失"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "设备需要软件更新"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh 程序意外退出"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "主机名未知"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "没有到主机的路由"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "服务器拒绝连接"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "主机密钥认证失败"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "无法调用 ssh 程序"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "无法调用 ssh 程序:%s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "登录超时"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "输入此密钥的口令"
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "输入密码"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "无法发送密码"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "仍登入"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "取消登录"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"远程计算机(%s)的身份未知。\n"
-"这发生在您首次登录此计算机时。\n"
-"\n"
-"远程计算机发送的身份是 %s。如果您想确认继续操作是安全的,请联系其系统管理员。"
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "登录对话框被取消"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "无法发送主机身份确认信息"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "协议错误"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "%s 上的 sftp"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "无法找到支持的 ssh 命令"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "失败"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "收到无效回复"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "创建备份文件出错:%s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "无法创建临时文件"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "不能将目录移动到目录上"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "共享 %s 于 %s 需要密码"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "内部错误(%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "挂载 Windows 共享失败"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "不支持此搜索类型"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "创建备份文件失败:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "删除文件失败:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "移动文件失败:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "删除目标文件失败:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "无法递归删除目录"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows 共享文件系统服务"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "%s 上的 Windows 共享"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "此文件不可挂载"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "非常规文件"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windows 网络文件系统服务"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "垃圾箱"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (垃圾箱中)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "不能删除垃圾"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "不支持垃圾目录 notificatioin"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "无效后端类型"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "发送文件描述符出错:%s"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "后端不支持符号链接"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "无效的 dbus 消息"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "替换旧守护进程。"
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "请勿起动 fuse"
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS 守护进程"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GVFS 主守护进程"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s:%s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "请用 \"%s --help\" 获得更多信息。"
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "来自所调用子进程的参数无效"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "自动挂载失败:%s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "指定未知未挂载"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "不支持指定未知"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "位置已挂载"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "位置不可挂载"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s 驱动器"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "软盘驱动器"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "软件 RAID 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "Tape 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "Thumb 驱动器"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "大容量存储驱动器"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "弹出介质失败:介质上的一个或多个卷正忙"
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:171
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:176
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:181
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:252
-msgid "Mixed Audio/Data Disc"
-msgstr "音频/数据混合盘"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:263
-#, c-format
-msgid "%s Media"
-msgstr "%s 介质"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:240
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s 加密数据"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM 盘片"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "空白 CD-ROM 盘片"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R 盘片"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "空白 CD-R 盘片"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW 盘片"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "空白 CD-RW 盘片"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM 盘片"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "空白 DVD-ROM 盘片"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM 盘片"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "空白 DVD-RAM 盘片"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW 盘片"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "空白 DVD-RW 盘片"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R 盘片"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "空白 DVD+R 盘片"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW 盘片"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "空白 DVD+RW 盘片"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL 盘片"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "空白 DVD+R DL 盘片"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray 盘片"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "空白 Blu-Ray 盘片"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R 盘片"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "空白 Blu-Ray R 盘片"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW 盘片"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "空白 Blu-Ray RW 盘片"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD 盘片"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "空白 HD DVD 盘片"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R 盘片"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "空白 HD DVD-R 盘片"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW 盘片"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "空白 HD DVD-RW 盘片"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO 盘片"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "空白 MO 盘片"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "盘片"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "空白盘片"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s: 打开文件出错: %s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s, 写 stdout 出错"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s: 读取出错: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s: 关闭出错: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "位置... - 将“位置”续接到标准输出."
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"续接“位置”处的文件到标准输出来打印其内容。与传统的 cat 程序类似,但使用 gvfs "
-"位置而不是本地文件。例如:可以用 smb://server/resource/file.txt 作为位置来续"
-"接。"
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr "注意:如需要 cat 的 -n, -T 之类格式化功能,可通过管道用 cat 过滤。"
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s: 位置缺失"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s: 打开位置出错: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s: 启动应用出错: %s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - 用注册的应用打开 FILES。"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr "使用注册的用于处理此类文件的应用打开此文件。"
diff --git a/po/zh_HK.po b/po/zh_HK.po
deleted file mode 100644
index f8449462..00000000
--- a/po/zh_HK.po
+++ /dev/null
@@ -1,1552 +0,0 @@
-# Chinese (Hong Kong) translation of gvfs.
-# Copyright (C) 2003-06 Free Software Foundation, Inc.
-# Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>, 2008
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs 0.99.6\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-30 19:41+0800\n"
-"PO-Revision-Date: 2008-08-30 19:41+0800\n"
-"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
-"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "檔案在不同掛載點,不支援此操作"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "從 get_info 傳回無效的數值"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "從 query_info 傳回無效的數值"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "無法取得串流檔案檔案描述器"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "從開啟中傳回無效的數值"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "不要取得串流檔案檔案描述器"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "從呼叫中傳回無效的數值"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "從 get_filesystem_info 傳回無效的數值"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "找不到所屬掛載點"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "無效的檔案名稱 %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "從 query_filesystem_info 傳回無效的數值"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "從 monitor_dir 傳回無效的數值"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "從 monitor_file 傳回無效的數值"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "串流通訊協定發生錯誤:%s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "串流結尾"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "操作已被取消"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "串流不支援搜尋"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "不支援此查詢資訊的操作"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "串流不支援查詢資訊"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "取得掛載資訊時發生錯誤:%s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "連線到伺服程式發生錯誤:%s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "建立 socket 時發生錯誤:%s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "連線至 socket 時發生錯誤:%s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "無效的檔案資訊格式"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "無效的屬性資訊清單內容"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "連線到 D-Bus 時發生錯誤:%s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s 檔案系統服務"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "錯誤:%s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "用法:%s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "用法: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "未指定掛載類型"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s 的掛載點已在使用中"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "啟動掛載伺服程式的發生錯誤"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ 於 %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "未指定主機名稱"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "無效的掛載資料"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "檔案不存在"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "該檔案不是目錄"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "燒錄"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "無法建立暫存目錄"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "沒有這個檔案或目錄"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "目錄不是空的"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "不能將檔案複製到目錄上"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD 錄製程式"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "檔案已存在"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "在目標路徑沒有這個檔案或目錄"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "不能將目錄複製到目錄上"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "目標檔案已存在"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "不能循環複製目錄"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "不支援"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "不能連線到系統匯流排"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-#, fuzzy
-msgid "Cannot create libhal context"
-msgstr "不能初始化 libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "不能初始化 libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "未指定裝置"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "找不到到裝置 %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "裝置 %s 中不包含音樂檔案"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda 掛載於 %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "音樂光碟"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "檔案系統忙碌中:開啟了 %d 個檔案"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "磁碟 %2$s 中沒有檔案 %1$s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "來自磁碟 %s 上的「paranoia」的錯誤"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "在磁碟 %s 上搜尋串流發生錯誤"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "沒有這個檔案"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "檔案不存在或不是音軌"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "音樂 CD 檔案系統服務"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "電腦"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "檔案系統"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "不能開啟目錄"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "不能開啟可掛載式檔案"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "內部的錯誤:%s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "不能掛載檔案"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "裝置中沒有媒體"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "不是可掛載式檔案"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "不能卸載檔案"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "不能退出檔案"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP 錯誤: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "無法解析回應"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "空白的回應"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "來自伺服器未預期的回應"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "回應無效"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV 分享"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "輸入 %s 的密碼 "
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "請輸入代理伺服器密碼"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "不是使用 WebDAV 的分享"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV 於 %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "無法建立要求"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "目標檔案已存在"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "該檔案已被外部程式修改過"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "建立備份檔案失敗"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "不能監控檔案或目錄。"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "網絡"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "帳號不被支援"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "主機關閉連線"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "無法開啟資料連線。也許你的防火牆阻擋了它?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "資料連線已關閉"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "操作已失敗"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "伺服器中沒有剩餘空間"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "操作不被支援"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "權限不足"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "頁面類型不明"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "無效的檔案名稱"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "無效的回應"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "損壞的傳輸"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "無法連線至主機"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "輸入 %s 的 ftp 密碼 "
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "密碼對話盒已被取消"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp 於 %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "以 %s 登入 %s 的 ftp"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "檔案是目錄"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "備份尚未支援"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "檔案名稱太長"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "無效的目的端檔案名稱"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s:%d:目錄或檔案已存在"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s:%d:沒有這個檔案或目錄"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s:%d:無效的檔案名稱"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s:%d:不支援"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "數碼相機 (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s 照相機"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s 音樂播放機"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "照相機"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "音樂播放機"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "取得資料夾清單失敗"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "未指定裝置"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "建立攝影機發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "載入裝置資訊時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "尋找裝置資訊時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "取得裝置資訊時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "設定攝影機通訊埠時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "初始化攝影機發生錯誤"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 掛載於 %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "未指定攝影機"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "建立檔案物件發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "讀取檔案時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "從檔案取得資料時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "在攝影機 %s 上搜尋串流發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "不是一個目錄"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "取得檔案清單失敗"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "建立目錄時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "名稱已存在"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "新的名稱太長"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "重新命名目錄時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "重新命名檔案時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "目錄「%s」不是空的"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "刪除目錄時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "刪除檔案時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "不能寫入至目錄"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "不能分配新檔案加入到"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "不能讀取檔案加入到"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "不能取得檔案的資料加入到"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "寫入檔案時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "不支援(不同目錄)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "不支援(來源是目錄,目的也是目錄)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "不支援(來源是目錄,目的是既存的檔案)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "不支援(來源是檔案,目的是目錄)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP 客戶端錯誤:%s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr "(無效的編碼)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "不支援目錄通知"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows 網絡"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "本地端網絡"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "網絡位置監視器"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s 於 %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "到裝置的連線已失去"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "裝置要求更新軟件"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh 程式意外的中止了"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "主機名稱不明"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "沒有路由可到主機"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "連線被伺服器拒絕"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "驗證主機密碼匙失敗"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "無法呼叫 ssh 程式"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "無法呼叫 ssh 程式:%s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "登入逾時時間"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "輸入密碼匙的密語 "
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "輸入密碼"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "不能傳送密碼"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "強制登入"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "取消登入"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"遠端電腦 (%s) 的識別不明。\n"
-"這通常發生在你第一次登入電腦的時候。\n"
-"\n"
-"由遠端電腦傳送的識別為 %s。如果你想要完全確定繼續是安全的,請聯絡系統管理者。"
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "登入對話盒已被取消"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "不能傳送主機識別確認"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "通訊協定錯誤"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp 於 %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "找不到支援的 ssh 指令"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "失敗"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "收到無效的回應"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "建立備份檔案時發生錯誤:%s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "無法建立暫存檔案"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "不能將目錄移動至目錄上"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "要分享 %2$s 上的 %1$s 需要密碼"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "內部的錯誤 (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "掛載 Windows 分享失敗"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "不支援的搜尋類型"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "建立備份檔案失敗:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "刪除檔案時發生錯誤:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "移動檔案時發生錯誤:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "移除目標檔案時發生錯誤:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "不能循環移動目錄"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows 分享檔案系統服務"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windows 分享於 %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "該檔案是無法掛載的"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "不是正規的檔案"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windows 網絡檔案系統服務"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "回收筒"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (於回收筒)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "無法刪除回收筒"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "不支援目錄通知"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "無效的後端類型"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "傳送 fd 時發生錯誤:%s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:150
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "後端不支援此操作"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "後端不支援符號連結"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "無效的 dbus 訊息"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "置換舊的伺服程式。"
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "不啟動 fuse。"
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS 伺服程式"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GCFS 主伺服程式"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "使用「%s --help」以獲得更多資訊。"
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "來自衍生子程序的無效引數"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "自動掛載失敗:%s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "指定的位置尚未掛載"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "指定的位置不被支援"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "該位置已經掛載了"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "該位置不是可掛載的"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s 裝置"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s 裝置"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "軟碟機"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "軟件 RAID 陣列"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB 磁碟機"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA 磁碟機"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI 裝置"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire 磁碟機"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "磁帶機"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash 裝置"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick 裝置"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia 裝置"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC 裝置"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip 磁碟機"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz 磁碟機"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "隨身碟"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "大量存放裝置"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "退出媒體失敗;該媒體上的一或多個儲存裝置正在忙碌。"
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "混合音樂/資料光碟"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "%s 媒體"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s 加密的資料"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM 光碟"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "空白 CD-ROM 光碟"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R 光碟"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "空白 CD-R 光碟"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "空白 CD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM 光碟"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "空白 DVD-ROM 光碟"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM 光碟"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "空白 DVD-RAM 光碟"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "空白 DVD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R 光碟"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "空白 DVD+R 光碟"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "空白 DVD+RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL 光碟"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "空白 DVD+R DL 光碟"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray 光碟"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "空白 Blu-Ray 光碟"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R 光碟"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "空白 Blu-Ray R 光碟"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "空白 Blu-Ray RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD 光碟"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "空白 HD DVD 光碟"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R 光碟"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "空白 HD DVD-R 光碟"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "空白 HD DVD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO 光碟"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "空白 MO 光碟"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "光碟"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "空白光碟"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s:開啟檔案時發生錯誤:%s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s,錯誤寫入至 stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s:讀取檔案時發生錯誤:%s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:發生錯誤時正關閉: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATION... - 將 LOCATIONS 連接至標準輸出。"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr "連接位置上的檔案並顯示到標準輸出。運作方式就像傳統的 cat 公用程式,只是使用 gvfs 位置代替 local 檔案:例如你可以使用像 smb://server/resource/file.txt 做為連接的位置。"
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr "注意:只要利用導管通過 cat 就可以使用它的格式選項如 -n, -T 或其他。"
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s:漏掉位置"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s:發生錯誤時正開啟位置: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s:執行應用程式時發生錯誤:%s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - 以註冊的應用程式開啟 FILES。"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr "使用註冊為處理該檔案類型的預設應用程式來開啟檔案。"
-
-#~ msgid "Error creating port info list"
-#~ msgstr "建立通訊埠資訊清單時發生錯誤"
-
-#~ msgid "Error getting port info from port info list"
-#~ msgstr "從通訊埠資訊清單取得通訊埠資訊時發生錯誤"
-
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "檔案系統忙碌中:開啟了 %d 個檔案"
-
-#~ msgid "Error listing folders"
-#~ msgstr "列出資料夾時發生錯誤"
-
-#~ msgid "Error listing files in folder"
-#~ msgstr "列出資料夾中的檔案時發生錯誤"
-
-#~ msgid "File unavailable"
-#~ msgstr "檔案無法使用"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "%.1f kB 媒體"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "%.1f MB 媒體"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "%.1f GB 媒體"
diff --git a/po/zh_TW.po b/po/zh_TW.po
deleted file mode 100644
index 7c3b31fd..00000000
--- a/po/zh_TW.po
+++ /dev/null
@@ -1,1555 +0,0 @@
-# Chinese (Taiwan) translation of gvfs.
-# Copyright (C) 2003-06 Free Software Foundation, Inc.
-# Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>, 2008
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gvfs 0.99.6\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-30 19:41+0800\n"
-"PO-Revision-Date: 2008-08-30 20:47+0800\n"
-"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
-"Language-Team: Chinese (Taiwan) <community@linuxhall.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: ../client/gdaemonfile.c:482 ../client/gdaemonfile.c:1979
-msgid "Operation not supported, files on different mounts"
-msgstr "檔案在不同掛載點,不支援此操作"
-
-#: ../client/gdaemonfile.c:787
-msgid "Invalid return value from get_info"
-msgstr "從 get_info 傳回無效的數值"
-
-#: ../client/gdaemonfile.c:816 ../client/gdaemonfile.c:1563
-msgid "Invalid return value from query_info"
-msgstr "從 query_info 傳回無效的數值"
-
-#: ../client/gdaemonfile.c:894
-msgid "Couldn't get stream file descriptor"
-msgstr "無法取得串流檔案檔案描述器"
-
-#: ../client/gdaemonfile.c:926 ../client/gdaemonfile.c:996
-#: ../client/gdaemonfile.c:1055 ../client/gdaemonfile.c:1114
-#: ../client/gdaemonfile.c:1176 ../client/gdaemonfile.c:2234
-#: ../client/gdaemonfile.c:2312 ../client/gdaemonfile.c:2571
-msgid "Invalid return value from open"
-msgstr "從開啟中傳回無效的數值"
-
-#: ../client/gdaemonfile.c:1006 ../client/gdaemonfile.c:1065
-#: ../client/gdaemonfile.c:1124 ../client/gdaemonfile.c:1186
-#: ../client/gdaemonfile.c:2202
-msgid "Didn't get stream file descriptor"
-msgstr "不要取得串流檔案檔案描述器"
-
-#: ../client/gdaemonfile.c:1238 ../client/gdaemonfile.c:1255
-msgid "Invalid return value from call"
-msgstr "從呼叫中傳回無效的數值"
-
-#: ../client/gdaemonfile.c:1534
-msgid "Invalid return value from get_filesystem_info"
-msgstr "從 get_filesystem_info 傳回無效的數值"
-
-#. translators: this is an error message when there is no user visible "mount" object
-#. corresponding to a particular path/uri
-#: ../client/gdaemonfile.c:1647
-msgid "Could not find enclosing mount"
-msgstr "找不到所屬掛載點"
-
-#: ../client/gdaemonfile.c:1677
-#, c-format
-msgid "Invalid filename %s"
-msgstr "無效的檔案名稱 %s"
-
-#: ../client/gdaemonfile.c:1719
-msgid "Invalid return value from query_filesystem_info"
-msgstr "從 query_filesystem_info 傳回無效的數值"
-
-#: ../client/gdaemonfile.c:2124
-msgid "Invalid return value from monitor_dir"
-msgstr "從 monitor_dir 傳回無效的數值"
-
-#: ../client/gdaemonfile.c:2173
-msgid "Invalid return value from monitor_file"
-msgstr "從 monitor_file 傳回無效的數值"
-
-#: ../client/gdaemonfileinputstream.c:450
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1300
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:402
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1054
-#: ../client/gdaemonfileoutputstream.c:1064
-#, c-format
-msgid "Error in stream protocol: %s"
-msgstr "串流通訊協定發生錯誤:%s"
-
-#: ../client/gdaemonfileinputstream.c:458
-#: ../client/gdaemonfileinputstream.c:1310
-#: ../client/gdaemonfileoutputstream.c:410
-#: ../client/gdaemonfileoutputstream.c:1064
-msgid "End of stream"
-msgstr "串流結尾"
-
-#: ../client/gdaemonfileinputstream.c:518
-#: ../client/gdaemonfileinputstream.c:674
-#: ../client/gdaemonfileinputstream.c:782
-#: ../client/gdaemonfileinputstream.c:1032
-#: ../client/gdaemonfileoutputstream.c:458
-#: ../client/gdaemonfileoutputstream.c:636
-#: ../client/gdaemonfileoutputstream.c:831 ../daemon/gvfsbackendobexftp.c:772
-#: ../daemon/gvfsbackendobexftp.c:793 ../daemon/gvfsbackendobexftp.c:912
-#: ../daemon/gvfsbackendobexftp.c:1049 ../daemon/gvfsbackendobexftp.c:1113
-#: ../daemon/gvfsbackendobexftp.c:1250 ../daemon/gvfsbackendobexftp.c:1277
-#: ../daemon/gvfsbackendobexftp.c:1336 ../daemon/gvfsbackendobexftp.c:1358
-#: ../daemon/gvfsbackendobexftp.c:1418 ../daemon/gvfsbackendobexftp.c:1437
-#: ../daemon/gvfsbackendsmb.c:1069 ../daemon/gvfsbackendtest.c:87
-#: ../daemon/gvfsbackendtest.c:120 ../daemon/gvfsbackendtest.c:183
-#: ../daemon/gvfschannel.c:298
-msgid "Operation was cancelled"
-msgstr "操作已被取消"
-
-#: ../client/gdaemonfileinputstream.c:1207
-#: ../client/gdaemonfileoutputstream.c:942
-msgid "Seek not supported on stream"
-msgstr "串流不支援搜尋"
-
-#: ../client/gdaemonfileinputstream.c:1237
-msgid "The query info operation is not supported"
-msgstr "不支援此查詢資訊的操作"
-
-#: ../client/gdaemonfileoutputstream.c:991
-#, c-format
-msgid "Query info not supported on stream"
-msgstr "串流不支援查詢資訊"
-
-#: ../client/gdaemonvfs.c:757
-#, c-format
-msgid "Error while getting mount info: %s"
-msgstr "取得掛載資訊時發生錯誤:%s"
-
-#: ../client/gvfsdaemondbus.c:568 ../client/gvfsdaemondbus.c:999
-#, c-format
-msgid "Error connecting to daemon: %s"
-msgstr "連線到伺服程式發生錯誤:%s"
-
-#: ../common/gsysutils.c:136
-#, c-format
-msgid "Error creating socket: %s"
-msgstr "建立 socket 時發生錯誤:%s"
-
-#: ../common/gsysutils.c:174
-#, c-format
-msgid "Error connecting to socket: %s"
-msgstr "連線至 socket 時發生錯誤:%s"
-
-#: ../common/gvfsdaemonprotocol.c:515
-msgid "Invalid file info format"
-msgstr "無效的檔案資訊格式"
-
-#: ../common/gvfsdaemonprotocol.c:532
-msgid "Invalid attribute info list content"
-msgstr "無效的屬性資訊清單內容"
-
-#: ../daemon/daemon-main.c:63 ../daemon/daemon-main.c:206
-#, c-format
-msgid "Error connecting to D-Bus: %s"
-msgstr "連線到 D-Bus 時發生錯誤:%s"
-
-#. translators: This is the default daemon's application name,
-#. * the %s is the type of the backend, like "ftp"
-#: ../daemon/daemon-main.c:78
-#, c-format
-msgid "%s Filesystem Service"
-msgstr "%s 檔案系統服務"
-
-#: ../daemon/daemon-main.c:97
-#, c-format
-msgid "Error: %s"
-msgstr "錯誤:%s"
-
-#: ../daemon/daemon-main.c:131
-#, c-format
-msgid "Usage: %s --spawner dbus-id object_path"
-msgstr "用法:%s --spawner dbus-id object_path"
-
-#: ../daemon/daemon-main.c:155 ../daemon/daemon-main.c:173
-#, c-format
-msgid "Usage: %s key=value key=value ..."
-msgstr "用法: %s key=value key=value ..."
-
-#: ../daemon/daemon-main.c:171
-#, c-format
-msgid "No mount type specified"
-msgstr "未指定掛載類型"
-
-#: ../daemon/daemon-main.c:241
-#, c-format
-msgid "mountpoint for %s already running"
-msgstr "%s 的掛載點已在使用中"
-
-#: ../daemon/daemon-main.c:252
-msgid "error starting mount daemon"
-msgstr "啟動掛載伺服程式的發生錯誤"
-
-#. FIXME: this should really be "/ in %s", but can't change
-#. due to string freeze.
-#. Translators: This is the name of the root of an sftp share, like "/ on <hostname>"
-#: ../daemon/gvfsbackendarchive.c:315 ../daemon/gvfsbackendftp.c:963
-#: ../daemon/gvfsbackendsftp.c:1894
-#, c-format
-msgid "/ on %s"
-msgstr "/ 於 %s"
-
-#: ../daemon/gvfsbackendarchive.c:515 ../daemon/gvfsbackendftp.c:1479
-#: ../daemon/gvfsbackendsftp.c:1553
-msgid "No hostname specified"
-msgstr "未指定主機名稱"
-
-#: ../daemon/gvfsbackendarchive.c:526 ../daemon/gvfsbackendarchive.c:555
-#: ../daemon/gvfsbackenddav.c:1456 ../daemon/gvfsbackendhttp.c:299
-#: ../daemon/gvfsbackendobexftp.c:603 ../daemon/gvfsbackendobexftp.c:614
-#: ../daemon/gvfsbackendsmb.c:605
-msgid "Invalid mount spec"
-msgstr "無效的掛載資料"
-
-#: ../daemon/gvfsbackendarchive.c:636 ../daemon/gvfsbackendarchive.c:686
-#: ../daemon/gvfsbackendarchive.c:715 ../daemon/gvfsbackendcdda.c:822
-#: ../daemon/gvfsbackendcomputer.c:572 ../daemon/gvfsbackenddnssd.c:345
-#: ../daemon/gvfsbackendftp.c:2101 ../daemon/gvfsbackendnetwork.c:590
-#: ../daemon/gvfsbackendsmbbrowse.c:804 ../daemon/gvfsbackendsmbbrowse.c:871
-#: ../daemon/gvfsbackendsmbbrowse.c:1042 ../daemon/gvfsbackendsmbbrowse.c:1116
-#, c-format
-msgid "File doesn't exist"
-msgstr "檔案不存在"
-
-#: ../daemon/gvfsbackendarchive.c:724 ../daemon/gvfsbackendburn.c:680
-#: ../daemon/gvfsbackendcomputer.c:651 ../daemon/gvfsbackenddnssd.c:393
-#: ../daemon/gvfsbackendftp.c:912 ../daemon/gvfsbackendnetwork.c:637
-msgid "The file is not a directory"
-msgstr "該檔案不是目錄"
-
-#. Translators: This is the name of the backend
-#: ../daemon/gvfsbackendburn.c:346
-msgid "Burn"
-msgstr "燒錄"
-
-#: ../daemon/gvfsbackendburn.c:376
-msgid "Unable to create temporary directory"
-msgstr "無法建立暫存目錄"
-
-#: ../daemon/gvfsbackendburn.c:405 ../daemon/gvfsbackendburn.c:416
-#: ../daemon/gvfsbackendburn.c:451 ../daemon/gvfsbackendburn.c:672
-#: ../daemon/gvfsbackendburn.c:719 ../daemon/gvfsbackendburn.c:745
-#: ../daemon/gvfsbackendburn.c:783 ../daemon/gvfsbackendgphoto2.c:1098
-#: ../daemon/gvfsbackendgphoto2.c:1987 ../daemon/gvfsbackendgphoto2.c:2706
-#, c-format
-msgid "No such file or directory"
-msgstr "沒有這個檔案或目錄"
-
-#: ../daemon/gvfsbackendburn.c:425 ../daemon/gvfsbackenddav.c:2043
-msgid "Directory not empty"
-msgstr "目錄不是空的"
-
-#: ../daemon/gvfsbackendburn.c:459 ../daemon/gvfsbackendburn.c:897
-msgid "Can't copy file over directory"
-msgstr "不能將檔案複製到目錄上"
-
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendburn.c:651
-msgid "CD/DVD Creator"
-msgstr "CD/DVD 錄製程式"
-
-#: ../daemon/gvfsbackendburn.c:755 ../daemon/gvfsbackendburn.c:791
-#: ../daemon/gvfsbackendburn.c:917 ../daemon/gvfsbackendgphoto2.c:2780
-msgid "File exists"
-msgstr "檔案已存在"
-
-#: ../daemon/gvfsbackendburn.c:845
-msgid "No such file or directory in target path"
-msgstr "在目標路徑沒有這個檔案或目錄"
-
-#: ../daemon/gvfsbackendburn.c:868
-msgid "Can't copy directory over directory"
-msgstr "不能將目錄複製到目錄上"
-
-#: ../daemon/gvfsbackendburn.c:877
-msgid "Target file exists"
-msgstr "目標檔案已存在"
-
-#: ../daemon/gvfsbackendburn.c:884
-msgid "Can't recursively copy directory"
-msgstr "不能循環複製目錄"
-
-#: ../daemon/gvfsbackendburn.c:943 ../daemon/gvfsbackendgphoto2.c:2360
-#: ../daemon/gvfsbackendgphoto2.c:2569 ../daemon/gvfsbackendgphoto2.c:2666
-#: ../daemon/gvfsbackendgphoto2.c:2759
-msgid "Not supported"
-msgstr "不支援"
-
-#: ../daemon/gvfsbackendcdda.c:223 ../daemon/gvfsbackendgphoto2.c:1403
-msgid "Cannot connect to the system bus"
-msgstr "不能連線到系統匯流排"
-
-#: ../daemon/gvfsbackendcdda.c:233 ../daemon/gvfsbackendgphoto2.c:1415
-#, fuzzy
-msgid "Cannot create libhal context"
-msgstr "不能初始化 libhal"
-
-#: ../daemon/gvfsbackendcdda.c:246 ../daemon/gvfsbackendgphoto2.c:1428
-msgid "Cannot initialize libhal"
-msgstr "不能初始化 libhal"
-
-#: ../daemon/gvfsbackendcdda.c:261 ../daemon/gvfsbackendcdda.c:332
-msgid "No drive specified"
-msgstr "未指定裝置"
-
-#: ../daemon/gvfsbackendcdda.c:276
-#, c-format
-msgid "Cannot find drive %s"
-msgstr "找不到到裝置 %s"
-
-#: ../daemon/gvfsbackendcdda.c:286
-#, c-format
-msgid "Drive %s does not contain audio files"
-msgstr "裝置 %s 中不包含音樂檔案"
-
-#. Translator: %s is the device the disc is inserted into
-#: ../daemon/gvfsbackendcdda.c:294
-#, c-format
-msgid "cdda mount on %s"
-msgstr "cdda 掛載於 %s"
-
-#: ../daemon/gvfsbackendcdda.c:295 ../daemon/gvfsbackendcdda.c:799
-#: ../monitor/hal/ghalmount.c:435 ../monitor/hal/ghalvolume.c:214
-#: ../monitor/hal/ghalvolume.c:235
-#, c-format
-msgid "Audio Disc"
-msgstr "音樂光碟"
-
-#: ../daemon/gvfsbackendcdda.c:356 ../daemon/gvfsbackendgphoto2.c:1656
-#, c-format
-msgid "File system is busy: %d open file"
-msgid_plural "File system is busy: %d open files"
-msgstr[0] "檔案系統忙碌中:開啟了 %d 個檔案"
-
-#: ../daemon/gvfsbackendcdda.c:546
-#, c-format
-msgid "No such file %s on drive %s"
-msgstr "磁碟 %2$s 中沒有檔案 %1$s"
-
-#. Translators: paranoia is the name of the cd audio reading library
-#: ../daemon/gvfsbackendcdda.c:655
-#, c-format
-msgid "Error from 'paranoia' on drive %s"
-msgstr "來自磁碟 %s 上的「paranoia」的錯誤"
-
-#: ../daemon/gvfsbackendcdda.c:718
-#, c-format
-msgid "Error seeking in stream on drive %s"
-msgstr "在磁碟 %s 上搜尋串流發生錯誤"
-
-#: ../daemon/gvfsbackendcdda.c:815 ../daemon/gvfsbackendgphoto2.c:1713
-#, c-format
-msgid "No such file"
-msgstr "沒有這個檔案"
-
-#: ../daemon/gvfsbackendcdda.c:829
-#, c-format
-msgid "The file does not exist or isn't an audio track"
-msgstr "檔案不存在或不是音軌"
-
-#: ../daemon/gvfsbackendcdda.c:935
-msgid "Audio CD Filesystem Service"
-msgstr "音樂 CD 檔案系統服務"
-
-#: ../daemon/gvfsbackendcomputer.c:179 ../daemon/gvfsbackendcomputer.c:693
-msgid "Computer"
-msgstr "電腦"
-
-#: ../daemon/gvfsbackendcomputer.c:466
-msgid "Filesystem"
-msgstr "檔案系統"
-
-#: ../daemon/gvfsbackendcomputer.c:590 ../daemon/gvfsbackendgphoto2.c:1705
-#: ../daemon/gvfsbackendobexftp.c:758 ../daemon/gvfsbackendsmb.c:648
-#: ../daemon/gvfsbackendtrash.c:678
-msgid "Can't open directory"
-msgstr "不能開啟目錄"
-
-#: ../daemon/gvfsbackendcomputer.c:594 ../daemon/gvfsbackendcomputer.c:732
-msgid "Can't open mountable file"
-msgstr "不能開啟可掛載式檔案"
-
-#: ../daemon/gvfsbackendcomputer.c:780 ../daemon/gvfsbackendsftp.c:1037
-#, c-format
-msgid "Internal error: %s"
-msgstr "內部的錯誤:%s"
-
-#: ../daemon/gvfsbackendcomputer.c:812 ../daemon/gvfsbackendcomputer.c:929
-msgid "Can't mount file"
-msgstr "不能掛載檔案"
-
-#: ../daemon/gvfsbackendcomputer.c:824
-msgid "No media in the drive"
-msgstr "裝置中沒有媒體"
-
-#: ../daemon/gvfsbackendcomputer.c:881 ../daemon/gvfsbackendcomputer.c:972
-#: ../daemon/gvfsbackendcomputer.c:1072
-msgid "Not a mountable file"
-msgstr "不是可掛載式檔案"
-
-#: ../daemon/gvfsbackendcomputer.c:987
-msgid "Can't unmount file"
-msgstr "不能卸載檔案"
-
-#: ../daemon/gvfsbackendcomputer.c:1103
-msgid "Can't eject file"
-msgstr "不能退出檔案"
-
-#: ../daemon/gvfsbackenddav.c:503 ../daemon/gvfsbackenddav.c:1523
-#: ../daemon/gvfsbackendhttp.c:245
-#, c-format
-msgid "HTTP Error: %s"
-msgstr "HTTP 錯誤: %s"
-
-#: ../daemon/gvfsbackenddav.c:520
-msgid "Could not parse response"
-msgstr "無法解析回應"
-
-#: ../daemon/gvfsbackenddav.c:529
-msgid "Empty response"
-msgstr "空白的回應"
-
-#: ../daemon/gvfsbackenddav.c:537
-msgid "Unexpected reply from server"
-msgstr "來自伺服器未預期的回應"
-
-#: ../daemon/gvfsbackenddav.c:1156 ../daemon/gvfsbackenddav.c:1658
-msgid "Response invalid"
-msgstr "回應無效"
-
-#: ../daemon/gvfsbackenddav.c:1299
-msgid "WebDAV share"
-msgstr "WebDAV 分享"
-
-#: ../daemon/gvfsbackenddav.c:1301
-#, c-format
-msgid "Enter password for %s"
-msgstr "輸入 %s 的密碼 "
-
-#: ../daemon/gvfsbackenddav.c:1304
-msgid "Please enter proxy password"
-msgstr "請輸入代理伺服器密碼"
-
-#: ../daemon/gvfsbackenddav.c:1527 ../daemon/gvfsbackenddav.c:1531
-msgid "Not a WebDAV enabled share"
-msgstr "不是使用 WebDAV 的分享"
-
-#: ../daemon/gvfsbackenddav.c:1554
-#, c-format
-msgid "WebDAV on %s"
-msgstr "WebDAV 於 %s"
-
-#: ../daemon/gvfsbackenddav.c:1614 ../daemon/gvfsbackenddav.c:1687
-msgid "Could not create request"
-msgstr "無法建立要求"
-
-#: ../daemon/gvfsbackenddav.c:1750 ../daemon/gvfsbackenddav.c:2003
-#: ../daemon/gvfsbackenddav.c:2114 ../daemon/gvfsbackendftp.c:1699
-#: ../daemon/gvfsbackendftp.c:2365 ../daemon/gvfsbackendsftp.c:3559
-#: ../daemon/gvfsbackendsmb.c:1804
-msgid "Target file already exists"
-msgstr "目標檔案已存在"
-
-#: ../daemon/gvfsbackenddav.c:1823 ../daemon/gvfsbackendsftp.c:2807
-#: ../daemon/gvfsbackendsmb.c:1038
-msgid "The file was externally modified"
-msgstr "該檔案已被外部程式修改過"
-
-#: ../daemon/gvfsbackenddav.c:1854 ../daemon/gvfsbackendsmb.c:1074
-#: ../daemon/gvfsbackendsmb.c:1821
-msgid "Backup file creation failed"
-msgstr "建立備份檔案失敗"
-
-#. TODO: Name
-#: ../daemon/gvfsbackenddnssd.c:433
-msgid "dns-sd"
-msgstr "dns-sd"
-
-#: ../daemon/gvfsbackenddnssd.c:669 ../daemon/gvfsbackendnetwork.c:731
-msgid "Can't monitor file or directory."
-msgstr "不能監控檔案或目錄。"
-
-#. TODO: Names, etc
-#: ../daemon/gvfsbackenddnssd.c:687
-msgid "Dns-SD"
-msgstr "Dns-SD"
-
-#: ../daemon/gvfsbackenddnssd.c:688 ../daemon/gvfsbackendnetwork.c:676
-#: ../daemon/gvfsbackendnetwork.c:814 ../daemon/gvfsbackendnetwork.c:815
-msgid "Network"
-msgstr "網路"
-
-#: ../daemon/gvfsbackendftp.c:236
-msgid "Accounts are unsupported"
-msgstr "帳號不被支援"
-
-#: ../daemon/gvfsbackendftp.c:240
-msgid "Host closed connection"
-msgstr "主機關閉連線"
-
-#: ../daemon/gvfsbackendftp.c:244
-msgid "Cannot open data connection. Maybe your firewall prevents this?"
-msgstr "無法開啟資料連線。也許您的防火牆阻擋了它?"
-
-#: ../daemon/gvfsbackendftp.c:248
-msgid "Data connection closed"
-msgstr "資料連線已關閉"
-
-#: ../daemon/gvfsbackendftp.c:255 ../daemon/gvfsbackendftp.c:259
-msgid "Operation failed"
-msgstr "操作已失敗"
-
-#: ../daemon/gvfsbackendftp.c:264
-msgid "No space left on server"
-msgstr "伺服器中沒有剩餘空間"
-
-#: ../daemon/gvfsbackendftp.c:272 ../daemon/gvfsbackendsftp.c:3868
-msgid "Operation unsupported"
-msgstr "操作不被支援"
-
-#: ../daemon/gvfsbackendftp.c:276 ../daemon/gvfsbackendsftp.c:289
-msgid "Permission denied"
-msgstr "權限不足"
-
-#: ../daemon/gvfsbackendftp.c:280
-msgid "Page type unknown"
-msgstr "頁面類型不明"
-
-#: ../daemon/gvfsbackendftp.c:284 ../daemon/gvfsbackendftp.c:2211
-msgid "Invalid filename"
-msgstr "無效的檔案名稱"
-
-#: ../daemon/gvfsbackendftp.c:288 ../daemon/gvfsbackendftp.c:364
-#: ../daemon/gvfsbackendftp.c:393 ../daemon/gvfsbackendftp.c:412
-#: ../daemon/gvfsbackendftp.c:425 ../daemon/gvfsbackendftp.c:817
-msgid "Invalid reply"
-msgstr "無效的回應"
-
-#: ../daemon/gvfsbackendftp.c:532
-msgid "broken transmission"
-msgstr "損壞的傳輸"
-
-#: ../daemon/gvfsbackendftp.c:677 ../daemon/gvfsbackendftp.c:837
-msgid "Could not connect to host"
-msgstr "無法連線至主機"
-
-#. translators: %s here is the hostname
-#: ../daemon/gvfsbackendftp.c:1337
-#, c-format
-msgid "Enter password for ftp on %s"
-msgstr "輸入 %s 的 ftp 密碼 "
-
-#: ../daemon/gvfsbackendftp.c:1362 ../daemon/gvfsbackendsftp.c:874
-msgid "Password dialog cancelled"
-msgstr "密碼對話盒已被取消"
-
-#: ../daemon/gvfsbackendftp.c:1441
-#, c-format
-msgid "ftp on %s"
-msgstr "ftp 於 %s"
-
-#. Translators: the first %s is the username, the second the host name
-#: ../daemon/gvfsbackendftp.c:1445
-#, c-format
-msgid "ftp as %s on %s"
-msgstr "以 %s 登入 %s 的 ftp"
-
-#: ../daemon/gvfsbackendftp.c:1529 ../daemon/gvfsbackendsftp.c:1958
-#: ../daemon/gvfsbackendsftp.c:3550
-msgid "File is directory"
-msgstr "檔案是目錄"
-
-#: ../daemon/gvfsbackendftp.c:1751 ../daemon/gvfsbackendftp.c:2326
-msgid "backups not supported yet"
-msgstr "備份尚未支援"
-
-#: ../daemon/gvfsbackendftp.c:1828
-msgid "filename too long"
-msgstr "檔案名稱太長"
-
-#: ../daemon/gvfsbackendftp.c:2345
-msgid "Invalid destination filename"
-msgstr "無效的目的端檔案名稱"
-
-#: ../daemon/gvfsbackendgphoto2.c:501
-#, c-format
-msgid "%s: %d: Directory or file exists"
-msgstr "%s:%d:目錄或檔案已存在"
-
-#: ../daemon/gvfsbackendgphoto2.c:508
-#, c-format
-msgid "%s: %d: No such file or directory"
-msgstr "%s:%d:沒有這個檔案或目錄"
-
-#: ../daemon/gvfsbackendgphoto2.c:514
-#, c-format
-msgid "%s: %d: Invalid filename"
-msgstr "%s:%d:無效的檔案名稱"
-
-#: ../daemon/gvfsbackendgphoto2.c:520
-#, c-format
-msgid "%s: %d: Not Supported"
-msgstr "%s:%d:不支援"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:693
-#, c-format
-msgid "Digital Camera (%s)"
-msgstr "數位相機 (%s)"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:841 ../monitor/gphoto2/ggphoto2volume.c:183
-#, c-format
-msgid "%s Camera"
-msgstr "%s 照相機"
-
-#. Translator: %s is the vendor name, e.g. Panasonic
-#. Translators: %s is the device vendor
-#: ../daemon/gvfsbackendgphoto2.c:844 ../monitor/gphoto2/ggphoto2volume.c:178
-#, c-format
-msgid "%s Audio Player"
-msgstr "%s 音樂播放機"
-
-#: ../daemon/gvfsbackendgphoto2.c:853 ../monitor/gphoto2/ggphoto2volume.c:192
-msgid "Camera"
-msgstr "照相機"
-
-#: ../daemon/gvfsbackendgphoto2.c:855 ../monitor/gphoto2/ggphoto2volume.c:190
-msgid "Audio Player"
-msgstr "音樂播放機"
-
-#: ../daemon/gvfsbackendgphoto2.c:1325 ../daemon/gvfsbackendgphoto2.c:2014
-msgid "Failed to get folder list"
-msgstr "取得資料夾清單失敗"
-
-#: ../daemon/gvfsbackendgphoto2.c:1443
-msgid "No device specified"
-msgstr "未指定裝置"
-
-#: ../daemon/gvfsbackendgphoto2.c:1460
-msgid "Cannot create gphoto2 context"
-msgstr ""
-
-#: ../daemon/gvfsbackendgphoto2.c:1470
-msgid "Error creating camera"
-msgstr "建立攝影機發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1483 ../daemon/gvfsbackendgphoto2.c:1493
-msgid "Error loading device information"
-msgstr "載入裝置資訊時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1505
-msgid "Error looking up device information"
-msgstr "尋找裝置資訊時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1515
-msgid "Error getting device information"
-msgstr "取得裝置資訊時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1528
-msgid "Error setting up camera communications port"
-msgstr "設定攝影機通訊埠時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1539
-msgid "Error initializing camera"
-msgstr "初始化攝影機發生錯誤"
-
-#. Translator: %s represents the device, e.g. usb:001,042
-#: ../daemon/gvfsbackendgphoto2.c:1553
-#, c-format
-msgid "gphoto2 mount on %s"
-msgstr "gphoto2 掛載於 %s"
-
-#: ../daemon/gvfsbackendgphoto2.c:1628
-msgid "No camera specified"
-msgstr "未指定攝影機"
-
-#: ../daemon/gvfsbackendgphoto2.c:1721
-msgid "Error creating file object"
-msgstr "建立檔案物件發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1736
-msgid "Error getting file"
-msgstr "讀取檔案時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1746
-msgid "Error getting data from file"
-msgstr "從檔案取得資料時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1841 ../daemon/gvfsbackendgphoto2.c:3030
-#, c-format
-msgid "Error seeking in stream on camera %s"
-msgstr "在攝影機 %s 上搜尋串流發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:1981 ../daemon/gvfsbackendsmbbrowse.c:1112
-msgid "Not a directory"
-msgstr "不是一個目錄"
-
-#: ../daemon/gvfsbackendgphoto2.c:2080
-msgid "Failed to get file list"
-msgstr "取得檔案清單失敗"
-
-#: ../daemon/gvfsbackendgphoto2.c:2372
-msgid "Error creating directory"
-msgstr "建立目錄時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:2581
-msgid "Name already exists"
-msgstr "名稱已存在"
-
-#: ../daemon/gvfsbackendgphoto2.c:2592 ../daemon/gvfsbackendgphoto2.c:3221
-msgid "New name too long"
-msgstr "新的名稱太長"
-
-#: ../daemon/gvfsbackendgphoto2.c:2602 ../daemon/gvfsbackendgphoto2.c:3232
-msgid "Error renaming dir"
-msgstr "重新命名目錄時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:2615 ../daemon/gvfsbackendgphoto2.c:3245
-msgid "Error renaming file"
-msgstr "重新命名檔案時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:2679
-#, c-format
-msgid "Directory '%s' is not empty"
-msgstr "目錄「%s」不是空的"
-
-#: ../daemon/gvfsbackendgphoto2.c:2690
-msgid "Error deleting directory"
-msgstr "刪除目錄時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:2716
-msgid "Error deleting file"
-msgstr "刪除檔案時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:2769
-msgid "Can't write to directory"
-msgstr "不能寫入至目錄"
-
-#: ../daemon/gvfsbackendgphoto2.c:2816
-msgid "Cannot allocate new file to append to"
-msgstr "不能分配新檔案加入到"
-
-#: ../daemon/gvfsbackendgphoto2.c:2831
-msgid "Cannot read file to append to"
-msgstr "不能讀取檔案加入到"
-
-#: ../daemon/gvfsbackendgphoto2.c:2842
-msgid "Cannot get data of file to append to"
-msgstr "不能取得檔案的資料加入到"
-
-#: ../daemon/gvfsbackendgphoto2.c:3129
-msgid "Error writing file"
-msgstr "寫入檔案時發生錯誤"
-
-#: ../daemon/gvfsbackendgphoto2.c:3177
-msgid "Not supported (not same directory)"
-msgstr "不支援(不同目錄)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3189
-msgid "Not supported (src is dir, dst is dir)"
-msgstr "不支援(來源是目錄,目的也是目錄)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3197
-msgid "Not supported (src is dir, dst is existing file)"
-msgstr "不支援(來源是目錄,目的是既存的檔案)"
-
-#: ../daemon/gvfsbackendgphoto2.c:3209
-msgid "Not supported (src is file, dst is dir)"
-msgstr "不支援(來源是檔案,目的是目錄)"
-
-#: ../daemon/gvfsbackendhttp.c:241
-#, c-format
-msgid "HTTP Client Error: %s"
-msgstr "HTTP 客戶端錯誤:%s"
-
-#: ../daemon/gvfsbackendhttp.c:560 ../daemon/gvfsbackendsftp.c:1882
-#: ../daemon/gvfsbackendsmb.c:1301 ../daemon/gvfsbackendtrash.c:1006
-#: ../daemon/gvfsdaemonutils.c:211
-msgid " (invalid encoding)"
-msgstr "(無效的編碼)"
-
-#: ../daemon/gvfsbackendlocaltest.c:853
-msgid "Directory notification not supported"
-msgstr "不支援目錄通知"
-
-#. smb:/// root link
-#: ../daemon/gvfsbackendnetwork.c:268 ../daemon/gvfsbackendsmbbrowse.c:699
-msgid "Windows Network"
-msgstr "Windows 網路"
-
-#. "separate": a link to dns-sd://local/
-#: ../daemon/gvfsbackendnetwork.c:392
-msgid "Local Network"
-msgstr "本地端網路"
-
-#. Translators: this is the friendly name of the 'network://' backend that
-#. * shows computers in your local network.
-#: ../daemon/gvfsbackendnetwork.c:862
-msgid "Network Location Monitor"
-msgstr "網路位置監視器"
-
-#. Mount was successful
-#. Translators: This is "<sharename> on <servername>" and is used as name for an SMB share
-#: ../daemon/gvfsbackendobexftp.c:442 ../daemon/gvfsbackendsmb.c:557
-#: ../daemon/gvfsbackendsmb.c:1294
-#, c-format
-msgid "%s on %s"
-msgstr "%s 於 %s"
-
-#: ../daemon/gvfsbackendobexftp.c:699
-msgid "Connection to the device lost"
-msgstr "到裝置的連線已失去"
-
-#: ../daemon/gvfsbackendobexftp.c:1194
-msgid "Device requires a software update"
-msgstr "裝置要求更新軟體"
-
-#: ../daemon/gvfsbackendsftp.c:281
-msgid "ssh program unexpectedly exited"
-msgstr "ssh 程式意外的中止了"
-
-#: ../daemon/gvfsbackendsftp.c:296
-msgid "Hostname not known"
-msgstr "主機名稱不明"
-
-#: ../daemon/gvfsbackendsftp.c:303
-msgid "No route to host"
-msgstr "沒有路由可到主機"
-
-#: ../daemon/gvfsbackendsftp.c:310
-msgid "Connection refused by server"
-msgstr "連線被伺服器拒絕"
-
-#: ../daemon/gvfsbackendsftp.c:317
-msgid "Host key verification failed"
-msgstr "驗證主機金鑰失敗"
-
-#: ../daemon/gvfsbackendsftp.c:400
-msgid "Unable to spawn ssh program"
-msgstr "無法呼叫 ssh 程式"
-
-#: ../daemon/gvfsbackendsftp.c:416
-#, c-format
-msgid "Unable to spawn ssh program: %s"
-msgstr "無法呼叫 ssh 程式:%s"
-
-#: ../daemon/gvfsbackendsftp.c:528 ../daemon/gvfsbackendsftp.c:780
-msgid "Timed out when logging in"
-msgstr "登入逾時時間"
-
-#: ../daemon/gvfsbackendsftp.c:858
-msgid "Enter passphrase for key"
-msgstr "輸入金鑰的密語 "
-
-#: ../daemon/gvfsbackendsftp.c:860
-msgid "Enter password"
-msgstr "輸入密碼"
-
-#: ../daemon/gvfsbackendsftp.c:921
-msgid "Can't send password"
-msgstr "不能傳送密碼"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Log In Anyway"
-msgstr "強制登入"
-
-#: ../daemon/gvfsbackendsftp.c:929
-msgid "Cancel Login"
-msgstr "取消登入"
-
-#: ../daemon/gvfsbackendsftp.c:939
-#, c-format
-msgid ""
-"The identity of the remote computer (%s) is unknown.\n"
-"This happens when you log in to a computer the first time.\n"
-"\n"
-"The identity sent by the remote computer is %s. If you want to be absolutely "
-"sure it is safe to continue, contact the system administrator."
-msgstr ""
-"遠端電腦 (%s) 的識別不明。\n"
-"這通常發生在您第一次登入電腦的時候。\n"
-"\n"
-"由遠端電腦傳送的識別為 %s。如果您想要完全確定繼續是安全的,請連絡系統管理者。"
-
-#: ../daemon/gvfsbackendsftp.c:959
-msgid "Login dialog cancelled"
-msgstr "登入對話盒已被取消"
-
-#: ../daemon/gvfsbackendsftp.c:979
-msgid "Can't send host identity confirmation"
-msgstr "不能傳送主機識別確認"
-
-#: ../daemon/gvfsbackendsftp.c:1472 ../daemon/gvfsbackendsftp.c:1495
-msgid "Protocol error"
-msgstr "通訊協定錯誤"
-
-#. Translators: This is the name of an sftp share, like "sftp on <hostname>"
-#: ../daemon/gvfsbackendsftp.c:1519
-#, c-format
-msgid "sftp on %s"
-msgstr "sftp 於 %s"
-
-#: ../daemon/gvfsbackendsftp.c:1543
-msgid "Unable to find supported ssh command"
-msgstr "找不到支援的 ssh 指令"
-
-#: ../daemon/gvfsbackendsftp.c:1967
-msgid "Failure"
-msgstr "失敗"
-
-#: ../daemon/gvfsbackendsftp.c:2023 ../daemon/gvfsbackendsftp.c:2082
-#: ../daemon/gvfsbackendsftp.c:2093 ../daemon/gvfsbackendsftp.c:2149
-#: ../daemon/gvfsbackendsftp.c:2235 ../daemon/gvfsbackendsftp.c:2285
-#: ../daemon/gvfsbackendsftp.c:2331 ../daemon/gvfsbackendsftp.c:2406
-#: ../daemon/gvfsbackendsftp.c:2513 ../daemon/gvfsbackendsftp.c:2553
-#: ../daemon/gvfsbackendsftp.c:2603 ../daemon/gvfsbackendsftp.c:2672
-#: ../daemon/gvfsbackendsftp.c:2692 ../daemon/gvfsbackendsftp.c:2844
-#: ../daemon/gvfsbackendsftp.c:2869 ../daemon/gvfsbackendsftp.c:2924
-#: ../daemon/gvfsbackendsftp.c:2981 ../daemon/gvfsbackendsftp.c:3252
-#: ../daemon/gvfsbackendsftp.c:3319 ../daemon/gvfsbackendsftp.c:3448
-#: ../daemon/gvfsbackendsftp.c:3483 ../daemon/gvfsbackendsftp.c:3511
-#: ../daemon/gvfsbackendsftp.c:3619 ../daemon/gvfsbackendsftp.c:3673
-#: ../daemon/gvfsbackendsftp.c:3707 ../daemon/gvfsbackendsftp.c:3741
-#: ../daemon/gvfsbackendsftp.c:3756 ../daemon/gvfsbackendsftp.c:3771
-#: ../daemon/gvfsbackendsftp.c:3849
-msgid "Invalid reply received"
-msgstr "收到無效的回應"
-
-#: ../daemon/gvfsbackendsftp.c:2351
-#, c-format
-msgid "Error creating backup file: %s"
-msgstr "建立備份檔案時發生錯誤:%s"
-
-#: ../daemon/gvfsbackendsftp.c:2754
-msgid "Unable to create temporary file"
-msgstr "無法建立暫存檔案"
-
-#: ../daemon/gvfsbackendsftp.c:3545 ../daemon/gvfsbackendsmb.c:1793
-msgid "Can't move directory over directory"
-msgstr "不能將目錄移動至目錄上"
-
-#. translators: First %s is a share name, second is a server name
-#: ../daemon/gvfsbackendsmb.c:216
-#, c-format
-msgid "Password required for share %s on %s"
-msgstr "要分享 %2$s 上的 %1$s 需要密碼"
-
-#: ../daemon/gvfsbackendsmb.c:471 ../daemon/gvfsbackendsmb.c:511
-#: ../daemon/gvfsdaemonutils.c:92
-#, c-format
-msgid "Internal Error (%s)"
-msgstr "內部的錯誤 (%s)"
-
-#. translators: We tried to mount a windows (samba) share, but failed
-#: ../daemon/gvfsbackendsmb.c:550
-msgid "Failed to mount Windows share"
-msgstr "掛載 Windows 分享失敗"
-
-#: ../daemon/gvfsbackendsmb.c:717 ../daemon/gvfsbackendsmb.c:1173
-msgid "Unsupported seek type"
-msgstr "不支援的搜尋類型"
-
-#: ../daemon/gvfsbackendsmb.c:1237
-#, c-format
-msgid "Backup file creation failed: %s"
-msgstr "建立備份檔案失敗:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1695
-#, c-format
-msgid "Error deleting file: %s"
-msgstr "刪除檔案時發生錯誤:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1769
-#, c-format
-msgid "Error moving file: %s"
-msgstr "移動檔案時發生錯誤:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1841
-#, c-format
-msgid "Error removing target file: %s"
-msgstr "移除目標檔案時發生錯誤:%s"
-
-#: ../daemon/gvfsbackendsmb.c:1865
-msgid "Can't recursively move directory"
-msgstr "不能循環移動目錄"
-
-#: ../daemon/gvfsbackendsmb.c:1928
-msgid "Windows Shares Filesystem Service"
-msgstr "Windows 分享檔案系統服務"
-
-#. translators: Name for the location that lists the smb shares
-#. availible on a server (%s is the name of the server)
-#: ../daemon/gvfsbackendsmbbrowse.c:707
-#, c-format
-msgid "Windows shares on %s"
-msgstr "Windows 分享於 %s"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:799 ../daemon/gvfsbackendsmbbrowse.c:845
-msgid "The file is not a mountable"
-msgstr "該檔案是無法掛載的"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:867
-msgid "Not a regular file"
-msgstr "不是正規的檔案"
-
-#: ../daemon/gvfsbackendsmbbrowse.c:1224
-msgid "Windows Network Filesystem Service"
-msgstr "Windows 網路檔案系統服務"
-
-#. translators: This is the name of the backend
-#. Translators: this is the display name of the backend
-#: ../daemon/gvfsbackendtrash.c:641 ../daemon/gvfsbackendtrash.c:1229
-msgid "Trash"
-msgstr "回收筒"
-
-#: ../daemon/gvfsbackendtrash.c:1019
-#, c-format
-msgid "%s (in trash)"
-msgstr "%s (於回收筒)"
-
-#: ../daemon/gvfsbackendtrash.c:1330
-msgid "Can't delete trash"
-msgstr "無法刪除回收筒"
-
-#: ../daemon/gvfsbackendtrash.c:1677 ../daemon/gvfsbackendtrash.c:1752
-msgid "Trash directory notification not supported"
-msgstr "不支援目錄通知"
-
-#: ../daemon/gvfsdaemon.c:1032
-msgid "Invalid backend type"
-msgstr "無效的後端類型"
-
-#: ../daemon/gvfsdaemonutils.c:104
-#, c-format
-msgid "Error sending fd: %s"
-msgstr "傳送 fd 時發生錯誤:%s"
-
-#: ../daemon/gvfsjobcloseread.c:112 ../daemon/gvfsjobclosewrite.c:120
-#: ../daemon/gvfsjobcopy.c:169 ../daemon/gvfsjobcreatemonitor.c:140
-#: ../daemon/gvfsjobcreatemonitor.c:151 ../daemon/gvfsjobcreatemonitor.c:174
-#: ../daemon/gvfsjobcreatemonitor.c:192 ../daemon/gvfsjobdelete.c:122
-#: ../daemon/gvfsjobenumerate.c:256 ../daemon/gvfsjobmakedirectory.c:122
-#: ../daemon/gvfsjobmount.c:109 ../daemon/gvfsjobmountmountable.c:156
-#: ../daemon/gvfsjobmove.c:168 ../daemon/gvfsjobopenforread.c:130
-#: ../daemon/gvfsjobopenforwrite.c:148 ../daemon/gvfsjobopenforwrite.c:162
-#: ../daemon/gvfsjobopenforwrite.c:176 ../daemon/gvfsjobqueryattributes.c:135
-#: ../daemon/gvfsjobqueryfsinfo.c:131 ../daemon/gvfsjobqueryinfo.c:149
-#: ../daemon/gvfsjobread.c:120 ../daemon/gvfsjobseekread.c:119
-#: ../daemon/gvfsjobseekwrite.c:119 ../daemon/gvfsjobsetattribute.c:150
-#: ../daemon/gvfsjobsetdisplayname.c:127 ../daemon/gvfsjobtrash.c:122
-#: ../daemon/gvfsjobunmountmountable.c:132
-#: ../daemon/gvfsjobunmountmountable.c:146 ../daemon/gvfsjobupload.c:169
-#: ../daemon/gvfsjobwrite.c:120
-msgid "Operation not supported by backend"
-msgstr "後端不支援此操作"
-
-#: ../daemon/gvfsjobmakesymlink.c:126
-msgid "Symlinks not supported by backend"
-msgstr "後端不支援符號連結"
-
-#: ../daemon/gvfsjobsetattribute.c:120
-msgid "Invalid dbus message"
-msgstr "無效的 dbus 訊息"
-
-#: ../daemon/main.c:45
-msgid "Replace old daemon."
-msgstr "置換舊的伺服程式。"
-
-#: ../daemon/main.c:46
-msgid "Don't start fuse."
-msgstr "不啟動 fuse。"
-
-#: ../daemon/main.c:58
-msgid "GVFS Daemon"
-msgstr "GVFS 伺服程式"
-
-#: ../daemon/main.c:61
-msgid "Main daemon for GVFS"
-msgstr "GCFS 主伺服程式"
-
-#. Translators: the first %s is the application name,
-#. the second %s is the error message
-#: ../daemon/main.c:76
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: ../daemon/main.c:78 ../programs/gvfs-cat.c:163 ../programs/gvfs-cat.c:176
-#: ../programs/gvfs-copy.c:101 ../programs/gvfs-info.c:337
-#: ../programs/gvfs-ls.c:386 ../programs/gvfs-mkdir.c:59
-#: ../programs/gvfs-move.c:97 ../programs/gvfs-open.c:131
-#: ../programs/gvfs-open.c:144 ../programs/gvfs-save.c:165
-#: ../programs/gvfs-tree.c:251
-#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "使用「%s --help」以獲得更多資訊。"
-
-#: ../daemon/mount.c:439
-msgid "Invalid arguments from spawned child"
-msgstr "來自衍生子程序的無效引數"
-
-#: ../daemon/mount.c:740
-#, c-format
-msgid "Automount failed: %s"
-msgstr "自動掛載失敗:%s"
-
-#: ../daemon/mount.c:785
-msgid "The specified location is not mounted"
-msgstr "指定的位置尚未掛載"
-
-#: ../daemon/mount.c:790
-msgid "The specified location is not supported"
-msgstr "指定的位置不被支援"
-
-#: ../daemon/mount.c:954
-msgid "Location is already mounted"
-msgstr "該位置已經掛載了"
-
-#: ../daemon/mount.c:962
-msgid "Location is not mountable"
-msgstr "該位置不是可掛載的"
-
-#: ../monitor/hal/ghaldrive.c:130
-msgid "CD-ROM"
-msgstr "CD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:132
-msgid "CD-R"
-msgstr "CD-R"
-
-#: ../monitor/hal/ghaldrive.c:134
-msgid "CD-RW"
-msgstr "CD-RW"
-
-#: ../monitor/hal/ghaldrive.c:138
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
-
-#: ../monitor/hal/ghaldrive.c:140
-msgid "DVD+R"
-msgstr "DVD+R"
-
-#: ../monitor/hal/ghaldrive.c:142
-msgid "DVD+RW"
-msgstr "DVD+RW"
-
-#: ../monitor/hal/ghaldrive.c:144
-msgid "DVD-R"
-msgstr "DVD-R"
-
-#: ../monitor/hal/ghaldrive.c:146
-msgid "DVD-RW"
-msgstr "DVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:148
-msgid "DVD-RAM"
-msgstr "DVD-RAM"
-
-#: ../monitor/hal/ghaldrive.c:151
-msgid "DVD±R"
-msgstr "DVD±R"
-
-#: ../monitor/hal/ghaldrive.c:154
-msgid "DVD±RW"
-msgstr "DVD±RW"
-
-#: ../monitor/hal/ghaldrive.c:156
-msgid "HDDVD"
-msgstr "HDDVD"
-
-#: ../monitor/hal/ghaldrive.c:158
-msgid "HDDVD-r"
-msgstr "HDDVD-r"
-
-#: ../monitor/hal/ghaldrive.c:160
-msgid "HDDVD-RW"
-msgstr "HDDVD-RW"
-
-#: ../monitor/hal/ghaldrive.c:162
-msgid "Blu-ray"
-msgstr "Blu-ray"
-
-#: ../monitor/hal/ghaldrive.c:164
-msgid "Blu-ray-R"
-msgstr "Blu-ray-R"
-
-#: ../monitor/hal/ghaldrive.c:166
-msgid "Blu-ray-RE"
-msgstr "Blu-ray-RE"
-
-#. translators: This wis something like "CD-ROM/DVD Drive" or
-#. "CD-RW/Blue-ray Drive" depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:172
-#, c-format
-msgid "%s/%s Drive"
-msgstr "%s/%s 裝置"
-
-#. translators: This wis something like "CD-ROM Drive" or "CD-RW Drive
-#. depending on the properties of the drive
-#: ../monitor/hal/ghaldrive.c:178
-#, c-format
-msgid "%s Drive"
-msgstr "%s 裝置"
-
-#: ../monitor/hal/ghaldrive.c:182
-msgid "Floppy Drive"
-msgstr "軟碟機"
-
-#: ../monitor/hal/ghaldrive.c:188
-msgid "Software RAID Drive"
-msgstr "軟體 RAID 陣列"
-
-#: ../monitor/hal/ghaldrive.c:190
-msgid "USB Drive"
-msgstr "USB 磁碟機"
-
-#: ../monitor/hal/ghaldrive.c:192
-msgid "ATA Drive"
-msgstr "ATA 磁碟機"
-
-#: ../monitor/hal/ghaldrive.c:194
-msgid "SCSI Drive"
-msgstr "SCSI 裝置"
-
-#: ../monitor/hal/ghaldrive.c:196
-msgid "FireWire Drive"
-msgstr "FireWire 磁碟機"
-
-#: ../monitor/hal/ghaldrive.c:200
-msgid "Tape Drive"
-msgstr "磁帶機"
-
-#: ../monitor/hal/ghaldrive.c:202
-msgid "CompactFlash Drive"
-msgstr "CompactFlash 裝置"
-
-#: ../monitor/hal/ghaldrive.c:204
-msgid "MemoryStick Drive"
-msgstr "MemoryStick 裝置"
-
-#: ../monitor/hal/ghaldrive.c:206
-msgid "SmartMedia Drive"
-msgstr "SmartMedia 裝置"
-
-#: ../monitor/hal/ghaldrive.c:208
-msgid "SD/MMC Drive"
-msgstr "SD/MMC 裝置"
-
-#: ../monitor/hal/ghaldrive.c:210
-msgid "Zip Drive"
-msgstr "Zip 磁碟機"
-
-#: ../monitor/hal/ghaldrive.c:212
-msgid "Jaz Drive"
-msgstr "Jaz 磁碟機"
-
-#: ../monitor/hal/ghaldrive.c:214
-msgid "Thumb Drive"
-msgstr "隨身碟"
-
-#: ../monitor/hal/ghaldrive.c:217
-msgid "Mass Storage Drive"
-msgstr "大量存放裝置"
-
-#: ../monitor/hal/ghaldrive.c:723
-#, c-format
-msgid "Failed to eject media; one or more volumes on the media are busy."
-msgstr "退出媒體失敗;該媒體上的一或多個儲存裝置正在忙碌。"
-
-#: ../monitor/hal/ghalmount.c:301 ../monitor/hal/ghalvolume.c:152
-#, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
-
-#: ../monitor/hal/ghalmount.c:306 ../monitor/hal/ghalvolume.c:157
-#, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: ../monitor/hal/ghalmount.c:311 ../monitor/hal/ghalvolume.c:162
-#, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: ../monitor/hal/ghalmount.c:433 ../monitor/hal/ghalvolume.c:233
-msgid "Mixed Audio/Data Disc"
-msgstr "混合音樂/資料光碟"
-
-#. Translators: %s is the size of the mount (e.g. 512 MB)
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalmount.c:446 ../monitor/hal/ghalvolume.c:244
-#, c-format
-msgid "%s Media"
-msgstr "%s 媒體"
-
-#. Translators: %s is the size of the volume (e.g. 512 MB)
-#: ../monitor/hal/ghalvolume.c:221
-#, c-format
-msgid "%s Encrypted Data"
-msgstr "%s 加密的資料"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "CD-ROM Disc"
-msgstr "CD-ROM 光碟"
-
-#: ../monitor/hal/hal-utils.c:40 ../monitor/gphoto2/hal-utils.c:40
-msgid "Blank CD-ROM Disc"
-msgstr "空白 CD-ROM 光碟"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "CD-R Disc"
-msgstr "CD-R 光碟"
-
-#: ../monitor/hal/hal-utils.c:41 ../monitor/gphoto2/hal-utils.c:41
-msgid "Blank CD-R Disc"
-msgstr "空白 CD-R 光碟"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "CD-RW Disc"
-msgstr "CD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:42 ../monitor/gphoto2/hal-utils.c:42
-msgid "Blank CD-RW Disc"
-msgstr "空白 CD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "DVD-ROM Disc"
-msgstr "DVD-ROM 光碟"
-
-#: ../monitor/hal/hal-utils.c:43 ../monitor/hal/hal-utils.c:45
-#: ../monitor/gphoto2/hal-utils.c:43 ../monitor/gphoto2/hal-utils.c:45
-msgid "Blank DVD-ROM Disc"
-msgstr "空白 DVD-ROM 光碟"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "DVD-RAM Disc"
-msgstr "DVD-RAM 光碟"
-
-#: ../monitor/hal/hal-utils.c:44 ../monitor/gphoto2/hal-utils.c:44
-msgid "Blank DVD-RAM Disc"
-msgstr "空白 DVD-RAM 光碟"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "DVD-RW Disc"
-msgstr "DVD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:46 ../monitor/gphoto2/hal-utils.c:46
-msgid "Blank DVD-RW Disc"
-msgstr "空白 DVD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "DVD+R Disc"
-msgstr "DVD+R 光碟"
-
-#: ../monitor/hal/hal-utils.c:47 ../monitor/gphoto2/hal-utils.c:47
-msgid "Blank DVD+R Disc"
-msgstr "空白 DVD+R 光碟"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "DVD+RW Disc"
-msgstr "DVD+RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:48 ../monitor/gphoto2/hal-utils.c:48
-msgid "Blank DVD+RW Disc"
-msgstr "空白 DVD+RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "DVD+R DL Disc"
-msgstr "DVD+R DL 光碟"
-
-#: ../monitor/hal/hal-utils.c:49 ../monitor/gphoto2/hal-utils.c:49
-msgid "Blank DVD+R DL Disc"
-msgstr "空白 DVD+R DL 光碟"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blu-Ray Disc"
-msgstr "Blu-Ray 光碟"
-
-#: ../monitor/hal/hal-utils.c:50 ../monitor/gphoto2/hal-utils.c:50
-msgid "Blank Blu-Ray Disc"
-msgstr "空白 Blu-Ray 光碟"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blu-Ray R Disc"
-msgstr "Blu-Ray R 光碟"
-
-#: ../monitor/hal/hal-utils.c:51 ../monitor/gphoto2/hal-utils.c:51
-msgid "Blank Blu-Ray R Disc"
-msgstr "空白 Blu-Ray R 光碟"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blu-Ray RW Disc"
-msgstr "Blu-Ray RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:52 ../monitor/gphoto2/hal-utils.c:52
-msgid "Blank Blu-Ray RW Disc"
-msgstr "空白 Blu-Ray RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "HD DVD Disc"
-msgstr "HD DVD 光碟"
-
-#: ../monitor/hal/hal-utils.c:53 ../monitor/gphoto2/hal-utils.c:53
-msgid "Blank HD DVD Disc"
-msgstr "空白 HD DVD 光碟"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "HD DVD-R Disc"
-msgstr "HD DVD-R 光碟"
-
-#: ../monitor/hal/hal-utils.c:54 ../monitor/gphoto2/hal-utils.c:54
-msgid "Blank HD DVD-R Disc"
-msgstr "空白 HD DVD-R 光碟"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "HD DVD-RW Disc"
-msgstr "HD DVD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:55 ../monitor/gphoto2/hal-utils.c:55
-msgid "Blank HD DVD-RW Disc"
-msgstr "空白 HD DVD-RW 光碟"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "MO Disc"
-msgstr "MO 光碟"
-
-#: ../monitor/hal/hal-utils.c:56 ../monitor/gphoto2/hal-utils.c:56
-msgid "Blank MO Disc"
-msgstr "空白 MO 光碟"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Disc"
-msgstr "光碟"
-
-#: ../monitor/hal/hal-utils.c:57 ../monitor/gphoto2/hal-utils.c:57
-msgid "Blank Disc"
-msgstr "空白光碟"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:57
-#, c-format
-msgid "%s: %s: error opening file: %s\n"
-msgstr "%s: %s:開啟檔案時發生錯誤:%s\n"
-
-#. Translators: the first %s is the program name, the
-#. second one is the URI of the file.
-#: ../programs/gvfs-cat.c:80
-#, c-format
-msgid "%s: %s, error writing to stdout"
-msgstr "%s: %s,錯誤寫入至 stdout"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:92
-#, c-format
-msgid "%s: %s: error reading: %s\n"
-msgstr "%s: %s:讀取檔案時發生錯誤:%s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-cat.c:110
-#, c-format
-msgid "%s: %s:error closing: %s\n"
-msgstr "%s: %s:發生錯誤時正關閉: %s\n"
-
-#: ../programs/gvfs-cat.c:136
-msgid "LOCATION... - concatenate LOCATIONS to standard output."
-msgstr "LOCATION... - 將 LOCATIONS 連接至標準輸出。"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-cat.c:141
-msgid ""
-"Concatenate files at locations and print to the standard output. Works just "
-"like the traditional cat utility, but using gvfs location instead local "
-"files: for example you can use something like smb://server/resource/file.txt "
-"as location to concatenate."
-msgstr ""
-"連接位置上的檔案並顯示到標準輸出。運作方式就像傳統的 cat 公用程式,只是使用 "
-"gvfs 位置代替 local 檔案:例如您可以使用像 smb://server/resource/file.txt 做"
-"為連接的位置。"
-
-#: ../programs/gvfs-cat.c:148
-msgid ""
-"Note: just pipe through cat if you need its formatting option like -n, -T or "
-"other."
-msgstr "注意:只要利用導管通過 cat 就可以使用它的格式選項如 -n, -T 或其他。"
-
-#. Translators: the %s is the program name. This error message
-#. means the user is calling gvfs-cat without any argument.
-#: ../programs/gvfs-cat.c:174 ../programs/gvfs-open.c:142
-#, c-format
-msgid "%s: missing locations"
-msgstr "%s:漏掉位置"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:56
-#, c-format
-msgid "%s: %s: error opening location: %s\n"
-msgstr "%s: %s:發生錯誤時正開啟位置: %s\n"
-
-#. Translators: the first %s is the program name, the second one
-#. is the URI of the file, the third is the error message.
-#: ../programs/gvfs-open.c:83
-#, c-format
-msgid "%s: %s: error launching application: %s\n"
-msgstr "%s: %s:執行應用程式時發生錯誤:%s\n"
-
-#: ../programs/gvfs-open.c:113
-msgid "FILES... - open FILES with registered application."
-msgstr "FILES... - 以註冊的應用程式開啟 FILES。"
-
-#. Translators: this message will appear after the usage string
-#. and before the list of options.
-#: ../programs/gvfs-open.c:117
-msgid ""
-"Opens the file(s) with the default application registered to handle the type "
-"of the file."
-msgstr "使用註冊為處理該檔案類型的預設應用程式來開啟檔案。"
-
-#~ msgid "Error creating port info list"
-#~ msgstr "建立通訊埠資訊清單時發生錯誤"
-
-#~ msgid "Error getting port info from port info list"
-#~ msgstr "從通訊埠資訊清單取得通訊埠資訊時發生錯誤"
-
-#~ msgid "File system is busy: %d open files"
-#~ msgstr "檔案系統忙碌中:開啟了 %d 個檔案"
-
-#~ msgid "Error listing folders"
-#~ msgstr "列出資料夾時發生錯誤"
-
-#~ msgid "Error listing files in folder"
-#~ msgstr "列出資料夾中的檔案時發生錯誤"
-
-#~ msgid "File unavailable"
-#~ msgstr "檔案無法使用"
-
-#~ msgid "%.1f kB Media"
-#~ msgstr "%.1f kB 媒體"
-
-#~ msgid "%.1f MB Media"
-#~ msgstr "%.1f MB 媒體"
-
-#~ msgid "%.1f GB Media"
-#~ msgstr "%.1f GB 媒體"
diff --git a/programs/Makefile.am b/programs/Makefile.am
deleted file mode 100644
index 7f7d9dc1..00000000
--- a/programs/Makefile.am
+++ /dev/null
@@ -1,85 +0,0 @@
-NULL =
-
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_builddir) \
- $(GLIB_CFLAGS) \
- -DGVFS_LOCALEDIR=\""$(localedir)"\" \
- -DG_DISABLE_DEPRECATED
-
-libraries = \
- $(GLIB_LIBS)
-
-bin_PROGRAMS = \
- gvfs-mount \
- gvfs-cat \
- gvfs-open \
- gvfs-save \
- gvfs-ls \
- gvfs-tree \
- gvfs-info \
- gvfs-trash \
- gvfs-rename \
- gvfs-rm \
- gvfs-copy \
- gvfs-move \
- gvfs-monitor-file \
- gvfs-monitor-dir \
- gvfs-mkdir \
- $(NULL)
-
-bin_SCRIPTS = \
- gvfs-less \
- $(NULL)
-
-if ENABLE_BASHCOMP
-profiledir = $(BASHCOMP_DIR)
-profile_SCRIPTS = gvfs-bash-completion.sh
-endif
-
-gvfs_cat_SOURCES = gvfs-cat.c
-gvfs_cat_LDADD = $(libraries)
-
-gvfs_open_SOURCES = gvfs-open.c
-gvfs_open_LDADD = $(libraries)
-
-gvfs_copy_SOURCES = gvfs-copy.c
-gvfs_copy_LDADD = $(libraries)
-
-gvfs_save_SOURCES = gvfs-save.c
-gvfs_save_LDADD = $(libraries)
-
-gvfs_info_SOURCES = gvfs-info.c
-gvfs_info_LDADD = $(libraries)
-
-gvfs_trash_SOURCES = gvfs-trash.c
-gvfs_trash_LDADD = $(libraries)
-
-gvfs_rename_SOURCES = gvfs-rename.c
-gvfs_rename_LDADD = $(libraries)
-
-gvfs_rm_SOURCES = gvfs-rm.c
-gvfs_rm_LDADD = $(libraries)
-
-gvfs_ls_SOURCES = gvfs-ls.c
-gvfs_ls_LDADD = $(libraries)
-
-gvfs_tree_SOURCES = gvfs-tree.c
-gvfs_tree_LDADD = $(libraries)
-
-gvfs_move_SOURCES = gvfs-move.c
-gvfs_move_LDADD = $(libraries)
-
-gvfs_mount_SOURCES = gvfs-mount.c
-gvfs_mount_LDADD = $(libraries)
-
-gvfs_monitor_dir_SOURCES = gvfs-monitor-dir.c
-gvfs_monitor_dir_LDADD = $(libraries)
-
-gvfs_monitor_file_SOURCES = gvfs-monitor-file.c
-gvfs_monitor_file_LDADD = $(libraries)
-
-gvfs_mkdir_SOURCES = gvfs-mkdir.c
-gvfs_mkdir_LDADD = $(libraries)
-
-EXTRA_DIST = gvfs-less gvfs-bash-completion.sh
diff --git a/programs/gvfs-bash-completion.sh b/programs/gvfs-bash-completion.sh
deleted file mode 100755
index 5ec524d4..00000000
--- a/programs/gvfs-bash-completion.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2006-2007 Red Hat, Inc.
-#
-# This library is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This library 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
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
-# USA.
-#
-# Author: David Zeuthen <davidz@redhat.com>
-
-# Check for bash
-[ -z "$BASH_VERSION" ] && return
-
-####################################################################################################
-
-# don't misbehave on colons; See item E13 at http://tiswww.case.edu/php/chet/bash/FAQ
-COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
-
-__gvfs_multiple_uris() {
- local IFS=$'\n'
- local cur="${COMP_WORDS[COMP_CWORD]}"
-
- COMPREPLY=($(compgen -W '$(gvfs-ls --show-completions "$cur")' -- ""))
-}
-
-####################################################################################################
-
-complete -o nospace -F __gvfs_multiple_uris gvfs-ls
-complete -o nospace -F __gvfs_multiple_uris gvfs-info
-complete -o nospace -F __gvfs_multiple_uris gvfs-cat
-complete -o nospace -F __gvfs_multiple_uris gvfs-less
-complete -o nospace -F __gvfs_multiple_uris gvfs-copy
-complete -o nospace -F __gvfs_multiple_uris gvfs-mkdir
-complete -o nospace -F __gvfs_multiple_uris gvfs-monitor-dir
-complete -o nospace -F __gvfs_multiple_uris gvfs-monitor-file
-complete -o nospace -F __gvfs_multiple_uris gvfs-move
-complete -o nospace -F __gvfs_multiple_uris gvfs-open
-complete -o nospace -F __gvfs_multiple_uris gvfs-rm
-complete -o nospace -F __gvfs_multiple_uris gvfs-save
-complete -o nospace -F __gvfs_multiple_uris gvfs-trash
-complete -o nospace -F __gvfs_multiple_uris gvfs-tree
diff --git a/programs/gvfs-cat.c b/programs/gvfs-cat.c
deleted file mode 100644
index bd3969f2..00000000
--- a/programs/gvfs-cat.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <locale.h>
-#include <errno.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-static gchar **locations = NULL;
-
-static GOptionEntry entries[] = {
- {G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &locations, "locations", NULL},
- {NULL}
-};
-
-static void
-cat (GFile * file)
-{
- GInputStream *in;
- char buffer[1024 * 8 + 1];
- char *p;
- gssize res;
- gboolean close_res;
- GError *error;
-
- error = NULL;
- in = (GInputStream *) g_file_read (file, NULL, &error);
- if (in == NULL)
- {
- /* Translators: the first %s is the program name, the second one */
- /* is the URI of the file, the third is the error message. */
- g_printerr (_("%s: %s: error opening file: %s\n"),
- g_get_prgname (), g_file_get_uri (file), error->message);
- g_error_free (error);
- return;
- }
-
- while (1)
- {
- res =
- g_input_stream_read (in, buffer, sizeof (buffer) - 1, NULL, &error);
- if (res > 0)
- {
- ssize_t written;
-
- p = buffer;
- while (res > 0)
- {
- written = write (STDOUT_FILENO, p, res);
-
- if (written == -1 && errno != EINTR)
- {
- /* Translators: the first %s is the program name, the */
- /* second one is the URI of the file. */
- g_printerr (_("%s: %s, error writing to stdout"),
- g_get_prgname (), g_file_get_uri (file));
- goto out;
- }
- res -= written;
- p += written;
- }
- }
- else if (res < 0)
- {
- /* Translators: the first %s is the program name, the second one */
- /* is the URI of the file, the third is the error message. */
- g_printerr (_("%s: %s: error reading: %s\n"),
- g_get_prgname (), g_file_get_uri (file),
- error->message);
- g_error_free (error);
- error = NULL;
- break;
- }
- else if (res == 0)
- break;
- }
-
- out:
-
- close_res = g_input_stream_close (in, NULL, &error);
- if (!close_res)
- {
- /* Translators: the first %s is the program name, the second one */
- /* is the URI of the file, the third is the error message. */
- g_printerr (_("%s: %s:error closing: %s\n"),
- g_get_prgname (), g_file_get_uri (file), error->message);
- g_error_free (error);
- }
-}
-
-int
-main (int argc, char *argv[])
-{
- GError *error = NULL;
- GOptionContext *context = NULL;
- GFile *file;
- gchar *summary;
- int i;
-
- setlocale (LC_ALL, "");
-
- bindtextdomain (GETTEXT_PACKAGE, GVFS_LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- g_type_init ();
-
- /* Translators: this message will appear immediately after the */
- /* usage string - Usage: COMMAND [OPTION]... <THIS_MESSAGE> */
- context =
- g_option_context_new (_("LOCATION... - concatenate LOCATIONS "
- "to standard output."));
-
- /* Translators: this message will appear after the usage string */
- /* and before the list of options. */
- summary = g_strconcat (_("Concatenate files at locations and print to the "
- "standard output. Works just like the traditional "
- "cat utility, but using gvfs location instead "
- "local files: for example you can use something "
- "like smb://server/resource/file.txt as location "
- "to concatenate."),
- "\n\n",
- _("Note: just pipe through cat if you need its "
- "formatting option like -n, -T or other."), NULL);
-
- g_option_context_set_summary (context, summary);
-
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
-
- g_option_context_free (context);
- g_free (summary);
-
- if (error != NULL)
- {
- g_printerr ("Error parsing commandline options: %s\n", error->message);
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- g_error_free(error);
- return 1;
- }
-
- if (!locations)
- {
- /* Translators: the %s is the program name. This error message */
- /* means the user is calling gvfs-cat without any argument. */
- g_printerr (_("%s: missing locations"), g_get_prgname ());
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- return 1;
- }
-
- i = 0;
-
- do
- {
- file = g_file_new_for_commandline_arg (locations[i]);
- cat (file);
- g_object_unref (file);
- }
- while (locations[++i] != NULL);
-
- return 0;
-}
diff --git a/programs/gvfs-copy.c b/programs/gvfs-copy.c
deleted file mode 100644
index ed960da4..00000000
--- a/programs/gvfs-copy.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <locale.h>
-#include <errno.h>
-#include <string.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-static gboolean progress = FALSE;
-static gboolean interactive = FALSE;
-static gboolean no_dereference = FALSE;
-static gboolean backup = FALSE;
-static gboolean preserve = FALSE;
-static gboolean no_target_directory = FALSE;
-
-static GOptionEntry entries[] =
-{
- { "no-target-directory", 'T', 0, G_OPTION_ARG_NONE, &no_target_directory, "no target directory", NULL },
- { "progress", 'p', 0, G_OPTION_ARG_NONE, &progress, "show progress", NULL },
- { "interactive", 'i', 0, G_OPTION_ARG_NONE, &interactive, "prompt before overwrite", NULL },
- { "preserve", 'p', 0, G_OPTION_ARG_NONE, &preserve, "preserve all attributes", NULL },
- { "backup", 'b', 0, G_OPTION_ARG_NONE, &backup, "backup existing destination files", NULL },
- { "no-dereference", 'P', 0, G_OPTION_ARG_NONE, &no_dereference, "never follow symbolic links", NULL },
- { NULL }
-};
-
-static gboolean
-is_dir (GFile *file)
-{
- GFileInfo *info;
- gboolean res;
-
- info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE, 0, NULL, NULL);
- res = info && g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY;
- if (info)
- g_object_unref (info);
- return res;
-}
-
-static void
-show_progress (goffset current_num_bytes,
- goffset total_num_bytes,
- gpointer user_data)
-{
- g_print ("progress %"G_GINT64_FORMAT"/%"G_GINT64_FORMAT"\n",
- current_num_bytes, total_num_bytes);
-}
-
-
-int
-main (int argc, char *argv[])
-{
- GError *error;
- GOptionContext *context;
- GFile *source, *dest, *target;
- gboolean dest_is_dir;
- char *basename;
- int i;
- GFileCopyFlags flags;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- output files at <location>");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (error != NULL)
- {
- g_printerr ("Error parsing commandline options: %s\n", error->message);
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- g_error_free(error);
- return 1;
- }
-
- if (argc <= 2)
- {
- g_printerr ("Missing operand\n");
- return 1;
- }
-
- dest = g_file_new_for_commandline_arg (argv[argc-1]);
-
- if (no_target_directory && argc > 3)
- {
- g_printerr ("Too many arguments\n");
- g_object_unref (dest);
- return 1;
- }
-
- dest_is_dir = is_dir (dest);
-
- if (!dest_is_dir && argc > 3)
- {
- g_printerr ("Target %s is not a directory\n", argv[argc-1]);
- g_object_unref (dest);
- return 1;
- }
-
- for (i = 1; i < argc - 1; i++)
- {
- source = g_file_new_for_commandline_arg (argv[i]);
-
- if (dest_is_dir && !no_target_directory)
- {
- basename = g_file_get_basename (source);
- target = g_file_get_child (dest, basename);
- g_free (basename);
- }
- else
- target = g_object_ref (dest);
-
- flags = 0;
- if (backup)
- flags |= G_FILE_COPY_BACKUP;
- if (!interactive)
- flags |= G_FILE_COPY_OVERWRITE;
- if (no_dereference)
- flags |= G_FILE_COPY_NOFOLLOW_SYMLINKS;
- if (preserve)
- flags |= G_FILE_COPY_ALL_METADATA;
-
-
- error = NULL;
- if (!g_file_copy (source, target, flags, NULL, progress?show_progress:NULL, NULL, &error))
- {
- if (interactive && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS))
- {
- char line[16];
-
- g_error_free (error);
- error = NULL;
-
- basename = g_file_get_basename (target);
- g_print ("overwrite %s?", basename);
- g_free (basename);
-
- if (fgets(line, sizeof (line), stdin) &&
- line[0] == 'y')
- {
- flags |= G_FILE_COPY_OVERWRITE;
- if (!g_file_copy (source, target, flags, NULL, NULL, NULL, &error))
- goto copy_failed;
- }
- }
- else
- {
- copy_failed:
- g_printerr ("Error copying file %s: %s\n", argv[i], error->message);
- g_error_free (error);
- }
- }
-
- g_object_unref (source);
- g_object_unref (target);
- }
-
- g_object_unref (dest);
-
- return 0;
-}
diff --git a/programs/gvfs-info.c b/programs/gvfs-info.c
deleted file mode 100644
index 355f7d03..00000000
--- a/programs/gvfs-info.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <locale.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-static char *attributes = NULL;
-static gboolean nofollow_symlinks = FALSE;
-static gboolean filesystem = FALSE;
-static gboolean writable = FALSE;
-
-static GOptionEntry entries[] =
-{
- { "query-writable", 'w', 0, G_OPTION_ARG_NONE, &writable, "List writable attributes", NULL },
- { "filesystem", 'f', 0, G_OPTION_ARG_NONE, &filesystem, "Get filesystem info", NULL },
- { "attributes", 'a', 0, G_OPTION_ARG_STRING, &attributes, "The attributes to get", NULL },
- { "nofollow-symlinks", 'n', 0, G_OPTION_ARG_NONE, &nofollow_symlinks, "Don't follow symlinks", NULL },
- { NULL }
-};
-
-static const char *
-type_to_string (GFileType type)
-{
- switch (type)
- {
- default:
- return "invalid type";
-
- case G_FILE_TYPE_UNKNOWN:
- return "unknown";
-
- case G_FILE_TYPE_REGULAR:
- return "regular";
-
- case G_FILE_TYPE_DIRECTORY:
- return "directory";
-
- case G_FILE_TYPE_SYMBOLIC_LINK:
- return "symlink";
-
- case G_FILE_TYPE_SPECIAL:
- return "special";
-
- case G_FILE_TYPE_SHORTCUT:
- return "shortcut";
-
- case G_FILE_TYPE_MOUNTABLE:
- return "mountable";
- }
-}
-
-static char *
-escape_string (const char *in)
-{
- GString *str;
- static char *hex_digits = "0123456789abcdef";
- char c;
-
-
- str = g_string_new ("");
-
- while ((c = *in++) != 0)
- {
- if (c >= 32 && c <= 126 && c != '\\')
- g_string_append_c (str, c);
- else
- {
- g_string_append (str, "\\x");
- g_string_append_c (str, hex_digits[(c >> 8) & 0xf]);
- g_string_append_c (str, hex_digits[c & 0xf]);
- }
- }
-
- return g_string_free (str, FALSE);
-}
-
-static void
-show_attributes (GFileInfo *info)
-{
- char **attributes;
- char *s;
- int i;
-
- attributes = g_file_info_list_attributes (info, NULL);
-
- g_print ("attributes:\n");
- for (i = 0; attributes[i] != NULL; i++)
- {
- s = g_file_info_get_attribute_as_string (info, attributes[i]);
- g_print (" %s: %s\n", attributes[i], s);
- g_free (s);
- }
- g_strfreev (attributes);
-}
-
-static void
-show_info (GFileInfo *info)
-{
- const char *name, *type;
- char *escaped;
- goffset size;
-
- name = g_file_info_get_display_name (info);
- if (name)
- g_print ("display name: %s\n", name);
-
- name = g_file_info_get_edit_name (info);
- if (name)
- g_print ("edit name: %s\n", name);
-
- name = g_file_info_get_name (info);
- if (name)
- {
- escaped = escape_string (name);
- g_print ("name: %s\n", escaped);
- g_free (escaped);
- }
-
- type = type_to_string (g_file_info_get_file_type (info));
- g_print ("type: %s\n", type);
-
- size = g_file_info_get_size (info);
- g_print ("size: %"G_GUINT64_FORMAT"\n", (guint64)size);
-
- if (g_file_info_get_is_hidden (info))
- g_print ("hidden\n");
-
- show_attributes (info);
-}
-
-static void
-query_info (GFile *file)
-{
- GFileQueryInfoFlags flags;
- GFileInfo *info;
- GError *error;
-
- if (file == NULL)
- return;
-
- if (attributes == NULL)
- attributes = "*";
-
- flags = 0;
- if (nofollow_symlinks)
- flags |= G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS;
-
- error = NULL;
- if (filesystem)
- info = g_file_query_filesystem_info (file, attributes, NULL, &error);
- else
- info = g_file_query_info (file, attributes, flags, NULL, &error);
-
- if (info == NULL)
- {
- g_printerr ("Error getting info: %s\n", error->message);
- g_error_free (error);
- return;
- }
-
- if (filesystem)
- show_attributes (info);
- else
- show_info (info);
-
- g_object_unref (info);
-}
-
-static char *
-attribute_type_to_string (GFileAttributeType type)
-{
- switch (type)
- {
- case G_FILE_ATTRIBUTE_TYPE_INVALID:
- return "invalid";
- case G_FILE_ATTRIBUTE_TYPE_STRING:
- return "string";
- case G_FILE_ATTRIBUTE_TYPE_BYTE_STRING:
- return "bytestring";
- case G_FILE_ATTRIBUTE_TYPE_BOOLEAN:
- return "boolean";
- case G_FILE_ATTRIBUTE_TYPE_UINT32:
- return "uint32";
- case G_FILE_ATTRIBUTE_TYPE_INT32:
- return "int32";
- case G_FILE_ATTRIBUTE_TYPE_UINT64:
- return "uint64";
- case G_FILE_ATTRIBUTE_TYPE_INT64:
- return "int64";
- case G_FILE_ATTRIBUTE_TYPE_OBJECT:
- return "object";
- default:
- return "uknown type";
- }
-}
-
-static char *
-attribute_flags_to_string (GFileAttributeInfoFlags flags)
-{
- GString *s;
- int i;
- gboolean first;
- struct {
- guint32 mask;
- char *descr;
- } flag_descr[] = {
- {
- G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE,
- "Copy with file"
- },
- {
- G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED,
- "Keep with file when moved"
- }
- };
-
- first = TRUE;
-
- s = g_string_new ("");
- for (i = 0; i < G_N_ELEMENTS (flag_descr); i++)
- {
- if (flags & flag_descr[i].mask)
- {
- if (!first)
- g_string_append (s, ", ");
- g_string_append (s, flag_descr[i].descr);
- first = FALSE;
- }
- }
-
- return g_string_free (s, FALSE);
-}
-
-static void
-get_writable_info (GFile *file)
-{
- GFileAttributeInfoList *list;
- GError *error;
- int i;
- char *flags;
-
- if (file == NULL)
- return;
-
- error = NULL;
-
- list = g_file_query_settable_attributes (file, NULL, &error);
- if (list == NULL)
- {
- g_printerr ("Error getting writable attributes: %s\n", error->message);
- g_error_free (error);
- return;
- }
-
- g_print ("Settable attributes:\n");
- for (i = 0; i < list->n_infos; i++)
- {
- flags = attribute_flags_to_string (list->infos[i].flags);
- g_print (" %s (%s%s%s)\n",
- list->infos[i].name,
- attribute_type_to_string (list->infos[i].type),
- (*flags != 0)?", ":"", flags);
- g_free (flags);
- }
-
- g_file_attribute_info_list_unref (list);
-
- list = g_file_query_writable_namespaces (file, NULL, &error);
- if (list == NULL)
- {
- g_printerr ("Error getting writable namespaces: %s\n", error->message);
- g_error_free (error);
- return;
- }
-
- if (list->n_infos > 0)
- {
- g_print ("Writable attribute namespaces:\n");
- for (i = 0; i < list->n_infos; i++)
- {
- flags = attribute_flags_to_string (list->infos[i].flags);
- g_print (" %s (%s%s%s)\n",
- list->infos[i].name,
- attribute_type_to_string (list->infos[i].type),
- (*flags != 0)?", ":"", flags);
- }
- }
-
- g_file_attribute_info_list_unref (list);
-}
-
-
-int
-main (int argc, char *argv[])
-{
- GError *error;
- GOptionContext *context;
- GFile *file;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- show info for <location>");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (error != NULL)
- {
- g_printerr ("Error parsing commandline options: %s\n", error->message);
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- g_error_free(error);
- return 1;
- }
-
- if (argc > 1)
- {
- int i;
-
- for (i = 1; i < argc; i++) {
- file = g_file_new_for_commandline_arg (argv[i]);
- if (writable)
- get_writable_info (file);
- else
- query_info (file);
- g_object_unref (file);
- }
- }
-
- return 0;
-}
diff --git a/programs/gvfs-less b/programs/gvfs-less
deleted file mode 100755
index ba0c6768..00000000
--- a/programs/gvfs-less
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2006-2007 Red Hat, Inc.
-#
-# This library is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This library 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
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
-# USA.
-#
-# Author: David Zeuthen <davidz@redhat.com>
-
-LESSOPEN="|gvfs-cat %s"; export LESSOPEN
-exec less "$@"
diff --git a/programs/gvfs-ls.c b/programs/gvfs-ls.c
deleted file mode 100644
index ecc136d3..00000000
--- a/programs/gvfs-ls.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <locale.h>
-#include <string.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-static char *attributes = NULL;
-static gboolean show_hidden = FALSE;
-static gboolean show_long = FALSE;
-static char *show_completions = NULL;
-
-static GOptionEntry entries[] =
-{
- { "attributes", 'a', 0, G_OPTION_ARG_STRING, &attributes, "The attributes to get", NULL },
- { "hidden", 'h', 0, G_OPTION_ARG_NONE, &show_hidden, "Show hidden files", NULL },
- { "long", 'l', 0, G_OPTION_ARG_NONE, &show_long, "Use a long listing format", NULL },
- { "show-completions", 'c', 0, G_OPTION_ARG_STRING, &show_completions, "Show completions", NULL},
- { NULL }
-};
-
-static const char *
-type_to_string (GFileType type)
-{
- switch (type)
- {
- default:
- return "invalid type";
-
- case G_FILE_TYPE_UNKNOWN:
- return "unknown";
-
- case G_FILE_TYPE_REGULAR:
- return "regular";
-
- case G_FILE_TYPE_DIRECTORY:
- return "directory";
-
- case G_FILE_TYPE_SYMBOLIC_LINK:
- return "symlink";
-
- case G_FILE_TYPE_SPECIAL:
- return "special";
-
- case G_FILE_TYPE_SHORTCUT:
- return "shortcut";
-
- case G_FILE_TYPE_MOUNTABLE:
- return "mountable";
- }
-}
-
-static void
-show_info (GFileInfo *info)
-{
- const char *name, *type;
- goffset size;
- char **attributes;
- int i;
- gboolean first_attr;
-
- if ((g_file_info_get_is_hidden (info)) && !show_hidden)
- return;
-
- name = g_file_info_get_name (info);
- if (name == NULL)
- name = "";
-
- size = g_file_info_get_size (info);
- type = type_to_string (g_file_info_get_file_type (info));
- if (show_long)
- g_print ("%s\t%"G_GUINT64_FORMAT"\t(%s)", name, (guint64)size, type);
- else
- g_print ("%s", name);
-
- first_attr = TRUE;
- attributes = g_file_info_list_attributes (info, NULL);
- for (i = 0 ; attributes[i] != NULL; i++)
- {
- char *val_as_string;
-
- if (!show_long ||
- strcmp (attributes[i], G_FILE_ATTRIBUTE_STANDARD_NAME) == 0 ||
- strcmp (attributes[i], G_FILE_ATTRIBUTE_STANDARD_SIZE) == 0 ||
- strcmp (attributes[i], G_FILE_ATTRIBUTE_STANDARD_TYPE) == 0 ||
- strcmp (attributes[i], G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN) == 0)
- continue;
-
- if (first_attr)
- {
- g_print ("\t");
- first_attr = FALSE;
- }
- else
- g_print (" ");
- val_as_string = g_file_info_get_attribute_as_string (info, attributes[i]);
- g_print ("%s=%s", attributes[i], val_as_string);
- g_free (val_as_string);
- }
-
- g_strfreev (attributes);
-
- g_print ("\n");
-}
-
-static void
-list (GFile *file)
-{
- GFileEnumerator *enumerator;
- GFileInfo *info;
- GError *error;
-
- if (file == NULL)
- return;
-
- error = NULL;
- enumerator = g_file_enumerate_children (file, attributes, 0, NULL, &error);
- if (enumerator == NULL)
- {
- g_printerr ("Error: %s\n", error->message);
- g_error_free (error);
- error = NULL;
- return;
- }
-
- while ((info = g_file_enumerator_next_file (enumerator, NULL, &error)) != NULL)
- {
- show_info (info);
-
- g_object_unref (info);
- }
-
- if (error)
- {
- g_printerr ("Error: %s\n", error->message);
- g_error_free (error);
- error = NULL;
- }
-
- if (!g_file_enumerator_close (enumerator, NULL, &error))
- {
- g_printerr ("Error closing enumerator: %s\n", error->message);
- g_error_free (error);
- error = NULL;
- }
-}
-
-static void
-print_mounts (const char *prefix)
-{
- GList *l;
- GList *mounts;
- GVolumeMonitor *volume_monitor;
-
- volume_monitor = g_volume_monitor_get ();
-
- mounts = g_volume_monitor_get_mounts (volume_monitor);
- if (mounts != NULL)
- {
- for (l = mounts; l != NULL; l = l->next)
- {
- GMount *mount = l->data;
- GFile *mount_root;
- char *uri;
-
- mount_root = g_mount_get_root (mount);
- uri = g_file_get_uri (mount_root);
- if (prefix == NULL ||
- g_str_has_prefix (uri, prefix))
- g_print ("%s\n", uri);
- g_free (uri);
- g_object_unref (mount_root);
- g_object_unref (mount);
- }
- g_list_free (mounts);
- }
- g_object_unref (volume_monitor);
-
- if (prefix == NULL || g_str_has_prefix ("file:///", prefix))
- g_print ("file:///\n");
-}
-
-static char*
-shell_quote (const gchar *unquoted_string)
-{
- const gchar *p;
- GString *dest;
-
- dest = g_string_new ("");
-
- p = unquoted_string;
-
- while (*p)
- {
- if (*p == ' ')
- g_string_append (dest, "\\ ");
- else if (*p == '\n')
- g_string_append (dest, "^J");
- else if (*p == '\\')
- g_string_append (dest, "\\\\");
- else if (*p == '\'')
- g_string_append (dest, "\\'");
- else if (*p == '"')
- g_string_append (dest, "\\\"");
- else
- g_string_append_c (dest, *p);
-
- ++p;
- }
-
- return g_string_free (dest, FALSE);
-}
-
-static void
-show_completed_file (GFile *hit,
- gboolean is_dir,
- const char *arg)
-{
- char *path, *cwd, *display, *t;
- GFile *cwd_f;
- GFile *home;
-
- if (g_file_is_native (hit))
- {
- cwd = g_get_current_dir ();
- cwd_f = g_file_new_for_path (cwd);
- g_free (cwd);
-
- home = g_file_new_for_path (g_get_home_dir ());
-
- if ((g_file_has_prefix (hit, home) ||
- g_file_equal (hit, home)) &&
- arg[0] == '~')
- {
- t = g_file_get_relative_path (home, hit);
- path = g_strconcat ("~", (t != NULL) ? "/": "", t, NULL);
- g_free (t);
- }
- else if (g_file_has_prefix (hit, cwd_f) &&
- !g_path_is_absolute (arg))
- path = g_file_get_relative_path (cwd_f, hit);
- else
- path = g_file_get_path (hit);
-
- g_object_unref (cwd_f);
- g_object_unref (home);
-
- display = shell_quote (path);
- g_free (path);
- }
- else
- display = g_file_get_uri (hit);
-
- g_print ("%s%s\n", display, (is_dir)?"/":"");
- g_free (display);
-}
-
-static void
-print_completions (const char *arg)
-{
- GFile *f;
- GFile *parent;
- char *basename;
- char *unescaped, *t;
-
- unescaped = g_shell_unquote (arg, NULL);
- if (unescaped == NULL)
- unescaped = g_strdup (arg);
-
- if (*unescaped == '~')
- {
- t = unescaped;
- unescaped = g_strconcat (g_get_home_dir(), t+1, NULL);
- g_free (t);
- }
-
- f = g_file_new_for_commandline_arg (unescaped);
-
- if (g_str_has_suffix (arg, "/") || *arg == 0)
- {
- parent = g_object_ref (f);
- basename = g_strdup ("");
- }
- else
- {
- parent = g_file_get_parent (f);
- basename = g_file_get_basename (f);
- }
-
- if (parent == NULL ||
- strchr (arg, '/') == NULL ||
- !g_file_query_exists (parent, NULL))
- {
- GMount *mount;
- mount = g_file_find_enclosing_mount (f, NULL, NULL);
- if (mount == NULL)
- print_mounts (unescaped);
- else
- g_object_unref (mount);
- }
-
- if (parent != NULL)
- {
- GFileEnumerator *enumerator;
- enumerator = g_file_enumerate_children (parent,
- G_FILE_ATTRIBUTE_STANDARD_NAME ","
- G_FILE_ATTRIBUTE_STANDARD_TYPE,
- 0,
- NULL,
- NULL);
- if (enumerator != NULL)
- {
- GFileInfo *info;
-
- while ((info = g_file_enumerator_next_file (enumerator, NULL, NULL)) != NULL)
- {
- const char *name;
- GFileType type;
-
- name = g_file_info_get_name (info);
- type = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_STANDARD_TYPE);
- if (name != NULL && g_str_has_prefix (name, basename))
- {
- GFile *entry;
-
- entry = g_file_get_child (parent, name);
- show_completed_file (entry, type == G_FILE_TYPE_DIRECTORY, arg);
- g_object_unref (entry);
- }
- g_object_unref (info);
- }
- g_file_enumerator_close (enumerator, NULL, NULL);
- }
- g_object_unref (parent);
- }
-
- g_object_unref (f);
- g_free (basename);
- g_free (unescaped);
-}
-
-int
-main (int argc, char *argv[])
-{
- GError *error;
- GOptionContext *context;
- GFile *file;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- list files at <location>");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (error != NULL)
- {
- g_printerr ("Error parsing commandline options: %s\n", error->message);
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- g_error_free(error);
- return 1;
- }
-
- if (attributes != NULL)
- {
- /* asking for attributes implies -l; otherwise it won't get shown */
- show_long = TRUE;
- }
-
- attributes = g_strconcat (G_FILE_ATTRIBUTE_STANDARD_NAME ","
- G_FILE_ATTRIBUTE_STANDARD_TYPE ","
- G_FILE_ATTRIBUTE_STANDARD_SIZE ","
- G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN,
- attributes != NULL ? "," : "",
- attributes,
- NULL);
-
- if (show_completions != NULL)
- {
- print_completions (show_completions);
- return 0;
- }
-
- if (argc > 1)
- {
- int i;
-
- for (i = 1; i < argc; i++) {
- file = g_file_new_for_commandline_arg (argv[i]);
- list (file);
- g_object_unref (file);
- }
- }
- else
- {
- char *cwd;
-
- cwd = g_get_current_dir ();
- file = g_file_new_for_path (cwd);
- g_free (cwd);
- list (file);
- g_object_unref (file);
- }
-
- g_free (attributes);
-
- return 0;
-}
diff --git a/programs/gvfs-mkdir.c b/programs/gvfs-mkdir.c
deleted file mode 100644
index 483ebd87..00000000
--- a/programs/gvfs-mkdir.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <locale.h>
-#include <gio/gio.h>
-
-static gboolean parent = FALSE;
-static GOptionEntry entries[] =
-{
- { "parent", 'p', 0, G_OPTION_ARG_NONE, &parent, "create parent directories", NULL },
- { NULL }
-};
-
-
-int
-main (int argc, char *argv[])
-{
- GError *error;
- GOptionContext *context;
- GFile *file;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- delete files");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (error != NULL)
- {
- g_printerr ("Error parsing commandline options: %s\n", error->message);
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- g_error_free(error);
- return 1;
- }
-
- if (argc > 1)
- {
- int i;
-
- for (i = 1; i < argc; i++)
- {
- file = g_file_new_for_commandline_arg (argv[i]);
- error = NULL;
- if (parent)
- {
- if (!g_file_make_directory_with_parents (file, NULL, &error))
- {
- g_print ("Error creating directory: %s\n", error->message);
- g_error_free (error);
- }
- }
- else
- {
- if (!g_file_make_directory (file, NULL, &error))
- {
- g_print ("Error creating directory: %s\n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- }
- }
- }
-
- return 0;
-}
diff --git a/programs/gvfs-monitor-dir.c b/programs/gvfs-monitor-dir.c
deleted file mode 100644
index bf2f6288..00000000
--- a/programs/gvfs-monitor-dir.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <locale.h>
-#include <errno.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-
-static GMainLoop *main_loop;
-
-static GOptionEntry entries[] = {
- { NULL }
-};
-
-static gboolean
-dir_monitor_callback (GFileMonitor* monitor,
- GFile* child,
- GFile* other_file,
- GFileMonitorEvent eflags)
-{
-
- char *name = g_file_get_parse_name (child);
-
- g_print ("Directory Monitor Event:\n");
- g_print ("Child = %s\n", name);
- g_free (name);
-
- switch (eflags)
- {
- case G_FILE_MONITOR_EVENT_CHANGED:
- g_print ("Event = CHANGED\n");
- break;
- case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
- g_print ("Event = CHANGES_DONE_HINT\n");
- break;
- case G_FILE_MONITOR_EVENT_DELETED:
- g_print ("Event = DELETED\n");
- break;
- case G_FILE_MONITOR_EVENT_CREATED:
- g_print ("Event = CREATED\n");
- break;
- case G_FILE_MONITOR_EVENT_PRE_UNMOUNT:
- g_print ("Event = PRE_UNMOUNT\n");
- break;
- case G_FILE_MONITOR_EVENT_UNMOUNTED:
- g_print ("Event = UNMOUNTED\n");
- break;
- case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED:
- g_print ("Event = ATTRIB CHANGED\n");
- break;
- }
-
- return TRUE;
-}
-
-int
-main (int argc, char *argv[])
-{
- GFileMonitor* dmonitor;
- GError *error;
- GOptionContext *context;
- GFile *file;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- monitor directory <location>");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (argc > 1)
- {
- file = g_file_new_for_commandline_arg (argv[1]);
- dmonitor = g_file_monitor_directory (file, G_FILE_MONITOR_WATCH_MOUNTS, NULL, NULL);
- if (dmonitor != NULL)
- g_signal_connect (dmonitor, "changed", (GCallback)dir_monitor_callback, NULL);
- else
- {
- g_print ("Monitoring not supported for %s\n", argv[1]);
- return 1;
- }
- }
-
- main_loop = g_main_loop_new (NULL, FALSE);
-
- g_main_loop_run (main_loop);
-
- return 0;
-}
diff --git a/programs/gvfs-monitor-file.c b/programs/gvfs-monitor-file.c
deleted file mode 100644
index 842ed938..00000000
--- a/programs/gvfs-monitor-file.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <locale.h>
-#include <errno.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-
-static GMainLoop *main_loop;
-
-static GOptionEntry entries[] = {
- { NULL }
-};
-
-static gboolean
-file_monitor_callback (GFileMonitor* monitor,
- GFile* child,
- GFile* other_file,
- GFileMonitorEvent eflags)
-{
- g_print ("File Monitor Event:\n");
- g_print ("File = %s\n", g_file_get_parse_name (child));
- switch (eflags)
- {
- case G_FILE_MONITOR_EVENT_CHANGED:
- g_print ("Event = CHANGED\n");
- break;
- case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
- g_print ("Event = CHANGES_DONE_HINT\n");
- break;
- case G_FILE_MONITOR_EVENT_DELETED:
- g_print ("Event = DELETED\n");
- break;
- case G_FILE_MONITOR_EVENT_CREATED:
- g_print ("Event = CREATED\n");
- break;
- case G_FILE_MONITOR_EVENT_UNMOUNTED:
- g_print ("Event = UNMOUNTED\n");
- break;
- case G_FILE_MONITOR_EVENT_PRE_UNMOUNT:
- g_print ("Event = PRE_UNMOUNT\n");
- break;
- case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED:
- g_print ("Event = ATTRIB CHANGED\n");
- break;
- }
-
- return TRUE;
-}
-
-int
-main (int argc, char *argv[])
-{
- GFileMonitor* fmonitor;
- GError *error;
- GOptionContext *context;
- GFile *file;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- monitor file <location>");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (argc > 1)
- {
- file = g_file_new_for_commandline_arg (argv[1]);
- fmonitor = g_file_monitor_file (file, G_FILE_MONITOR_WATCH_MOUNTS, NULL, NULL);
- g_signal_connect (fmonitor, "changed", (GCallback)file_monitor_callback, NULL);
- }
-
- main_loop = g_main_loop_new (NULL, FALSE);
-
- g_main_loop_run (main_loop);
-
- return 0;
-}
diff --git a/programs/gvfs-mount.c b/programs/gvfs-mount.c
deleted file mode 100644
index b2659a29..00000000
--- a/programs/gvfs-mount.c
+++ /dev/null
@@ -1,613 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <string.h>
-
-#include <glib.h>
-#include <locale.h>
-#include <gio/gio.h>
-
-#ifdef HAVE_TERMIOS_H
-#include <termios.h>
-#endif
-
-#define STDIN_FILENO 0
-
-static int outstanding_mounts = 0;
-static GMainLoop *main_loop;
-
-
-static gboolean mount_mountable = FALSE;
-static gboolean mount_unmount = FALSE;
-static gboolean mount_list = FALSE;
-static gboolean mount_list_info = FALSE;
-static const char *unmount_scheme = NULL;
-
-static const GOptionEntry entries[] =
-{
- { "mountable", 'm', 0, G_OPTION_ARG_NONE, &mount_mountable, "Mount as mountable", NULL },
- { "unmount", 'u', 0, G_OPTION_ARG_NONE, &mount_unmount, "Unmount", NULL},
- { "unmount-scheme", 's', 0, G_OPTION_ARG_STRING, &unmount_scheme, "Unmount all mounts with the given scheme", NULL},
- { "list", 'l', 0, G_OPTION_ARG_NONE, &mount_list, "List", NULL},
- { "list-info", 'i', 0, G_OPTION_ARG_NONE, &mount_list_info, "List extra information", NULL},
- { NULL }
-};
-
-static char *
-prompt_for (const char *prompt, const char *default_value, gboolean echo)
-{
-#ifdef HAVE_TERMIOS_H
- struct termios term_attr;
- int old_flags;
- gboolean restore_flags;
-#endif
- char data[256];
- int len;
-
- if (default_value && *default_value != 0)
- g_print ("%s [%s]: ", prompt, default_value);
- else
- g_print ("%s: ", prompt);
-
- data[0] = 0;
-
-#ifdef HAVE_TERMIOS_H
- restore_flags = FALSE;
- if (!echo && tcgetattr (STDIN_FILENO, &term_attr) == 0)
- {
- old_flags = term_attr.c_lflag;
- term_attr.c_lflag &= ~ECHO;
- restore_flags = TRUE;
-
- if (tcsetattr (STDIN_FILENO, TCSAFLUSH, &term_attr) != 0)
- g_print ("Warning! Password will be echoed");
- }
-
-#endif
-
- fgets(data, sizeof (data), stdin);
-
-#ifdef HAVE_TERMIOS_H
- if (restore_flags)
- {
- term_attr.c_lflag = old_flags;
- tcsetattr (STDIN_FILENO, TCSAFLUSH, &term_attr);
- }
-#endif
-
- len = strlen (data);
- if (len > 0 && data[len-1] == '\n')
- data[len-1] = 0;
-
- if (!echo)
- g_print ("\n");
-
- if (*data == 0 && default_value)
- return g_strdup (default_value);
- return g_strdup (data);
-}
-
-static void
-ask_password_cb (GMountOperation *op,
- const char *message,
- const char *default_user,
- const char *default_domain,
- GAskPasswordFlags flags)
-{
- char *s;
- g_print ("%s\n", message);
-
- if (flags & G_ASK_PASSWORD_NEED_USERNAME)
- {
- s = prompt_for ("User", default_user, TRUE);
- g_mount_operation_set_username (op, s);
- g_free (s);
- }
-
- if (flags & G_ASK_PASSWORD_NEED_DOMAIN)
- {
- s = prompt_for ("Domain", default_domain, TRUE);
- g_mount_operation_set_domain (op, s);
- g_free (s);
- }
-
- if (flags & G_ASK_PASSWORD_NEED_PASSWORD)
- {
- s = prompt_for ("Password", NULL, FALSE);
- g_mount_operation_set_password (op, s);
- g_free (s);
- }
-
- g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED);
-}
-
-static void
-mount_mountable_done_cb (GObject *object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GFile *target;
- GError *error = NULL;
-
- target = g_file_mount_mountable_finish (G_FILE (object), res, &error);
-
- if (target == NULL)
- g_print ("Error mounting location: %s\n", error->message);
- else
- g_object_unref (target);
-
- outstanding_mounts--;
-
- if (outstanding_mounts == 0)
- g_main_loop_quit (main_loop);
-}
-
-static void
-mount_done_cb (GObject *object,
- GAsyncResult *res,
- gpointer user_data)
-{
- gboolean succeeded;
- GError *error = NULL;
-
- succeeded = g_file_mount_enclosing_volume_finish (G_FILE (object), res, &error);
-
- if (!succeeded)
- g_print ("Error mounting location: %s\n", error->message);
-
- outstanding_mounts--;
-
- if (outstanding_mounts == 0)
- g_main_loop_quit (main_loop);
-}
-
-static GMountOperation *
-new_mount_op (void)
-{
- GMountOperation *op;
-
- op = g_mount_operation_new ();
-
- g_signal_connect (op, "ask_password", (GCallback)ask_password_cb, NULL);
-
- return op;
-}
-
-
-static void
-mount (GFile *file)
-{
- GMountOperation *op;
-
- if (file == NULL)
- return;
-
- op = new_mount_op ();
-
- if (mount_mountable)
- g_file_mount_mountable (file, 0, op, NULL, mount_mountable_done_cb, op);
- else
- g_file_mount_enclosing_volume (file, 0, op, NULL, mount_done_cb, op);
-
- outstanding_mounts++;
-}
-
-static void
-unmount_done_cb (GObject *object,
- GAsyncResult *res,
- gpointer user_data)
-{
- gboolean succeeded;
- GError *error = NULL;
-
- succeeded = g_mount_unmount_finish (G_MOUNT (object), res, &error);
-
- g_object_unref (G_MOUNT (object));
-
- if (!succeeded)
- g_print ("Error unmounting mount: %s\n", error->message);
-
- outstanding_mounts--;
-
- if (outstanding_mounts == 0)
- g_main_loop_quit (main_loop);
-}
-
-static void
-unmount (GFile *file)
-{
- GMount *mount;
- GError *error = NULL;
-
- if (file == NULL)
- return;
-
- mount = g_file_find_enclosing_mount (file, NULL, &error);
- if (mount == NULL)
- {
- g_print ("Error finding enclosing mount: %s\n", error->message);
- return;
- }
-
- g_mount_unmount (mount, 0, NULL, unmount_done_cb, NULL);
-
- outstanding_mounts++;
-}
-
-/* =============== list mounts ================== */
-
-static gboolean
-iterate_gmain_timeout_function (gpointer data)
-{
- g_main_loop_quit (main_loop);
- return FALSE;
-}
-
-static void
-iterate_gmain(void)
-{
- g_timeout_add (500, iterate_gmain_timeout_function, NULL);
- g_main_loop_run (main_loop);
-}
-
-static void
-show_themed_icon_names (GThemedIcon *icon, int indent)
-{
- char **names;
- char **iter;
-
- g_print ("%*sthemed icons:", indent, " ");
-
- names = NULL;
-
- g_object_get (icon, "names", &names, NULL);
-
- for (iter = names; *iter; iter++)
- g_print (" [%s]", *iter);
-
- g_print ("\n");
- g_strfreev (names);
-}
-
-static void
-list_mounts (GList *mounts,
- int indent,
- gboolean only_with_no_volume)
-{
- GList *l;
- int c;
- GMount *mount;
- GVolume *volume;
- char *name, *uuid, *uri;
- GFile *root;
- GIcon *icon;
- char **x_content_types;
-
- for (c = 0, l = mounts; l != NULL; l = l->next, c++)
- {
- mount = (GMount *) l->data;
-
- if (only_with_no_volume)
- {
- volume = g_mount_get_volume (mount);
- if (volume != NULL)
- {
- g_object_unref (volume);
- continue;
- }
- }
-
- name = g_mount_get_name (mount);
- root = g_mount_get_root (mount);
- uri = g_file_get_uri (root);
-
- g_print ("%*sMount(%d): %s -> %s\n", indent, "", c, name, uri);
-
- if (mount_list_info)
- {
- uuid = g_mount_get_uuid (mount);
- if (uuid)
- g_print ("%*suuid=%s\n", indent + 2, "", uuid);
-
- icon = g_mount_get_icon (mount);
- if (icon)
- {
- if (G_IS_THEMED_ICON (icon))
- show_themed_icon_names (G_THEMED_ICON (icon), indent + 2);
-
- g_object_unref (icon);
- }
-
- x_content_types = g_mount_guess_content_type_sync (mount, FALSE, NULL, NULL);
- if (x_content_types != NULL && g_strv_length (x_content_types) > 0)
- {
- int n;
- g_print ("%*sx_content_types:", indent + 2, "");
- for (n = 0; x_content_types[n] != NULL; n++)
- g_print (" %s", x_content_types[n]);
- g_print ("\n");
- }
- g_strfreev (x_content_types);
-
- g_print ("%*scan_unmount=%d\n", indent + 2, "", g_mount_can_unmount (mount));
- g_print ("%*scan_eject=%d\n", indent + 2, "", g_mount_can_eject (mount));
- g_free (uuid);
- }
-
- g_object_unref (root);
- g_free (name);
- g_free (uri);
- }
-}
-
-static void
-list_volumes (GList *volumes,
- int indent,
- gboolean only_with_no_drive)
-{
- GList *l, *mounts;
- int c, i;
- GMount *mount;
- GVolume *volume;
- GDrive *drive;
- char *name;
- char *uuid;
- GFile *activation_root;
- char **ids;
- GIcon *icon;
-
- for (c = 0, l = volumes; l != NULL; l = l->next, c++)
- {
- volume = (GVolume *) l->data;
-
- if (only_with_no_drive)
- {
- drive = g_volume_get_drive (volume);
- if (drive != NULL)
- {
- g_object_unref (drive);
- continue;
- }
- }
-
- name = g_volume_get_name (volume);
-
- g_print ("%*sVolume(%d): %s\n", indent, "", c, name);
- g_free (name);
-
- if (mount_list_info)
- {
- ids = g_volume_enumerate_identifiers (volume);
- if (ids && ids[0] != NULL)
- {
- g_print ("%*sids:\n", indent+2, "");
- for (i = 0; ids[i] != NULL; i++)
- {
- char *id = g_volume_get_identifier (volume,
- ids[i]);
- g_print ("%*s %s: '%s'\n", indent+2, "", ids[i], id);
- g_free (id);
- }
- }
- g_strfreev (ids);
-
- uuid = g_volume_get_uuid (volume);
- if (uuid)
- g_print ("%*suuid=%s\n", indent + 2, "", uuid);
- activation_root = g_volume_get_activation_root (volume);
- if (activation_root)
- {
- char *uri;
- uri = g_file_get_uri (activation_root);
- g_print ("%*sactivation_root=%s\n", indent + 2, "", uri);
- g_free (uri);
- g_object_unref (activation_root);
- }
- icon = g_volume_get_icon (volume);
- if (icon)
- {
- if (G_IS_THEMED_ICON (icon))
- show_themed_icon_names (G_THEMED_ICON (icon), indent + 2);
-
- g_object_unref (icon);
- }
-
- g_print ("%*scan_mount=%d\n", indent + 2, "", g_volume_can_mount (volume));
- g_print ("%*scan_eject=%d\n", indent + 2, "", g_volume_can_eject (volume));
- g_free (uuid);
- }
-
- mount = g_volume_get_mount (volume);
- if (mount)
- {
- mounts = g_list_prepend (NULL, mount);
- list_mounts (mounts, indent + 2, FALSE);
- g_list_free (mounts);
- g_object_unref (mount);
- }
- }
-}
-
-static void
-list_drives (GList *drives,
- int indent)
-{
- GList *volumes, *l;
- int c, i;
- GDrive *drive;
- char *name;
- char **ids;
- GIcon *icon;
-
- for (c = 0, l = drives; l != NULL; l = l->next, c++)
- {
- drive = (GDrive *) l->data;
- name = g_drive_get_name (drive);
-
- g_print ("%*sDrive(%d): %s\n", indent, "", c, name);
- g_free (name);
-
- if (mount_list_info)
- {
- ids = g_drive_enumerate_identifiers (drive);
- if (ids && ids[0] != NULL)
- {
- g_print ("%*sids:\n", indent+2, "");
- for (i = 0; ids[i] != NULL; i++)
- {
- char *id = g_drive_get_identifier (drive,
- ids[i]);
- g_print ("%*s %s: '%s'\n", indent+2, "", ids[i], id);
- g_free (id);
- }
- }
- g_strfreev (ids);
-
- icon = g_drive_get_icon (drive);
- if (icon)
- {
- if (G_IS_THEMED_ICON (icon))
- show_themed_icon_names (G_THEMED_ICON (icon), indent + 2);
- g_object_unref (icon);
- }
-
- g_print ("%*sis_media_removable=%d\n", indent + 2, "", g_drive_is_media_removable (drive));
- g_print ("%*shas_media=%d\n", indent + 2, "", g_drive_has_media (drive));
- g_print ("%*sis_media_check_automatic=%d\n", indent + 2, "", g_drive_is_media_check_automatic (drive));
- g_print ("%*scan_poll_for_media=%d\n", indent + 2, "", g_drive_can_poll_for_media (drive));
- g_print ("%*scan_eject=%d\n", indent + 2, "", g_drive_can_eject (drive));
- }
-
- volumes = g_drive_get_volumes (drive);
- list_volumes (volumes, indent + 2, FALSE);
- g_list_foreach (volumes, (GFunc)g_object_unref, NULL);
- g_list_free (volumes);
- }
-}
-
-
-static void
-list_monitor_items(void)
-{
- GVolumeMonitor *volume_monitor;
- GList *drives, *volumes, *mounts;
-
- volume_monitor = g_volume_monitor_get();
-
- /* populate gvfs network mounts */
- iterate_gmain();
-
- drives = g_volume_monitor_get_connected_drives (volume_monitor);
- list_drives (drives, 0);
- g_list_foreach (drives, (GFunc)g_object_unref, NULL);
- g_list_free (drives);
-
- volumes = g_volume_monitor_get_volumes (volume_monitor);
- list_volumes (volumes, 0, TRUE);
- g_list_foreach (volumes, (GFunc)g_object_unref, NULL);
- g_list_free (volumes);
-
- mounts = g_volume_monitor_get_mounts (volume_monitor);
- list_mounts (mounts, 0, TRUE);
- g_list_foreach (mounts, (GFunc)g_object_unref, NULL);
- g_list_free (mounts);
-
- g_object_unref (volume_monitor);
-}
-
-static void
-unmount_all_with_scheme (const char *scheme)
-{
- GVolumeMonitor *volume_monitor;
- GList *mounts;
- GList *l;
-
- volume_monitor = g_volume_monitor_get();
-
- /* populate gvfs network mounts */
- iterate_gmain();
-
- mounts = g_volume_monitor_get_mounts (volume_monitor);
- for (l = mounts; l != NULL; l = l->next) {
- GMount *mount = G_MOUNT (l->data);
- GFile *root;
-
- root = g_mount_get_root (mount);
- if (g_file_has_uri_scheme (root, scheme)) {
- unmount (root);
- }
- g_object_unref (root);
- }
- g_list_foreach (mounts, (GFunc)g_object_unref, NULL);
- g_list_free (mounts);
-
- g_object_unref (volume_monitor);
-}
-
-int
-main (int argc, char *argv[])
-{
- GOptionContext *context;
- GError *error;
- GFile *file;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- mount <location>");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- main_loop = g_main_loop_new (NULL, FALSE);
-
- if (mount_list)
- list_monitor_items ();
- else if (unmount_scheme != NULL)
- {
- unmount_all_with_scheme (unmount_scheme);
- }
- else if (argc > 1)
- {
- int i;
-
- for (i = 1; i < argc; i++) {
- file = g_file_new_for_commandline_arg (argv[i]);
- if (mount_unmount)
- unmount (file);
- else
- mount (file);
- g_object_unref (file);
- }
- }
-
- if (outstanding_mounts > 0)
- g_main_loop_run (main_loop);
-
- return 0;
-}
diff --git a/programs/gvfs-move.c b/programs/gvfs-move.c
deleted file mode 100644
index 7fab61ca..00000000
--- a/programs/gvfs-move.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <locale.h>
-#include <errno.h>
-#include <string.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-static gboolean progress = FALSE;
-static gboolean interactive = FALSE;
-static gboolean backup = FALSE;
-static gboolean no_target_directory = FALSE;
-
-static GOptionEntry entries[] =
-{
- { "no-target-directory", 'T', 0, G_OPTION_ARG_NONE, &no_target_directory, "no target directory", NULL },
- { "progress", 'p', 0, G_OPTION_ARG_NONE, &progress, "show progress", NULL },
- { "interactive", 'i', 0, G_OPTION_ARG_NONE, &interactive, "prompt before overwrite", NULL },
- { "backup", 'b', 0, G_OPTION_ARG_NONE, &backup, "backup existing destination files", NULL },
- { NULL }
-};
-
-static gboolean
-is_dir (GFile *file)
-{
- GFileInfo *info;
- gboolean res;
-
- info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE, 0, NULL, NULL);
- res = info && g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY;
- if (info)
- g_object_unref (info);
- return res;
-}
-
-static void
-show_progress (goffset current_num_bytes,
- goffset total_num_bytes,
- gpointer user_data)
-{
- g_print ("progress %"G_GINT64_FORMAT"/%"G_GINT64_FORMAT"\n",
- current_num_bytes, total_num_bytes);
-}
-
-
-int
-main (int argc, char *argv[])
-{
- GError *error;
- GOptionContext *context;
- GFile *source, *dest, *target;
- gboolean dest_is_dir;
- char *basename;
- int i;
- GFileCopyFlags flags;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- output files at <location>");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (error != NULL)
- {
- g_printerr ("Error parsing commandline options: %s\n", error->message);
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- g_error_free(error);
- return 1;
- }
-
- if (argc <= 2)
- {
- g_printerr ("Missing operand\n");
- return 1;
- }
-
- dest = g_file_new_for_commandline_arg (argv[argc-1]);
-
- if (no_target_directory && argc > 3)
- {
- g_printerr ("Too many arguments\n");
- g_object_unref (dest);
- return 1;
- }
-
- dest_is_dir = is_dir (dest);
-
- if (!dest_is_dir && argc > 3)
- {
- g_printerr ("Target %s is not a directory\n", argv[argc-1]);
- g_object_unref (dest);
- return 1;
- }
-
- for (i = 1; i < argc - 1; i++)
- {
- source = g_file_new_for_commandline_arg (argv[i]);
-
- if (dest_is_dir && !no_target_directory)
- {
- basename = g_file_get_basename (source);
- target = g_file_get_child (dest, basename);
- g_free (basename);
- }
- else
- target = g_object_ref (dest);
-
- flags = 0;
- if (backup)
- flags |= G_FILE_COPY_BACKUP;
- if (!interactive)
- flags |= G_FILE_COPY_OVERWRITE;
-
- error = NULL;
- if (!g_file_move (source, target, flags, NULL, progress?show_progress:NULL, NULL, &error))
- {
- if (interactive && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS))
- {
- char line[16];
-
- g_error_free (error);
- error = NULL;
-
- basename = g_file_get_basename (target);
- g_print ("overwrite %s?", basename);
- g_free (basename);
-
- if (fgets(line, sizeof (line), stdin) &&
- line[0] == 'y')
- {
- flags |= G_FILE_COPY_OVERWRITE;
- if (!g_file_move (source, target, flags, NULL, NULL, NULL, &error))
- goto move_failed;
- }
- }
- else
- {
- move_failed:
- g_printerr ("Error moving file %s: %s\n", argv[i], error->message);
- g_error_free (error);
- }
- }
-
- g_object_unref (source);
- g_object_unref (target);
- }
-
- g_object_unref (dest);
-
- return 0;
-}
diff --git a/programs/gvfs-open.c b/programs/gvfs-open.c
deleted file mode 100644
index 26efa5f0..00000000
--- a/programs/gvfs-open.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <locale.h>
-#include <errno.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-static gchar **locations = NULL;
-
-static GOptionEntry entries[] = {
- {G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &locations, "files", NULL},
- {NULL}
-};
-
-static void
-open (GFile *file, char *arg_string)
-{
- GAppInfo *app;
- GError *error;
- GList l = {NULL};
- gboolean res;
-
- error = NULL;
- app = g_file_query_default_handler (file, NULL, &error);
-
- if (app == NULL)
- {
- /* Translators: the first %s is the program name, the second one */
- /* is the URI of the file, the third is the error message. */
- g_printerr (_("%s: %s: error opening location: %s\n"),
- g_get_prgname (), g_file_get_uri (file), error->message);
- g_error_free (error);
- return;
- }
-
- if (g_file_is_native (file))
- {
- /* For normal files, pass in the canonicalized GFile as path */
- l.data = file;
- res = g_app_info_launch (app, &l,
- NULL, &error);
- }
- else
- {
- /* However, for uris, use the original string, as it might be
- modified by passing throught GFile (e.g. mailto: links)
- */
- l.data = arg_string;
- res = g_app_info_launch_uris (app, &l,
- NULL, &error);
- }
-
- if (!res)
- {
- /* Translators: the first %s is the program name, the second one */
- /* is the URI of the file, the third is the error message. */
- g_printerr (_("%s: %s: error launching application: %s\n"),
- g_get_prgname (), g_file_get_uri (file), error->message);
- g_error_free (error);
- }
-
- g_object_unref (app);
-
- return;
-}
-
-int
-main (int argc, char *argv[])
-{
- GError *error = NULL;
- GOptionContext *context = NULL;
- GFile *file;
- gchar *summary;
- int i;
-
- setlocale (LC_ALL, "");
-
- bindtextdomain (GETTEXT_PACKAGE, GVFS_LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- g_type_init ();
-
- /* Translators: this message will appear immediately after the */
- /* usage string - Usage: COMMAND [OPTION]... <THIS_MESSAGE> */
- context =
- g_option_context_new (_("FILES... - open FILES with registered application."));
-
- /* Translators: this message will appear after the usage string */
- /* and before the list of options. */
- summary = _("Opens the file(s) with the default application "
- "registered to handle the type of the file.");
-
- g_option_context_set_summary (context, summary);
-
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
-
- g_option_context_free (context);
-
- if (error != NULL)
- {
- g_printerr ("Error parsing commandline options: %s\n", error->message);
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- g_error_free(error);
- return 1;
- }
-
- if (!locations)
- {
- /* Translators: the %s is the program name. This error message */
- /* means the user is calling gvfs-cat without any argument. */
- g_printerr (_("%s: missing locations"), g_get_prgname ());
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- return 1;
- }
-
- i = 0;
-
- do
- {
- file = g_file_new_for_commandline_arg (locations[i]);
- open (file, locations[i]);
- g_object_unref (file);
- }
- while (locations[++i] != NULL);
-
- return 0;
-}
diff --git a/programs/gvfs-rename.c b/programs/gvfs-rename.c
deleted file mode 100644
index cb2a0638..00000000
--- a/programs/gvfs-rename.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2008 Christian Kellner <gicmo@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Christian Kellner <gicmo@gnome.org>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <locale.h>
-#include <gio/gio.h>
-
-static GOptionEntry entries[] =
-{
- { NULL }
-};
-
-
-int
-main (int argc, char *argv[])
-{
- GOptionContext *context;
- GError *error;
- GFile *file;
- GFile *new_file;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- rename file");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (argc < 3)
- {
- g_printerr ("Usage: %s location new_name\n",
- g_get_prgname ());
- return 1;
- }
-
- file = g_file_new_for_commandline_arg (argv[1]);
-
- new_file = g_file_set_display_name (file, argv[2],
- NULL, &error);
-
- if (new_file == NULL)
- {
- g_print ("Error: %s\n", error->message);
- g_error_free (error);
- }
- else
- {
- char *uri = g_file_get_uri (new_file);
- g_print ("Rename successful. New uri: %s\n", uri);
- g_object_unref (new_file);
- g_free (uri);
- }
-
- g_object_unref (file);
- return 0;
-}
diff --git a/programs/gvfs-rm.c b/programs/gvfs-rm.c
deleted file mode 100644
index cb666549..00000000
--- a/programs/gvfs-rm.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <locale.h>
-#include <gio/gio.h>
-
-static GOptionEntry entries[] =
-{
- { NULL }
-};
-
-
-int
-main (int argc, char *argv[])
-{
- GError *error;
- GOptionContext *context;
- GFile *file;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- delete files");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (argc > 1)
- {
- int i;
-
- for (i = 1; i < argc; i++) {
- file = g_file_new_for_commandline_arg (argv[i]);
- error = NULL;
- if (!g_file_delete (file, NULL, &error))
- {
- g_print ("Error deleting file: %s\n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- }
- }
-
- return 0;
-}
diff --git a/programs/gvfs-save.c b/programs/gvfs-save.c
deleted file mode 100644
index ffe21bad..00000000
--- a/programs/gvfs-save.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <locale.h>
-#include <errno.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-static char *etag = NULL;
-static gboolean backup = FALSE;
-static gboolean create = FALSE;
-static gboolean append = FALSE;
-static gboolean priv = FALSE;
-static gboolean print_etag = FALSE;
-
-static GOptionEntry entries[] =
-{
- { "backup", 'b', 0, G_OPTION_ARG_NONE, &backup, "Create backup", NULL },
- { "create", 'c', 0, G_OPTION_ARG_NONE, &create, "Only create if not existing", NULL },
- { "append", 'a', 0, G_OPTION_ARG_NONE, &append, "Append to end of file", NULL },
- { "private", 'p', 0, G_OPTION_ARG_NONE, &priv, "When creating a file, restrict access to the current user only", NULL },
- { "print_etag", 'v', 0, G_OPTION_ARG_NONE, &print_etag, "Print new etag at end", NULL },
- { "etag", 'e', 0, G_OPTION_ARG_STRING, &etag, "The etag of the file being overwritten", NULL },
- { NULL }
-};
-
-static gboolean
-save (GFile *file)
-{
- GOutputStream *out;
- GFileCreateFlags flags;
- char buffer[1025];
- char *p;
- gssize res;
- gboolean close_res;
- GError *error;
- gboolean save_res;
-
- error = NULL;
-
- flags = priv ? G_FILE_CREATE_PRIVATE : G_FILE_CREATE_NONE;
-
- if (create)
- out = (GOutputStream *)g_file_create (file, flags, NULL, &error);
- else if (append)
- out = (GOutputStream *)g_file_append_to (file, flags, NULL, &error);
- else
- out = (GOutputStream *)g_file_replace (file, etag, backup, flags, NULL, &error);
- if (out == NULL)
- {
- g_printerr ("Error opening file: %s\n", error->message);
- g_error_free (error);
- return FALSE;
- }
-
- save_res = TRUE;
-
- while (1)
- {
- res = read (STDIN_FILENO, buffer, 1024);
- if (res > 0)
- {
- ssize_t written;
-
- p = buffer;
- while (res > 0)
- {
- error = NULL;
- written = g_output_stream_write (out, p, res, NULL, &error);
- if (written == -1)
- {
- save_res = FALSE;
- g_printerr ("Error writing to stream: %s", error->message);
- g_error_free (error);
- goto out;
- }
- res -= written;
- p += written;
- }
- }
- else if (res < 0)
- {
- save_res = FALSE;
- perror ("Error reading stdin");
- break;
- }
- else if (res == 0)
- break;
- }
-
- out:
-
- close_res = g_output_stream_close (out, NULL, &error);
- if (!close_res)
- {
- save_res = FALSE;
- g_printerr ("Error closing: %s\n", error->message);
- g_error_free (error);
- }
-
- if (close_res && print_etag)
- {
- char *etag;
- etag = g_file_output_stream_get_etag (G_FILE_OUTPUT_STREAM (out));
-
- if (etag)
- g_print ("Etag: %s\n", etag);
- else
- g_print ("Etag not available\n");
- g_free (etag);
- }
-
- g_object_unref (out);
-
- return save_res;
-}
-
-int
-main (int argc, char *argv[])
-{
- GError *error;
- GOptionContext *context;
- GFile *file;
- gboolean res;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- output files at <location>");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (error != NULL)
- {
- g_printerr ("Error parsing commandline options: %s\n", error->message);
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- g_error_free(error);
- return 1;
- }
-
- res = FALSE;
-
- if (argc > 1)
- {
- file = g_file_new_for_commandline_arg (argv[1]);
- res = save (file);
- g_object_unref (file);
- }
-
- if (res)
- return 0;
- return 1;
-}
diff --git a/programs/gvfs-trash.c b/programs/gvfs-trash.c
deleted file mode 100644
index 7fa1aecd..00000000
--- a/programs/gvfs-trash.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <locale.h>
-#include <gio/gio.h>
-
-
-static GOptionEntry entries[] =
-{
- { NULL }
-};
-
-
-int
-main (int argc, char *argv[])
-{
- GError *error;
- GOptionContext *context;
- GFile *file;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- move files to trash");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (argc > 1)
- {
- int i;
-
- for (i = 1; i < argc; i++) {
- file = g_file_new_for_commandline_arg (argv[i]);
- error = NULL;
- if (!g_file_trash (file, NULL, &error))
- {
- g_print ("Error trashing file: %s\n", error->message);
- g_error_free (error);
- }
- g_object_unref (file);
- }
- }
-
- return 0;
-}
diff --git a/programs/gvfs-tree.c b/programs/gvfs-tree.c
deleted file mode 100644
index a9ff3b06..00000000
--- a/programs/gvfs-tree.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <locale.h>
-#include <string.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-static gboolean show_hidden = FALSE;
-static gboolean follow_symlinks = FALSE;
-
-static GOptionEntry entries[] =
-{
- { "hidden", 'h', 0, G_OPTION_ARG_NONE, &show_hidden, "Show hidden files", NULL },
- { "follow-symlinks", 'l', 0, G_OPTION_ARG_NONE, &follow_symlinks, "Follow symlinks, mounts and shortcuts like dirs", NULL },
-};
-
-static gint
-sort_info_by_name (GFileInfo *a, GFileInfo *b)
-{
- const char *na;
- const char *nb;
-
- na = g_file_info_get_name (a);
- nb = g_file_info_get_name (b);
-
- if (na == NULL)
- na = "";
- if (nb == NULL)
- nb = "";
-
- return strcmp (na, nb);
-}
-
-static void
-do_tree (GFile *f, int level, guint64 pattern)
-{
- GFileEnumerator *enumerator;
- GError *error = NULL;
- unsigned int n;
- GFileInfo *info;
-
- info = g_file_query_info (f,
- G_FILE_ATTRIBUTE_STANDARD_TYPE ","
- G_FILE_ATTRIBUTE_STANDARD_TARGET_URI,
- 0,
- NULL, NULL);
- if (info != NULL)
- {
- if (g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_STANDARD_TYPE) == G_FILE_TYPE_MOUNTABLE)
- {
- /* don't process mountables; we avoid these by getting the target_uri below */
- g_object_unref (info);
- return;
- }
- g_object_unref (info);
- }
-
- enumerator = g_file_enumerate_children (f,
- G_FILE_ATTRIBUTE_STANDARD_NAME ","
- G_FILE_ATTRIBUTE_STANDARD_TYPE ","
- G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN ","
- G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK ","
- G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET ","
- G_FILE_ATTRIBUTE_STANDARD_TARGET_URI,
- 0,
- NULL,
- &error);
- if (enumerator != NULL)
- {
- GList *l;
- GList *info_list;
-
- info_list = NULL;
- while ((info = g_file_enumerator_next_file (enumerator, NULL, NULL)) != NULL)
- {
- if (g_file_info_get_is_hidden (info) && !show_hidden)
- {
- g_object_unref (info);
- }
- else
- {
- info_list = g_list_prepend (info_list, info);
- }
- }
- g_file_enumerator_close (enumerator, NULL, NULL);
-
- info_list = g_list_sort (info_list, (GCompareFunc) sort_info_by_name);
-
- for (l = info_list; l != NULL; l = l->next)
- {
- const char *name;
- const char *target_uri;
- GFileType type;
- gboolean is_last_item;
-
- info = l->data;
- is_last_item = (l->next == NULL);
-
- name = g_file_info_get_name (info);
- type = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_STANDARD_TYPE);
- if (name != NULL)
- {
-
- for (n = 0; n < level; n++)
- {
- if (pattern & (1<<n))
- {
- g_print ("| ");
- }
- else
- {
- g_print (" ");
- }
- }
-
- if (is_last_item)
- {
- g_print ("`-- %s", name);
- }
- else
- {
- g_print ("|-- %s", name);
- }
-
- target_uri = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI);
- if (target_uri != NULL)
- {
- g_print (" -> %s", target_uri);
- }
- else
- {
- if (g_file_info_get_is_symlink (info))
- {
- const char *target;
- target = g_file_info_get_symlink_target (info);
- g_print (" -> %s", target);
- }
- }
-
- g_print ("\n");
-
- if ((type & G_FILE_TYPE_DIRECTORY) &&
- (follow_symlinks || !g_file_info_get_is_symlink (info)))
- {
- guint64 new_pattern;
- GFile *child;
-
- if (is_last_item)
- new_pattern = pattern;
- else
- new_pattern = pattern | (1<<level);
-
- child = NULL;
- if (target_uri != NULL)
- {
- if (follow_symlinks)
- child = g_file_new_for_uri (target_uri);
- }
- else
- {
- child = g_file_get_child (f, name);
- }
-
- if (child != NULL)
- {
- do_tree (child, level + 1, new_pattern);
- g_object_unref (child);
- }
- }
- }
- g_object_unref (info);
- }
- g_list_free (info_list);
- }
- else
- {
- for (n = 0; n < level; n++)
- {
- if (pattern & (1<<n))
- {
- g_print ("| ");
- }
- else
- {
- g_print (" ");
- }
- }
-
- g_print (" [%s]\n", error->message);
-
- g_error_free (error);
- }
-}
-
-static void
-tree (GFile *f)
-{
- char *uri;
-
- uri = g_file_get_uri (f);
- g_print ("%s\n", uri);
- g_free (uri);
-
- do_tree (f, 0, 0);
-}
-
-int
-main (int argc, char *argv[])
-{
- GError *error;
- GOptionContext *context;
- GFile *file;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- error = NULL;
- context = g_option_context_new ("- list contents of directories in a tree-like format");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_parse (context, &argc, &argv, &error);
- g_option_context_free (context);
-
- if (error != NULL)
- {
- g_printerr ("Error parsing commandline options: %s\n", error->message);
- g_printerr ("\n");
- g_printerr (_("Try \"%s --help\" for more information."),
- g_get_prgname ());
- g_printerr ("\n");
- g_error_free(error);
- return 1;
- }
-
- if (argc > 1)
- {
- int i;
-
- for (i = 1; i < argc; i++) {
- file = g_file_new_for_commandline_arg (argv[i]);
- tree (file);
- g_object_unref (file);
- }
- }
- else
- {
- char *cwd;
-
- cwd = g_get_current_dir ();
- file = g_file_new_for_path (cwd);
- g_free (cwd);
- tree (file);
- g_object_unref (file);
- }
-
- return 0;
-}
diff --git a/test/Makefile.am b/test/Makefile.am
deleted file mode 100644
index 7ddcd8ca..00000000
--- a/test/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-NULL =
-
-AM_CFLAGS = \
- -I$(top_srcdir) \
- -I$(top_builddir) \
- $(GLIB_CFLAGS) \
- -DG_DISABLE_DEPRECATED
-
-AM_LDFLAGS = \
- $(GLIB_LIBS)
-
-noinst_PROGRAMS = \
- benchmark-gvfs-small-files \
- benchmark-gvfs-big-files \
- benchmark-posix-small-files \
- benchmark-posix-big-files \
- $(NULL)
-
-EXTRA_DIST = benchmark-common.c
diff --git a/test/benchmark-common.c b/test/benchmark-common.c
deleted file mode 100644
index 8f7e9ccc..00000000
--- a/test/benchmark-common.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-
-/* This file should be included directly in each benchmark program */
-
-#define __USE_GNU 1
-
-#include "config.h"
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <glib/gprintf.h>
-
-static GMainLoop *main_loop;
-
-typedef struct
-{
- gdouble x;
- gdouble y;
-}
-BenchmarkDataPoint;
-
-typedef struct
-{
- /* Array of BenchmarkDataPoints */
- GArray *points;
-}
-BenchmarkDataSet;
-
-typedef struct
-{
- gchar *name;
- gchar *x_unit;
- gchar *y_unit;
-
- GList *data_sets;
-}
-BenchmarkDataPlot;
-
-static gint benchmark_run (gint argc, gchar *argv []);
-
-GList *benchmark_data_plots = NULL;
-gboolean benchmark_is_running = FALSE;
-
-#if 0
-static void
-benchmark_begin_data_plot (const gchar *name, const gchar *x_unit, const gchar *y_unit)
-{
- BenchmarkDataPlot *data_plot;
-
- data_plot = g_new0 (BenchmarkDataPlot, 1);
-
- data_plot->name = g_strdup (name);
- data_plot->x_unit = g_strdup (x_unit);
- data_plot->y_unit = g_strdup (y_unit);
-
- data_plot->data_sets = NULL;
-
- benchmark_data_plots = g_list_prepend (benchmark_data_plots, data_plot);
-}
-
-static void
-benchmark_begin_data_set (void)
-{
- BenchmarkDataPlot *data_plot;
- BenchmarkDataSet *data_set;
-
- if (!benchmark_data_plots)
- g_error ("Must begin a data plot before adding data sets!");
-
- data_plot = benchmark_data_plots->data;
-
- data_set = g_new0 (BenchmarkDataSet, 1);
- data_set->points = g_array_new (FALSE, FALSE, sizeof (BenchmarkDataPoint));
-
- data_plot->data_sets = g_list_prepend (data_plot->data_sets, data_set);
-}
-
-static void
-benchmark_add_data_point (gdouble x, gdouble y)
-{
- BenchmarkDataPlot *data_plot;
- BenchmarkDataSet *data_set;
- BenchmarkDataPoint data_point;
-
- if (!benchmark_data_plots)
- g_error ("Must begin a data plot before adding data sets!");
-
- data_plot = benchmark_data_plots->data;
-
- if (!data_plot->data_sets)
- g_error ("Must begin a data set before adding data points!");
-
- data_set = data_plot->data_sets->data;
-
- data_point.x = x;
- data_point.y = y;
-
- g_array_append_val (data_set->points, data_point);
-}
-
-#endif
-
-static void
-benchmark_end (void)
-{
- BenchmarkDataPlot *plot;
- GList *l;
-
- /* Dump plots */
-
- if (!benchmark_data_plots)
- exit (1);
-
- plot = benchmark_data_plots->data;
- if (!plot)
- exit (1);
-
- for (l = plot->data_sets; l; l = g_list_next (l))
- {
- BenchmarkDataSet *set = l->data;
- guint i;
-
- for (i = 0; i < set->points->len; i++)
- {
- BenchmarkDataPoint *point = &g_array_index (set->points, BenchmarkDataPoint, i);
-
- g_print ("%20lf %20lf\n", point->x, point->y);
- }
- }
-
- exit (0);
-}
-
-static void
-benchmark_begin (const gchar *name)
-{
- g_type_init ();
- g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_ERROR);
- main_loop = g_main_loop_new (NULL, FALSE);
-}
-
-G_GNUC_UNUSED static void
-benchmark_run_main_loop (void)
-{
- g_main_loop_run (main_loop);
-}
-
-G_GNUC_UNUSED static void
-benchmark_quit_main_loop (void)
-{
- g_main_loop_quit (main_loop);
-}
-
-static void
-benchmark_timeout (int signal)
-{
- benchmark_is_running = FALSE;
-}
-
-G_GNUC_UNUSED static void
-benchmark_start_wallclock_timer (gint n_seconds)
-{
- benchmark_is_running = TRUE;
- signal (SIGALRM, benchmark_timeout);
- alarm (n_seconds);
-}
-
-G_GNUC_UNUSED static void
-benchmark_start_cpu_timer (gint n_seconds)
-{
- struct itimerval itv;
-
- benchmark_is_running = TRUE;
-
- memset (&itv, 0, sizeof (itv));
- itv.it_value.tv_sec = n_seconds;
-
- signal (SIGPROF, benchmark_timeout);
- setitimer (ITIMER_PROF, &itv, NULL);
-}
-
-gint
-main (gint argc, gchar *argv [])
-{
- gint result;
-
- benchmark_begin (BENCHMARK_UNIT_NAME);
- result = benchmark_run (argc, argv);
- benchmark_end ();
-
- return result;
-}
diff --git a/test/benchmark-gvfs-big-files.c b/test/benchmark-gvfs-big-files.c
deleted file mode 100644
index af9c7b77..00000000
--- a/test/benchmark-gvfs-big-files.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-
-#include <config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <locale.h>
-#include <errno.h>
-#include <string.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-
-#define BENCHMARK_UNIT_NAME "gvfs-big-file"
-
-#include "benchmark-common.c"
-
-#define FILE_SIZE (1024 * 1024 * 50) /* 50 MiB */
-#define BUFFER_SIZE 4096
-#define ITERATIONS_NUM 1
-
-static gboolean
-is_dir (GFile *file)
-{
- GFileInfo *info;
- gboolean res;
-
- info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE, 0, NULL, NULL);
- res = info && g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY;
- if (info)
- g_object_unref (info);
- return res;
-}
-
-static GFile *
-create_file (GFile *base_dir)
-{
- GFile *scratch_file;
- gchar *scratch_name;
- GOutputStream *output_stream;
- gint pid;
- GError *error = NULL;
- gchar buffer [BUFFER_SIZE];
- gint i;
-
- pid = getpid ();
- scratch_name = g_strdup_printf ("gvfs-benchmark-scratch-%d", pid);
- scratch_file = g_file_resolve_relative_path (base_dir, scratch_name);
- g_free (scratch_name);
-
- if (!scratch_file)
- return NULL;
-
- output_stream = G_OUTPUT_STREAM (g_file_replace (scratch_file, 0, FALSE, G_FILE_CREATE_NONE, NULL, &error));
- if (!output_stream)
- {
- g_printerr ("Failed to create scratch file: %s\n", error->message);
- g_object_unref (scratch_file);
- return NULL;
- }
-
- memset (buffer, 0xaa, BUFFER_SIZE);
-
- for (i = 0; i < FILE_SIZE; i += BUFFER_SIZE)
- {
- if (g_output_stream_write (output_stream, buffer, BUFFER_SIZE, NULL, &error) < BUFFER_SIZE)
- {
- g_printerr ("Failed to populate scratch file: %s\n", error->message);
- g_output_stream_close (output_stream, NULL, NULL);
- g_object_unref (output_stream);
- g_object_unref (scratch_file);
- return NULL;
- }
- }
-
- g_output_stream_close (output_stream, NULL, NULL);
- g_object_unref (output_stream);
- return scratch_file;
-}
-
-static void
-read_file (GFile *scratch_file)
-{
- GInputStream *input_stream;
- GError *error = NULL;
- gint i;
-
- input_stream = (GInputStream *) g_file_read (scratch_file, NULL, &error);
- if (!input_stream)
- {
- g_printerr ("Failed to open scratch file: %s\n", error->message);
- return;
- }
-
- for (i = 0; i < FILE_SIZE; i += BUFFER_SIZE)
- {
- gchar buffer [BUFFER_SIZE];
- gsize bytes_read;
-
- if (!g_input_stream_read_all (input_stream, buffer, BUFFER_SIZE, &bytes_read, NULL, &error) ||
- bytes_read < BUFFER_SIZE)
- {
- g_printerr ("Failed to read back scratch file: %s\n", error->message);
- g_input_stream_close (input_stream, NULL, NULL);
- g_object_unref (input_stream);
- }
- }
-
- g_object_unref (input_stream);
-}
-
-static void
-delete_file (GFile *scratch_file)
-{
-#if 0
- GError *error = NULL;
-
- /* Enable when GDaemonFile supports delete */
-
- if (!g_file_delete (scratch_file, NULL, &error))
- {
- g_printerr ("Failed to delete scratch file: %s\n", error->message);
- }
-#endif
-}
-
-static gint
-benchmark_run (gint argc, gchar *argv [])
-{
- GFile *base_dir;
- GFile *scratch_file;
- gint i;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- if (argc < 2)
- {
- g_printerr ("Usage: %s <scratch URI>\n", argv [0]);
- return 1;
- }
-
- base_dir = g_file_new_for_commandline_arg (argv [1]);
-
- if (!is_dir (base_dir))
- {
- g_printerr ("Scratch URI %s is not a directory\n", argv [1]);
- g_object_unref (base_dir);
- return 1;
- }
-
- for (i = 0; i < ITERATIONS_NUM; i++)
- {
- scratch_file = create_file (base_dir);
- if (!scratch_file)
- {
- g_object_unref (base_dir);
- return 1;
- }
-
- read_file (scratch_file);
- delete_file (scratch_file);
-
- g_object_unref (scratch_file);
- }
-
- g_object_unref (base_dir);
- return 0;
-}
diff --git a/test/benchmark-gvfs-small-files.c b/test/benchmark-gvfs-small-files.c
deleted file mode 100644
index 2e3143dd..00000000
--- a/test/benchmark-gvfs-small-files.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-
-#include <config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <locale.h>
-#include <errno.h>
-#include <string.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-
-#define BENCHMARK_UNIT_NAME "gvfs-big-file"
-
-#include "benchmark-common.c"
-
-#define FILE_SIZE 4096
-#define BUFFER_SIZE 4096
-#define ITERATIONS_NUM 65536
-
-static gboolean
-is_dir (GFile *file)
-{
- GFileInfo *info;
- gboolean res;
-
- info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE, 0, NULL, NULL);
- res = info && g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY;
- if (info)
- g_object_unref (info);
- return res;
-}
-
-static GFile *
-create_file (GFile *base_dir)
-{
- GFile *scratch_file;
- gchar *scratch_name;
- GOutputStream *output_stream;
- gint pid;
- GError *error = NULL;
- gchar buffer [BUFFER_SIZE];
- gint i;
-
- pid = getpid ();
- scratch_name = g_strdup_printf ("gvfs-benchmark-scratch-%d", pid);
- scratch_file = g_file_resolve_relative_path (base_dir, scratch_name);
- g_free (scratch_name);
-
- if (!scratch_file)
- return NULL;
-
- output_stream = G_OUTPUT_STREAM (g_file_replace (scratch_file, 0, FALSE, G_FILE_CREATE_NONE, NULL, &error));
- if (!output_stream)
- {
- g_printerr ("Failed to create scratch file: %s\n", error->message);
- g_object_unref (scratch_file);
- return NULL;
- }
-
- memset (buffer, 0xaa, BUFFER_SIZE);
-
- for (i = 0; i < FILE_SIZE; i += BUFFER_SIZE)
- {
- if (g_output_stream_write (output_stream, buffer, BUFFER_SIZE, NULL, &error) < BUFFER_SIZE)
- {
- g_printerr ("Failed to populate scratch file: %s\n", error->message);
- g_output_stream_close (output_stream, NULL, NULL);
- g_object_unref (output_stream);
- g_object_unref (scratch_file);
- return NULL;
- }
- }
-
- g_output_stream_close (output_stream, NULL, NULL);
- g_object_unref (output_stream);
- return scratch_file;
-}
-
-static void
-read_file (GFile *scratch_file)
-{
- GInputStream *input_stream;
- GError *error = NULL;
- gint i;
-
- input_stream = (GInputStream *) g_file_read (scratch_file, NULL, &error);
- if (!input_stream)
- {
- g_printerr ("Failed to open scratch file: %s\n", error->message);
- return;
- }
-
- for (i = 0; i < FILE_SIZE; i += BUFFER_SIZE)
- {
- gchar buffer [BUFFER_SIZE];
- gsize bytes_read;
-
- if (!g_input_stream_read_all (input_stream, buffer, BUFFER_SIZE, &bytes_read, NULL, &error) ||
- bytes_read < BUFFER_SIZE)
- {
- g_printerr ("Failed to read back scratch file: %s\n", error->message);
- g_input_stream_close (input_stream, NULL, NULL);
- g_object_unref (input_stream);
- }
- }
-
- g_object_unref (input_stream);
-}
-
-static void
-delete_file (GFile *scratch_file)
-{
-#if 0
- GError *error = NULL;
-
- /* Enable when GDaemonFile supports delete */
-
- if (!g_file_delete (scratch_file, NULL, &error))
- {
- g_printerr ("Failed to delete scratch file: %s\n", error->message);
- }
-#endif
-}
-
-static gint
-benchmark_run (gint argc, gchar *argv [])
-{
- GFile *base_dir;
- GFile *scratch_file;
- gint i;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- if (argc < 2)
- {
- g_printerr ("Usage: %s <scratch URI>\n", argv [0]);
- return 1;
- }
-
- base_dir = g_file_new_for_commandline_arg (argv [1]);
-
- if (!is_dir (base_dir))
- {
- g_printerr ("Scratch URI %s is not a directory\n", argv [1]);
- g_object_unref (base_dir);
- return 1;
- }
-
- for (i = 0; i < ITERATIONS_NUM; i++)
- {
- scratch_file = create_file (base_dir);
- if (!scratch_file)
- {
- g_object_unref (base_dir);
- return 1;
- }
-
- read_file (scratch_file);
- delete_file (scratch_file);
-
- g_object_unref (scratch_file);
- }
-
- g_object_unref (base_dir);
- return 0;
-}
diff --git a/test/benchmark-posix-big-files.c b/test/benchmark-posix-big-files.c
deleted file mode 100644
index 8c05e5f7..00000000
--- a/test/benchmark-posix-big-files.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-
-#include <config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <locale.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-
-#define BENCHMARK_UNIT_NAME "posix-big-file"
-
-#include "benchmark-common.c"
-
-#define FILE_SIZE (1024 * 1024 * 50) /* 50 MiB */
-#define BUFFER_SIZE 4096
-#define ITERATIONS_NUM 1
-
-static gboolean
-is_dir (const gchar *dir)
-{
- struct stat sbuf;
-
- if (stat (dir, &sbuf) < 0)
- return FALSE;
-
- if (S_ISDIR (sbuf.st_mode))
- return TRUE;
-
- return FALSE;
-}
-
-static gchar *
-create_file (const gchar *base_dir)
-{
- gchar *scratch_file;
- gint output_fd;
- gint pid;
- gchar buffer [BUFFER_SIZE];
- gint i;
-
- pid = getpid ();
- scratch_file = g_strdup_printf ("%s/posix-benchmark-scratch-%d", base_dir, pid);
-
- output_fd = open (scratch_file, O_WRONLY | O_CREAT | O_TRUNC, 0777);
- if (output_fd < 0)
- {
- g_printerr ("Failed to create scratch file: %s\n", strerror (errno));
- g_free (scratch_file);
- return NULL;
- }
-
- memset (buffer, 0xaa, BUFFER_SIZE);
-
- for (i = 0; i < FILE_SIZE; i += BUFFER_SIZE)
- {
- gint bytes_written;
-
- bytes_written = write (output_fd, buffer, BUFFER_SIZE);
- if (bytes_written < BUFFER_SIZE)
- {
- if (errno == EINTR)
- {
- i -= BUFFER_SIZE - bytes_written;
- continue;
- }
-
- g_printerr ("Failed to populate scratch file: %s\n", strerror (errno));
- close (output_fd);
- g_free (scratch_file);
- return NULL;
- }
- }
-
- close (output_fd);
- return scratch_file;
-}
-
-static void
-read_file (const gchar *scratch_file)
-{
- gint input_fd;
- gint i;
-
- input_fd = open (scratch_file, O_RDONLY);
- if (input_fd < 0)
- {
- g_printerr ("Failed to read back scratch file: %s\n", strerror (errno));
- return;
- }
-
- for (i = 0; i < FILE_SIZE; i += BUFFER_SIZE)
- {
- gchar buffer [BUFFER_SIZE];
- gsize bytes_read;
-
- bytes_read = read (input_fd, buffer, BUFFER_SIZE);
- if (bytes_read < BUFFER_SIZE)
- {
- if (errno == EINTR)
- {
- i -= BUFFER_SIZE - bytes_read;
- continue;
- }
-
- g_printerr ("Failed to read back scratch file: %s\n", strerror (errno));
- close (input_fd);
- return;
- }
- }
-
- close (input_fd);
-}
-
-static void
-delete_file (const gchar *scratch_file)
-{
- if (unlink (scratch_file) < 0)
- {
- g_printerr ("Failed to delete scratch file: %s\n", strerror (errno));
- }
-}
-
-static gint
-benchmark_run (gint argc, gchar *argv [])
-{
- gchar *base_dir;
- gchar *scratch_file;
- gint i;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- if (argc < 2)
- {
- g_printerr ("Usage: %s <scratch path>\n", argv [0]);
- return 1;
- }
-
- base_dir = argv [1];
-
- if (!is_dir (base_dir))
- {
- g_printerr ("Scratch path %s is not a directory\n", argv [1]);
- return 1;
- }
-
- for (i = 0; i < ITERATIONS_NUM; i++)
- {
- scratch_file = create_file (base_dir);
- if (!scratch_file)
- {
- g_free (base_dir);
- return 1;
- }
-
- read_file (scratch_file);
- delete_file (scratch_file);
-
- g_free (scratch_file);
- }
-
- return 0;
-}
diff --git a/test/benchmark-posix-small-files.c b/test/benchmark-posix-small-files.c
deleted file mode 100644
index 1877555d..00000000
--- a/test/benchmark-posix-small-files.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-
-#include <config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <locale.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-
-#define BENCHMARK_UNIT_NAME "posix-big-file"
-
-#include "benchmark-common.c"
-
-#define FILE_SIZE 4096
-#define BUFFER_SIZE 4096
-#define ITERATIONS_NUM 65536
-
-static gboolean
-is_dir (const gchar *dir)
-{
- struct stat sbuf;
-
- if (stat (dir, &sbuf) < 0)
- return FALSE;
-
- if (S_ISDIR (sbuf.st_mode))
- return TRUE;
-
- return FALSE;
-}
-
-static gchar *
-create_file (const gchar *base_dir)
-{
- gchar *scratch_file;
- gint output_fd;
- gint pid;
- gchar buffer [BUFFER_SIZE];
- gint i;
-
- pid = getpid ();
- scratch_file = g_strdup_printf ("%s/posix-benchmark-scratch-%d", base_dir, pid);
-
- output_fd = open (scratch_file, O_WRONLY | O_CREAT | O_TRUNC, 0777);
- if (output_fd < 0)
- {
- g_printerr ("Failed to create scratch file: %s\n", strerror (errno));
- g_free (scratch_file);
- return NULL;
- }
-
- memset (buffer, 0xaa, BUFFER_SIZE);
-
- for (i = 0; i < FILE_SIZE; i += BUFFER_SIZE)
- {
- gint bytes_written;
-
- bytes_written = write (output_fd, buffer, BUFFER_SIZE);
- if (bytes_written < BUFFER_SIZE)
- {
- if (errno == EINTR)
- {
- i -= BUFFER_SIZE - bytes_written;
- continue;
- }
-
- g_printerr ("Failed to populate scratch file: %s\n", strerror (errno));
- close (output_fd);
- g_free (scratch_file);
- return NULL;
- }
- }
-
- close (output_fd);
- return scratch_file;
-}
-
-static void
-read_file (const gchar *scratch_file)
-{
- gint input_fd;
- gint i;
-
- input_fd = open (scratch_file, O_RDONLY);
- if (input_fd < 0)
- {
- g_printerr ("Failed to read back scratch file: %s\n", strerror (errno));
- return;
- }
-
- for (i = 0; i < FILE_SIZE; i += BUFFER_SIZE)
- {
- gchar buffer [BUFFER_SIZE];
- gsize bytes_read;
-
- bytes_read = read (input_fd, buffer, BUFFER_SIZE);
- if (bytes_read < BUFFER_SIZE)
- {
- if (errno == EINTR)
- {
- i -= BUFFER_SIZE - bytes_read;
- continue;
- }
-
- g_printerr ("Failed to read back scratch file: %s\n", strerror (errno));
- close (input_fd);
- return;
- }
- }
-
- close (input_fd);
-}
-
-static void
-delete_file (const gchar *scratch_file)
-{
- if (unlink (scratch_file) < 0)
- {
- g_printerr ("Failed to delete scratch file: %s\n", strerror (errno));
- }
-}
-
-static gint
-benchmark_run (gint argc, gchar *argv [])
-{
- gchar *base_dir;
- gchar *scratch_file;
- gint i;
-
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- if (argc < 2)
- {
- g_printerr ("Usage: %s <scratch path>\n", argv [0]);
- return 1;
- }
-
- base_dir = argv [1];
-
- if (!is_dir (base_dir))
- {
- g_printerr ("Scratch path %s is not a directory\n", argv [1]);
- return 1;
- }
-
- for (i = 0; i < ITERATIONS_NUM; i++)
- {
- scratch_file = create_file (base_dir);
- if (!scratch_file)
- {
- g_free (base_dir);
- return 1;
- }
-
- read_file (scratch_file);
- delete_file (scratch_file);
-
- g_free (scratch_file);
- }
-
- return 0;
-}
diff --git a/txt/gvfs_dbus.txt b/txt/gvfs_dbus.txt
deleted file mode 100644
index 86ac19ac..00000000
--- a/txt/gvfs_dbus.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-how to chain to simple stuff
-
-how to parse uris (i.e. map to mounts)
-
-what connections do we have:
-shared dbus connection
-connection to main daemom
-connection to each mount daemon
-
-"fast ops" (uri->gfile) vs blocking ops (read, open etc) and how to avoid slow blocking fast
-
-
-each thread has, on demand:
-connection to main daemon
-connection to some mount daemons
-
-global state:
-cache of previously used mountpoints
-
-
-how to mount
-
-how to store/restore permanent mounts with the session => store as drives (mountpoints), not volumes!
-
-Don't always want to log in to all mounts on login? (mounpoints!)
-
-computer:// handled in main daemon?
-
-No volume monitor in public API, only computer:// ?
-Problems:
-* mounted (desktop/computer:, trash dir)
-* unmounted/pre_unmount (desktop/computer:, close windows on unmounted volumes, trash dir)
-* map path to volume (close windows on unmounted volumes, check for readonly mount, get volume name)
-* get all drives/volumes (detecting where to show eject, mount, unmount menu items,
- tree view, places sidebar, display volume icon in pathbar)
-* eject/unmount ops
-* needs eject
-
-unmounted URI => return a mountpoint object?
-
-GMountOperation, async mount operation object
-signals => passwd, question, keyring?
-
-GFile mountpoint => GMountOperation
-
-What process calls gnome-keyring?
-
-
-
---------------------
-
-GFile creation => decompose URI, no i/o
-
-on i/o:
- * figure out mountpoint (for now, always toplevel uri location)
- * if we have a local dbus connection to that, use it, otherwise:
- + create (if needed) local session dbus connection
- + ask for mount daemon for new session
- - If not existing, error on i/o, return mountpoint type on get_info
- + set up new local connection with the mount daemon
- * send dbus message
- * recieve answer, if has magic flag, followed by fd sendmsg() (created by socketpair())
-
-
-
diff --git a/txt/ops.txt b/txt/ops.txt
deleted file mode 100644
index c1f04c34..00000000
--- a/txt/ops.txt
+++ /dev/null
@@ -1,140 +0,0 @@
-type: File, Folder, Symlink, Shortcut, Mountable, special (fifo, socket, chardec, blockdev)
-flags: hidden,
-GFileInfo {
- type get_type()
- char *get_name()
- char *get_display_name()
- char *get_icon() /* string? what about win32, remote icons etc */
-
- gint64 get_file_size()
- char *get_mime_type()
- char *get_link_target()
- can_read()/write()/delete()/rename()/maybe: move()/copy()
- flags get_flags()
- time_t get_modification_time()
- gboolean get_unix_stat ()
- char *get_attribute()
- char **get_attributes(char *namespace)
- char **get_all_attributes() /* form namespace:attrname -> string */
-}
-
-GFSInfo {
- char *get_fs_type()
- gint64 get_free_space()
- gint64 get_total_space()
- char * get_hal_uid()
- can_unmount()
- can_eject()
- must_eject()
-
-}
-
-GFile *g_file_for_path (char *path)
-GFile *g_file_for_uri (char *uri)
-GFile *g_file_parse_display_name (char *display_name)
-
-GFile {
- char *get_path()
- is_native() => is_file:///
-
- char *get_uri ();
- char *get_absolute_display_name ()
-
- set_keep_open(boolean keep_open)
-
- GFile *get_parent ()
- GFile *get_child (char *name)
- GFileEnumerator *enumerate_children(flags, attributes... "*", "vfs:*;dav:*;foo:bar")
- GFileInfo *get_info (flags, attributes...)
-
- void reload()
- GInputStream *read()
-
- GOutputStream *append_to() /* optional (not on webdav) */
- GOutputStream *create()
- GSaveStream *replace(mtime, backup_name, )
-/* permissions are all set minus umask, except replace which
- saves old permissions */
-
-/* ?? */
- GFile *resolve_symlink(char *symlink_target);
-
-/* output ops */
- write/save
- rename
- move
- copy
- delete
- mkdir
- rmkdir
- display name -> filename (for new files)
- set attrs
-
- /* other ops: */
- monitor(flags) + signals
- mount/unmount
- list volumes
-
- Maybe:
- GFile *new_from_uri(path, flags) (file:/// uris)
-
-}
-
-
-names:
- URIs == raw filename (no encoding), all escaped
- We generate display absolute paths as filenames if possible, otherwise
- as IRIs. This means we can display nice URIs for native utf8 backends
- and filenames. However, URIs for non-utf8 shares will look bad. If we know
- the encoding we can still get nice non-absolut display names though.
-
- In client we store names as mountpoint + non-escaped no-encoding string.
- Non-uri display name handling done in daemon
-
-GStatable iface for fstat() support
-GSaveStream, with get_final_file_info()
-
-open for writing:
-
-append vs truncate
-fail on existing or replace
-
-mtime match
-mtime return
-backup (suffix+prefix)
-create filename from display name
-unique name
-keep inode or be atomic?
-
-filename_for_display_name()
-write_append() /* optional (not on webdav) */
-write_new()
-write_replace()
-
-
-
-
-ftp supports:
- overwrite
- append
- generate unique name
-
-http+webdav supports:
- overwrite
- append in recent versions
- get mtime, length, mimetype, atime on read open
-
-
-
-
-
-async thread work:
-
-function to run in thread
-data to pass to thread
-cancel identifier
-pass in cancel func + data
-way for function to communicate with mainloop (of specific context)
-does mainloop notifiers block on ack?
-
-
diff --git a/txt/rfc3986.txt b/txt/rfc3986.txt
deleted file mode 100644
index c56ed4eb..00000000
--- a/txt/rfc3986.txt
+++ /dev/null
@@ -1,3419 +0,0 @@
-
-
-
-
-
-
-Network Working Group T. Berners-Lee
-Request for Comments: 3986 W3C/MIT
-STD: 66 R. Fielding
-Updates: 1738 Day Software
-Obsoletes: 2732, 2396, 1808 L. Masinter
-Category: Standards Track Adobe Systems
- January 2005
-
-
- Uniform Resource Identifier (URI): Generic Syntax
-
-Status of This Memo
-
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
-Copyright Notice
-
- Copyright (C) The Internet Society (2005).
-
-Abstract
-
- A Uniform Resource Identifier (URI) is a compact sequence of
- characters that identifies an abstract or physical resource. This
- specification defines the generic URI syntax and a process for
- resolving URI references that might be in relative form, along with
- guidelines and security considerations for the use of URIs on the
- Internet. The URI syntax defines a grammar that is a superset of all
- valid URIs, allowing an implementation to parse the common components
- of a URI reference without knowing the scheme-specific requirements
- of every possible identifier. This specification does not define a
- generative grammar for URIs; that task is performed by the individual
- specifications of each URI scheme.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 1]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
- 1.1. Overview of URIs . . . . . . . . . . . . . . . . . . . . 4
- 1.1.1. Generic Syntax . . . . . . . . . . . . . . . . . 6
- 1.1.2. Examples . . . . . . . . . . . . . . . . . . . . 7
- 1.1.3. URI, URL, and URN . . . . . . . . . . . . . . . 7
- 1.2. Design Considerations . . . . . . . . . . . . . . . . . 8
- 1.2.1. Transcription . . . . . . . . . . . . . . . . . 8
- 1.2.2. Separating Identification from Interaction . . . 9
- 1.2.3. Hierarchical Identifiers . . . . . . . . . . . . 10
- 1.3. Syntax Notation . . . . . . . . . . . . . . . . . . . . 11
- 2. Characters . . . . . . . . . . . . . . . . . . . . . . . . . . 11
- 2.1. Percent-Encoding . . . . . . . . . . . . . . . . . . . . 12
- 2.2. Reserved Characters . . . . . . . . . . . . . . . . . . 12
- 2.3. Unreserved Characters . . . . . . . . . . . . . . . . . 13
- 2.4. When to Encode or Decode . . . . . . . . . . . . . . . . 14
- 2.5. Identifying Data . . . . . . . . . . . . . . . . . . . . 14
- 3. Syntax Components . . . . . . . . . . . . . . . . . . . . . . 16
- 3.1. Scheme . . . . . . . . . . . . . . . . . . . . . . . . . 17
- 3.2. Authority . . . . . . . . . . . . . . . . . . . . . . . 17
- 3.2.1. User Information . . . . . . . . . . . . . . . . 18
- 3.2.2. Host . . . . . . . . . . . . . . . . . . . . . . 18
- 3.2.3. Port . . . . . . . . . . . . . . . . . . . . . . 22
- 3.3. Path . . . . . . . . . . . . . . . . . . . . . . . . . . 22
- 3.4. Query . . . . . . . . . . . . . . . . . . . . . . . . . 23
- 3.5. Fragment . . . . . . . . . . . . . . . . . . . . . . . . 24
- 4. Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
- 4.1. URI Reference . . . . . . . . . . . . . . . . . . . . . 25
- 4.2. Relative Reference . . . . . . . . . . . . . . . . . . . 26
- 4.3. Absolute URI . . . . . . . . . . . . . . . . . . . . . . 27
- 4.4. Same-Document Reference . . . . . . . . . . . . . . . . 27
- 4.5. Suffix Reference . . . . . . . . . . . . . . . . . . . . 27
- 5. Reference Resolution . . . . . . . . . . . . . . . . . . . . . 28
- 5.1. Establishing a Base URI . . . . . . . . . . . . . . . . 28
- 5.1.1. Base URI Embedded in Content . . . . . . . . . . 29
- 5.1.2. Base URI from the Encapsulating Entity . . . . . 29
- 5.1.3. Base URI from the Retrieval URI . . . . . . . . 30
- 5.1.4. Default Base URI . . . . . . . . . . . . . . . . 30
- 5.2. Relative Resolution . . . . . . . . . . . . . . . . . . 30
- 5.2.1. Pre-parse the Base URI . . . . . . . . . . . . . 31
- 5.2.2. Transform References . . . . . . . . . . . . . . 31
- 5.2.3. Merge Paths . . . . . . . . . . . . . . . . . . 32
- 5.2.4. Remove Dot Segments . . . . . . . . . . . . . . 33
- 5.3. Component Recomposition . . . . . . . . . . . . . . . . 35
- 5.4. Reference Resolution Examples . . . . . . . . . . . . . 35
- 5.4.1. Normal Examples . . . . . . . . . . . . . . . . 36
- 5.4.2. Abnormal Examples . . . . . . . . . . . . . . . 36
-
-
-
-Berners-Lee, et al. Standards Track [Page 2]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- 6. Normalization and Comparison . . . . . . . . . . . . . . . . . 38
- 6.1. Equivalence . . . . . . . . . . . . . . . . . . . . . . 38
- 6.2. Comparison Ladder . . . . . . . . . . . . . . . . . . . 39
- 6.2.1. Simple String Comparison . . . . . . . . . . . . 39
- 6.2.2. Syntax-Based Normalization . . . . . . . . . . . 40
- 6.2.3. Scheme-Based Normalization . . . . . . . . . . . 41
- 6.2.4. Protocol-Based Normalization . . . . . . . . . . 42
- 7. Security Considerations . . . . . . . . . . . . . . . . . . . 43
- 7.1. Reliability and Consistency . . . . . . . . . . . . . . 43
- 7.2. Malicious Construction . . . . . . . . . . . . . . . . . 43
- 7.3. Back-End Transcoding . . . . . . . . . . . . . . . . . . 44
- 7.4. Rare IP Address Formats . . . . . . . . . . . . . . . . 45
- 7.5. Sensitive Information . . . . . . . . . . . . . . . . . 45
- 7.6. Semantic Attacks . . . . . . . . . . . . . . . . . . . . 45
- 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46
- 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 46
- 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 46
- 10.1. Normative References . . . . . . . . . . . . . . . . . . 46
- 10.2. Informative References . . . . . . . . . . . . . . . . . 47
- A. Collected ABNF for URI . . . . . . . . . . . . . . . . . . . . 49
- B. Parsing a URI Reference with a Regular Expression . . . . . . 50
- C. Delimiting a URI in Context . . . . . . . . . . . . . . . . . 51
- D. Changes from RFC 2396 . . . . . . . . . . . . . . . . . . . . 53
- D.1. Additions . . . . . . . . . . . . . . . . . . . . . . . 53
- D.2. Modifications . . . . . . . . . . . . . . . . . . . . . 53
- Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
- Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 60
- Full Copyright Statement . . . . . . . . . . . . . . . . . . . . . 61
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 3]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-1. Introduction
-
- A Uniform Resource Identifier (URI) provides a simple and extensible
- means for identifying a resource. This specification of URI syntax
- and semantics is derived from concepts introduced by the World Wide
- Web global information initiative, whose use of these identifiers
- dates from 1990 and is described in "Universal Resource Identifiers
- in WWW" [RFC1630]. The syntax is designed to meet the
- recommendations laid out in "Functional Recommendations for Internet
- Resource Locators" [RFC1736] and "Functional Requirements for Uniform
- Resource Names" [RFC1737].
-
- This document obsoletes [RFC2396], which merged "Uniform Resource
- Locators" [RFC1738] and "Relative Uniform Resource Locators"
- [RFC1808] in order to define a single, generic syntax for all URIs.
- It obsoletes [RFC2732], which introduced syntax for an IPv6 address.
- It excludes portions of RFC 1738 that defined the specific syntax of
- individual URI schemes; those portions will be updated as separate
- documents. The process for registration of new URI schemes is
- defined separately by [BCP35]. Advice for designers of new URI
- schemes can be found in [RFC2718]. All significant changes from RFC
- 2396 are noted in Appendix D.
-
- This specification uses the terms "character" and "coded character
- set" in accordance with the definitions provided in [BCP19], and
- "character encoding" in place of what [BCP19] refers to as a
- "charset".
-
-1.1. Overview of URIs
-
- URIs are characterized as follows:
-
- Uniform
-
- Uniformity provides several benefits. It allows different types
- of resource identifiers to be used in the same context, even when
- the mechanisms used to access those resources may differ. It
- allows uniform semantic interpretation of common syntactic
- conventions across different types of resource identifiers. It
- allows introduction of new types of resource identifiers without
- interfering with the way that existing identifiers are used. It
- allows the identifiers to be reused in many different contexts,
- thus permitting new applications or protocols to leverage a pre-
- existing, large, and widely used set of resource identifiers.
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 4]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- Resource
-
- This specification does not limit the scope of what might be a
- resource; rather, the term "resource" is used in a general sense
- for whatever might be identified by a URI. Familiar examples
- include an electronic document, an image, a source of information
- with a consistent purpose (e.g., "today's weather report for Los
- Angeles"), a service (e.g., an HTTP-to-SMS gateway), and a
- collection of other resources. A resource is not necessarily
- accessible via the Internet; e.g., human beings, corporations, and
- bound books in a library can also be resources. Likewise,
- abstract concepts can be resources, such as the operators and
- operands of a mathematical equation, the types of a relationship
- (e.g., "parent" or "employee"), or numeric values (e.g., zero,
- one, and infinity).
-
- Identifier
-
- An identifier embodies the information required to distinguish
- what is being identified from all other things within its scope of
- identification. Our use of the terms "identify" and "identifying"
- refer to this purpose of distinguishing one resource from all
- other resources, regardless of how that purpose is accomplished
- (e.g., by name, address, or context). These terms should not be
- mistaken as an assumption that an identifier defines or embodies
- the identity of what is referenced, though that may be the case
- for some identifiers. Nor should it be assumed that a system
- using URIs will access the resource identified: in many cases,
- URIs are used to denote resources without any intention that they
- be accessed. Likewise, the "one" resource identified might not be
- singular in nature (e.g., a resource might be a named set or a
- mapping that varies over time).
-
- A URI is an identifier consisting of a sequence of characters
- matching the syntax rule named <URI> in Section 3. It enables
- uniform identification of resources via a separately defined
- extensible set of naming schemes (Section 3.1). How that
- identification is accomplished, assigned, or enabled is delegated to
- each scheme specification.
-
- This specification does not place any limits on the nature of a
- resource, the reasons why an application might seek to refer to a
- resource, or the kinds of systems that might use URIs for the sake of
- identifying resources. This specification does not require that a
- URI persists in identifying the same resource over time, though that
- is a common goal of all URI schemes. Nevertheless, nothing in this
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 5]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- specification prevents an application from limiting itself to
- particular types of resources, or to a subset of URIs that maintains
- characteristics desired by that application.
-
- URIs have a global scope and are interpreted consistently regardless
- of context, though the result of that interpretation may be in
- relation to the end-user's context. For example, "http://localhost/"
- has the same interpretation for every user of that reference, even
- though the network interface corresponding to "localhost" may be
- different for each end-user: interpretation is independent of access.
- However, an action made on the basis of that reference will take
- place in relation to the end-user's context, which implies that an
- action intended to refer to a globally unique thing must use a URI
- that distinguishes that resource from all other things. URIs that
- identify in relation to the end-user's local context should only be
- used when the context itself is a defining aspect of the resource,
- such as when an on-line help manual refers to a file on the end-
- user's file system (e.g., "file:///etc/hosts").
-
-1.1.1. Generic Syntax
-
- Each URI begins with a scheme name, as defined in Section 3.1, that
- refers to a specification for assigning identifiers within that
- scheme. As such, the URI syntax is a federated and extensible naming
- system wherein each scheme's specification may further restrict the
- syntax and semantics of identifiers using that scheme.
-
- This specification defines those elements of the URI syntax that are
- required of all URI schemes or are common to many URI schemes. It
- thus defines the syntax and semantics needed to implement a scheme-
- independent parsing mechanism for URI references, by which the
- scheme-dependent handling of a URI can be postponed until the
- scheme-dependent semantics are needed. Likewise, protocols and data
- formats that make use of URI references can refer to this
- specification as a definition for the range of syntax allowed for all
- URIs, including those schemes that have yet to be defined. This
- decouples the evolution of identification schemes from the evolution
- of protocols, data formats, and implementations that make use of
- URIs.
-
- A parser of the generic URI syntax can parse any URI reference into
- its major components. Once the scheme is determined, further
- scheme-specific parsing can be performed on the components. In other
- words, the URI generic syntax is a superset of the syntax of all URI
- schemes.
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 6]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-1.1.2. Examples
-
- The following example URIs illustrate several URI schemes and
- variations in their common syntax components:
-
- ftp://ftp.is.co.za/rfc/rfc1808.txt
-
- http://www.ietf.org/rfc/rfc2396.txt
-
- ldap://[2001:db8::7]/c=GB?objectClass?one
-
- mailto:John.Doe@example.com
-
- news:comp.infosystems.www.servers.unix
-
- tel:+1-816-555-1212
-
- telnet://192.0.2.16:80/
-
- urn:oasis:names:specification:docbook:dtd:xml:4.1.2
-
-
-1.1.3. URI, URL, and URN
-
- A URI can be further classified as a locator, a name, or both. The
- term "Uniform Resource Locator" (URL) refers to the subset of URIs
- that, in addition to identifying a resource, provide a means of
- locating the resource by describing its primary access mechanism
- (e.g., its network "location"). The term "Uniform Resource Name"
- (URN) has been used historically to refer to both URIs under the
- "urn" scheme [RFC2141], which are required to remain globally unique
- and persistent even when the resource ceases to exist or becomes
- unavailable, and to any other URI with the properties of a name.
-
- An individual scheme does not have to be classified as being just one
- of "name" or "locator". Instances of URIs from any given scheme may
- have the characteristics of names or locators or both, often
- depending on the persistence and care in the assignment of
- identifiers by the naming authority, rather than on any quality of
- the scheme. Future specifications and related documentation should
- use the general term "URI" rather than the more restrictive terms
- "URL" and "URN" [RFC3305].
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 7]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-1.2. Design Considerations
-
-1.2.1. Transcription
-
- The URI syntax has been designed with global transcription as one of
- its main considerations. A URI is a sequence of characters from a
- very limited set: the letters of the basic Latin alphabet, digits,
- and a few special characters. A URI may be represented in a variety
- of ways; e.g., ink on paper, pixels on a screen, or a sequence of
- character encoding octets. The interpretation of a URI depends only
- on the characters used and not on how those characters are
- represented in a network protocol.
-
- The goal of transcription can be described by a simple scenario.
- Imagine two colleagues, Sam and Kim, sitting in a pub at an
- international conference and exchanging research ideas. Sam asks Kim
- for a location to get more information, so Kim writes the URI for the
- research site on a napkin. Upon returning home, Sam takes out the
- napkin and types the URI into a computer, which then retrieves the
- information to which Kim referred.
-
- There are several design considerations revealed by the scenario:
-
- o A URI is a sequence of characters that is not always represented
- as a sequence of octets.
-
- o A URI might be transcribed from a non-network source and thus
- should consist of characters that are most likely able to be
- entered into a computer, within the constraints imposed by
- keyboards (and related input devices) across languages and
- locales.
-
- o A URI often has to be remembered by people, and it is easier for
- people to remember a URI when it consists of meaningful or
- familiar components.
-
- These design considerations are not always in alignment. For
- example, it is often the case that the most meaningful name for a URI
- component would require characters that cannot be typed into some
- systems. The ability to transcribe a resource identifier from one
- medium to another has been considered more important than having a
- URI consist of the most meaningful of components.
-
- In local or regional contexts and with improving technology, users
- might benefit from being able to use a wider range of characters;
- such use is not defined by this specification. Percent-encoded
- octets (Section 2.1) may be used within a URI to represent characters
- outside the range of the US-ASCII coded character set if this
-
-
-
-Berners-Lee, et al. Standards Track [Page 8]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- representation is allowed by the scheme or by the protocol element in
- which the URI is referenced. Such a definition should specify the
- character encoding used to map those characters to octets prior to
- being percent-encoded for the URI.
-
-1.2.2. Separating Identification from Interaction
-
- A common misunderstanding of URIs is that they are only used to refer
- to accessible resources. The URI itself only provides
- identification; access to the resource is neither guaranteed nor
- implied by the presence of a URI. Instead, any operation associated
- with a URI reference is defined by the protocol element, data format
- attribute, or natural language text in which it appears.
-
- Given a URI, a system may attempt to perform a variety of operations
- on the resource, as might be characterized by words such as "access",
- "update", "replace", or "find attributes". Such operations are
- defined by the protocols that make use of URIs, not by this
- specification. However, we do use a few general terms for describing
- common operations on URIs. URI "resolution" is the process of
- determining an access mechanism and the appropriate parameters
- necessary to dereference a URI; this resolution may require several
- iterations. To use that access mechanism to perform an action on the
- URI's resource is to "dereference" the URI.
-
- When URIs are used within information retrieval systems to identify
- sources of information, the most common form of URI dereference is
- "retrieval": making use of a URI in order to retrieve a
- representation of its associated resource. A "representation" is a
- sequence of octets, along with representation metadata describing
- those octets, that constitutes a record of the state of the resource
- at the time when the representation is generated. Retrieval is
- achieved by a process that might include using the URI as a cache key
- to check for a locally cached representation, resolution of the URI
- to determine an appropriate access mechanism (if any), and
- dereference of the URI for the sake of applying a retrieval
- operation. Depending on the protocols used to perform the retrieval,
- additional information might be supplied about the resource (resource
- metadata) and its relation to other resources.
-
- URI references in information retrieval systems are designed to be
- late-binding: the result of an access is generally determined when it
- is accessed and may vary over time or due to other aspects of the
- interaction. These references are created in order to be used in the
- future: what is being identified is not some specific result that was
- obtained in the past, but rather some characteristic that is expected
- to be true for future results. In such cases, the resource referred
- to by the URI is actually a sameness of characteristics as observed
-
-
-
-Berners-Lee, et al. Standards Track [Page 9]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- over time, perhaps elucidated by additional comments or assertions
- made by the resource provider.
-
- Although many URI schemes are named after protocols, this does not
- imply that use of these URIs will result in access to the resource
- via the named protocol. URIs are often used simply for the sake of
- identification. Even when a URI is used to retrieve a representation
- of a resource, that access might be through gateways, proxies,
- caches, and name resolution services that are independent of the
- protocol associated with the scheme name. The resolution of some
- URIs may require the use of more than one protocol (e.g., both DNS
- and HTTP are typically used to access an "http" URI's origin server
- when a representation isn't found in a local cache).
-
-1.2.3. Hierarchical Identifiers
-
- The URI syntax is organized hierarchically, with components listed in
- order of decreasing significance from left to right. For some URI
- schemes, the visible hierarchy is limited to the scheme itself:
- everything after the scheme component delimiter (":") is considered
- opaque to URI processing. Other URI schemes make the hierarchy
- explicit and visible to generic parsing algorithms.
-
- The generic syntax uses the slash ("/"), question mark ("?"), and
- number sign ("#") characters to delimit components that are
- significant to the generic parser's hierarchical interpretation of an
- identifier. In addition to aiding the readability of such
- identifiers through the consistent use of familiar syntax, this
- uniform representation of hierarchy across naming schemes allows
- scheme-independent references to be made relative to that hierarchy.
-
- It is often the case that a group or "tree" of documents has been
- constructed to serve a common purpose, wherein the vast majority of
- URI references in these documents point to resources within the tree
- rather than outside it. Similarly, documents located at a particular
- site are much more likely to refer to other resources at that site
- than to resources at remote sites. Relative referencing of URIs
- allows document trees to be partially independent of their location
- and access scheme. For instance, it is possible for a single set of
- hypertext documents to be simultaneously accessible and traversable
- via each of the "file", "http", and "ftp" schemes if the documents
- refer to each other with relative references. Furthermore, such
- document trees can be moved, as a whole, without changing any of the
- relative references.
-
- A relative reference (Section 4.2) refers to a resource by describing
- the difference within a hierarchical name space between the reference
- context and the target URI. The reference resolution algorithm,
-
-
-
-Berners-Lee, et al. Standards Track [Page 10]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- presented in Section 5, defines how such a reference is transformed
- to the target URI. As relative references can only be used within
- the context of a hierarchical URI, designers of new URI schemes
- should use a syntax consistent with the generic syntax's hierarchical
- components unless there are compelling reasons to forbid relative
- referencing within that scheme.
-
- NOTE: Previous specifications used the terms "partial URI" and
- "relative URI" to denote a relative reference to a URI. As some
- readers misunderstood those terms to mean that relative URIs are a
- subset of URIs rather than a method of referencing URIs, this
- specification simply refers to them as relative references.
-
- All URI references are parsed by generic syntax parsers when used.
- However, because hierarchical processing has no effect on an absolute
- URI used in a reference unless it contains one or more dot-segments
- (complete path segments of "." or "..", as described in Section 3.3),
- URI scheme specifications can define opaque identifiers by
- disallowing use of slash characters, question mark characters, and
- the URIs "scheme:." and "scheme:..".
-
-1.3. Syntax Notation
-
- This specification uses the Augmented Backus-Naur Form (ABNF)
- notation of [RFC2234], including the following core ABNF syntax rules
- defined by that specification: ALPHA (letters), CR (carriage return),
- DIGIT (decimal digits), DQUOTE (double quote), HEXDIG (hexadecimal
- digits), LF (line feed), and SP (space). The complete URI syntax is
- collected in Appendix A.
-
-2. Characters
-
- The URI syntax provides a method of encoding data, presumably for the
- sake of identifying a resource, as a sequence of characters. The URI
- characters are, in turn, frequently encoded as octets for transport
- or presentation. This specification does not mandate any particular
- character encoding for mapping between URI characters and the octets
- used to store or transmit those characters. When a URI appears in a
- protocol element, the character encoding is defined by that protocol;
- without such a definition, a URI is assumed to be in the same
- character encoding as the surrounding text.
-
- The ABNF notation defines its terminal values to be non-negative
- integers (codepoints) based on the US-ASCII coded character set
- [ASCII]. Because a URI is a sequence of characters, we must invert
- that relation in order to understand the URI syntax. Therefore, the
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 11]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- integer values used by the ABNF must be mapped back to their
- corresponding characters via US-ASCII in order to complete the syntax
- rules.
-
- A URI is composed from a limited set of characters consisting of
- digits, letters, and a few graphic symbols. A reserved subset of
- those characters may be used to delimit syntax components within a
- URI while the remaining characters, including both the unreserved set
- and those reserved characters not acting as delimiters, define each
- component's identifying data.
-
-2.1. Percent-Encoding
-
- A percent-encoding mechanism is used to represent a data octet in a
- component when that octet's corresponding character is outside the
- allowed set or is being used as a delimiter of, or within, the
- component. A percent-encoded octet is encoded as a character
- triplet, consisting of the percent character "%" followed by the two
- hexadecimal digits representing that octet's numeric value. For
- example, "%20" is the percent-encoding for the binary octet
- "00100000" (ABNF: %x20), which in US-ASCII corresponds to the space
- character (SP). Section 2.4 describes when percent-encoding and
- decoding is applied.
-
- pct-encoded = "%" HEXDIG HEXDIG
-
- The uppercase hexadecimal digits 'A' through 'F' are equivalent to
- the lowercase digits 'a' through 'f', respectively. If two URIs
- differ only in the case of hexadecimal digits used in percent-encoded
- octets, they are equivalent. For consistency, URI producers and
- normalizers should use uppercase hexadecimal digits for all percent-
- encodings.
-
-2.2. Reserved Characters
-
- URIs include components and subcomponents that are delimited by
- characters in the "reserved" set. These characters are called
- "reserved" because they may (or may not) be defined as delimiters by
- the generic syntax, by each scheme-specific syntax, or by the
- implementation-specific syntax of a URI's dereferencing algorithm.
- If data for a URI component would conflict with a reserved
- character's purpose as a delimiter, then the conflicting data must be
- percent-encoded before the URI is formed.
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 12]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- reserved = gen-delims / sub-delims
-
- gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
-
- sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
- / "*" / "+" / "," / ";" / "="
-
- The purpose of reserved characters is to provide a set of delimiting
- characters that are distinguishable from other data within a URI.
- URIs that differ in the replacement of a reserved character with its
- corresponding percent-encoded octet are not equivalent. Percent-
- encoding a reserved character, or decoding a percent-encoded octet
- that corresponds to a reserved character, will change how the URI is
- interpreted by most applications. Thus, characters in the reserved
- set are protected from normalization and are therefore safe to be
- used by scheme-specific and producer-specific algorithms for
- delimiting data subcomponents within a URI.
-
- A subset of the reserved characters (gen-delims) is used as
- delimiters of the generic URI components described in Section 3. A
- component's ABNF syntax rule will not use the reserved or gen-delims
- rule names directly; instead, each syntax rule lists the characters
- allowed within that component (i.e., not delimiting it), and any of
- those characters that are also in the reserved set are "reserved" for
- use as subcomponent delimiters within the component. Only the most
- common subcomponents are defined by this specification; other
- subcomponents may be defined by a URI scheme's specification, or by
- the implementation-specific syntax of a URI's dereferencing
- algorithm, provided that such subcomponents are delimited by
- characters in the reserved set allowed within that component.
-
- URI producing applications should percent-encode data octets that
- correspond to characters in the reserved set unless these characters
- are specifically allowed by the URI scheme to represent data in that
- component. If a reserved character is found in a URI component and
- no delimiting role is known for that character, then it must be
- interpreted as representing the data octet corresponding to that
- character's encoding in US-ASCII.
-
-2.3. Unreserved Characters
-
- Characters that are allowed in a URI but do not have a reserved
- purpose are called unreserved. These include uppercase and lowercase
- letters, decimal digits, hyphen, period, underscore, and tilde.
-
- unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 13]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- URIs that differ in the replacement of an unreserved character with
- its corresponding percent-encoded US-ASCII octet are equivalent: they
- identify the same resource. However, URI comparison implementations
- do not always perform normalization prior to comparison (see Section
- 6). For consistency, percent-encoded octets in the ranges of ALPHA
- (%41-%5A and %61-%7A), DIGIT (%30-%39), hyphen (%2D), period (%2E),
- underscore (%5F), or tilde (%7E) should not be created by URI
- producers and, when found in a URI, should be decoded to their
- corresponding unreserved characters by URI normalizers.
-
-2.4. When to Encode or Decode
-
- Under normal circumstances, the only time when octets within a URI
- are percent-encoded is during the process of producing the URI from
- its component parts. This is when an implementation determines which
- of the reserved characters are to be used as subcomponent delimiters
- and which can be safely used as data. Once produced, a URI is always
- in its percent-encoded form.
-
- When a URI is dereferenced, the components and subcomponents
- significant to the scheme-specific dereferencing process (if any)
- must be parsed and separated before the percent-encoded octets within
- those components can be safely decoded, as otherwise the data may be
- mistaken for component delimiters. The only exception is for
- percent-encoded octets corresponding to characters in the unreserved
- set, which can be decoded at any time. For example, the octet
- corresponding to the tilde ("~") character is often encoded as "%7E"
- by older URI processing implementations; the "%7E" can be replaced by
- "~" without changing its interpretation.
-
- Because the percent ("%") character serves as the indicator for
- percent-encoded octets, it must be percent-encoded as "%25" for that
- octet to be used as data within a URI. Implementations must not
- percent-encode or decode the same string more than once, as decoding
- an already decoded string might lead to misinterpreting a percent
- data octet as the beginning of a percent-encoding, or vice versa in
- the case of percent-encoding an already percent-encoded string.
-
-2.5. Identifying Data
-
- URI characters provide identifying data for each of the URI
- components, serving as an external interface for identification
- between systems. Although the presence and nature of the URI
- production interface is hidden from clients that use its URIs (and is
- thus beyond the scope of the interoperability requirements defined by
- this specification), it is a frequent source of confusion and errors
- in the interpretation of URI character issues. Implementers have to
- be aware that there are multiple character encodings involved in the
-
-
-
-Berners-Lee, et al. Standards Track [Page 14]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- production and transmission of URIs: local name and data encoding,
- public interface encoding, URI character encoding, data format
- encoding, and protocol encoding.
-
- Local names, such as file system names, are stored with a local
- character encoding. URI producing applications (e.g., origin
- servers) will typically use the local encoding as the basis for
- producing meaningful names. The URI producer will transform the
- local encoding to one that is suitable for a public interface and
- then transform the public interface encoding into the restricted set
- of URI characters (reserved, unreserved, and percent-encodings).
- Those characters are, in turn, encoded as octets to be used as a
- reference within a data format (e.g., a document charset), and such
- data formats are often subsequently encoded for transmission over
- Internet protocols.
-
- For most systems, an unreserved character appearing within a URI
- component is interpreted as representing the data octet corresponding
- to that character's encoding in US-ASCII. Consumers of URIs assume
- that the letter "X" corresponds to the octet "01011000", and even
- when that assumption is incorrect, there is no harm in making it. A
- system that internally provides identifiers in the form of a
- different character encoding, such as EBCDIC, will generally perform
- character translation of textual identifiers to UTF-8 [STD63] (or
- some other superset of the US-ASCII character encoding) at an
- internal interface, thereby providing more meaningful identifiers
- than those resulting from simply percent-encoding the original
- octets.
-
- For example, consider an information service that provides data,
- stored locally using an EBCDIC-based file system, to clients on the
- Internet through an HTTP server. When an author creates a file with
- the name "Laguna Beach" on that file system, the "http" URI
- corresponding to that resource is expected to contain the meaningful
- string "Laguna%20Beach". If, however, that server produces URIs by
- using an overly simplistic raw octet mapping, then the result would
- be a URI containing "%D3%81%87%A4%95%81@%C2%85%81%83%88". An
- internal transcoding interface fixes this problem by transcoding the
- local name to a superset of US-ASCII prior to producing the URI.
- Naturally, proper interpretation of an incoming URI on such an
- interface requires that percent-encoded octets be decoded (e.g.,
- "%20" to SP) before the reverse transcoding is applied to obtain the
- local name.
-
- In some cases, the internal interface between a URI component and the
- identifying data that it has been crafted to represent is much less
- direct than a character encoding translation. For example, portions
- of a URI might reflect a query on non-ASCII data, or numeric
-
-
-
-Berners-Lee, et al. Standards Track [Page 15]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- coordinates on a map. Likewise, a URI scheme may define components
- with additional encoding requirements that are applied prior to
- forming the component and producing the URI.
-
- When a new URI scheme defines a component that represents textual
- data consisting of characters from the Universal Character Set [UCS],
- the data should first be encoded as octets according to the UTF-8
- character encoding [STD63]; then only those octets that do not
- correspond to characters in the unreserved set should be percent-
- encoded. For example, the character A would be represented as "A",
- the character LATIN CAPITAL LETTER A WITH GRAVE would be represented
- as "%C3%80", and the character KATAKANA LETTER A would be represented
- as "%E3%82%A2".
-
-3. Syntax Components
-
- The generic URI syntax consists of a hierarchical sequence of
- components referred to as the scheme, authority, path, query, and
- fragment.
-
- URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
-
- hier-part = "//" authority path-abempty
- / path-absolute
- / path-rootless
- / path-empty
-
- The scheme and path components are required, though the path may be
- empty (no characters). When authority is present, the path must
- either be empty or begin with a slash ("/") character. When
- authority is not present, the path cannot begin with two slash
- characters ("//"). These restrictions result in five different ABNF
- rules for a path (Section 3.3), only one of which will match any
- given URI reference.
-
- The following are two example URIs and their component parts:
-
- foo://example.com:8042/over/there?name=ferret#nose
- \_/ \______________/\_________/ \_________/ \__/
- | | | | |
- scheme authority path query fragment
- | _____________________|__
- / \ / \
- urn:example:animal:ferret:nose
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 16]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-3.1. Scheme
-
- Each URI begins with a scheme name that refers to a specification for
- assigning identifiers within that scheme. As such, the URI syntax is
- a federated and extensible naming system wherein each scheme's
- specification may further restrict the syntax and semantics of
- identifiers using that scheme.
-
- Scheme names consist of a sequence of characters beginning with a
- letter and followed by any combination of letters, digits, plus
- ("+"), period ("."), or hyphen ("-"). Although schemes are case-
- insensitive, the canonical form is lowercase and documents that
- specify schemes must do so with lowercase letters. An implementation
- should accept uppercase letters as equivalent to lowercase in scheme
- names (e.g., allow "HTTP" as well as "http") for the sake of
- robustness but should only produce lowercase scheme names for
- consistency.
-
- scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
-
- Individual schemes are not specified by this document. The process
- for registration of new URI schemes is defined separately by [BCP35].
- The scheme registry maintains the mapping between scheme names and
- their specifications. Advice for designers of new URI schemes can be
- found in [RFC2718]. URI scheme specifications must define their own
- syntax so that all strings matching their scheme-specific syntax will
- also match the <absolute-URI> grammar, as described in Section 4.3.
-
- When presented with a URI that violates one or more scheme-specific
- restrictions, the scheme-specific resolution process should flag the
- reference as an error rather than ignore the unused parts; doing so
- reduces the number of equivalent URIs and helps detect abuses of the
- generic syntax, which might indicate that the URI has been
- constructed to mislead the user (Section 7.6).
-
-3.2. Authority
-
- Many URI schemes include a hierarchical element for a naming
- authority so that governance of the name space defined by the
- remainder of the URI is delegated to that authority (which may, in
- turn, delegate it further). The generic syntax provides a common
- means for distinguishing an authority based on a registered name or
- server address, along with optional port and user information.
-
- The authority component is preceded by a double slash ("//") and is
- terminated by the next slash ("/"), question mark ("?"), or number
- sign ("#") character, or by the end of the URI.
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 17]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- authority = [ userinfo "@" ] host [ ":" port ]
-
- URI producers and normalizers should omit the ":" delimiter that
- separates host from port if the port component is empty. Some
- schemes do not allow the userinfo and/or port subcomponents.
-
- If a URI contains an authority component, then the path component
- must either be empty or begin with a slash ("/") character. Non-
- validating parsers (those that merely separate a URI reference into
- its major components) will often ignore the subcomponent structure of
- authority, treating it as an opaque string from the double-slash to
- the first terminating delimiter, until such time as the URI is
- dereferenced.
-
-3.2.1. User Information
-
- The userinfo subcomponent may consist of a user name and, optionally,
- scheme-specific information about how to gain authorization to access
- the resource. The user information, if present, is followed by a
- commercial at-sign ("@") that delimits it from the host.
-
- userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
-
- Use of the format "user:password" in the userinfo field is
- deprecated. Applications should not render as clear text any data
- after the first colon (":") character found within a userinfo
- subcomponent unless the data after the colon is the empty string
- (indicating no password). Applications may choose to ignore or
- reject such data when it is received as part of a reference and
- should reject the storage of such data in unencrypted form. The
- passing of authentication information in clear text has proven to be
- a security risk in almost every case where it has been used.
-
- Applications that render a URI for the sake of user feedback, such as
- in graphical hypertext browsing, should render userinfo in a way that
- is distinguished from the rest of a URI, when feasible. Such
- rendering will assist the user in cases where the userinfo has been
- misleadingly crafted to look like a trusted domain name
- (Section 7.6).
-
-3.2.2. Host
-
- The host subcomponent of authority is identified by an IP literal
- encapsulated within square brackets, an IPv4 address in dotted-
- decimal form, or a registered name. The host subcomponent is case-
- insensitive. The presence of a host subcomponent within a URI does
- not imply that the scheme requires access to the given host on the
- Internet. In many cases, the host syntax is used only for the sake
-
-
-
-Berners-Lee, et al. Standards Track [Page 18]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- of reusing the existing registration process created and deployed for
- DNS, thus obtaining a globally unique name without the cost of
- deploying another registry. However, such use comes with its own
- costs: domain name ownership may change over time for reasons not
- anticipated by the URI producer. In other cases, the data within the
- host component identifies a registered name that has nothing to do
- with an Internet host. We use the name "host" for the ABNF rule
- because that is its most common purpose, not its only purpose.
-
- host = IP-literal / IPv4address / reg-name
-
- The syntax rule for host is ambiguous because it does not completely
- distinguish between an IPv4address and a reg-name. In order to
- disambiguate the syntax, we apply the "first-match-wins" algorithm:
- If host matches the rule for IPv4address, then it should be
- considered an IPv4 address literal and not a reg-name. Although host
- is case-insensitive, producers and normalizers should use lowercase
- for registered names and hexadecimal addresses for the sake of
- uniformity, while only using uppercase letters for percent-encodings.
-
- A host identified by an Internet Protocol literal address, version 6
- [RFC3513] or later, is distinguished by enclosing the IP literal
- within square brackets ("[" and "]"). This is the only place where
- square bracket characters are allowed in the URI syntax. In
- anticipation of future, as-yet-undefined IP literal address formats,
- an implementation may use an optional version flag to indicate such a
- format explicitly rather than rely on heuristic determination.
-
- IP-literal = "[" ( IPv6address / IPvFuture ) "]"
-
- IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
-
- The version flag does not indicate the IP version; rather, it
- indicates future versions of the literal format. As such,
- implementations must not provide the version flag for the existing
- IPv4 and IPv6 literal address forms described below. If a URI
- containing an IP-literal that starts with "v" (case-insensitive),
- indicating that the version flag is present, is dereferenced by an
- application that does not know the meaning of that version flag, then
- the application should return an appropriate error for "address
- mechanism not supported".
-
- A host identified by an IPv6 literal address is represented inside
- the square brackets without a preceding version flag. The ABNF
- provided here is a translation of the text definition of an IPv6
- literal address provided in [RFC3513]. This syntax does not support
- IPv6 scoped addressing zone identifiers.
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 19]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- A 128-bit IPv6 address is divided into eight 16-bit pieces. Each
- piece is represented numerically in case-insensitive hexadecimal,
- using one to four hexadecimal digits (leading zeroes are permitted).
- The eight encoded pieces are given most-significant first, separated
- by colon characters. Optionally, the least-significant two pieces
- may instead be represented in IPv4 address textual format. A
- sequence of one or more consecutive zero-valued 16-bit pieces within
- the address may be elided, omitting all their digits and leaving
- exactly two consecutive colons in their place to mark the elision.
-
- IPv6address = 6( h16 ":" ) ls32
- / "::" 5( h16 ":" ) ls32
- / [ h16 ] "::" 4( h16 ":" ) ls32
- / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
- / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
- / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32
- / [ *4( h16 ":" ) h16 ] "::" ls32
- / [ *5( h16 ":" ) h16 ] "::" h16
- / [ *6( h16 ":" ) h16 ] "::"
-
- ls32 = ( h16 ":" h16 ) / IPv4address
- ; least-significant 32 bits of address
-
- h16 = 1*4HEXDIG
- ; 16 bits of address represented in hexadecimal
-
- A host identified by an IPv4 literal address is represented in
- dotted-decimal notation (a sequence of four decimal numbers in the
- range 0 to 255, separated by "."), as described in [RFC1123] by
- reference to [RFC0952]. Note that other forms of dotted notation may
- be interpreted on some platforms, as described in Section 7.4, but
- only the dotted-decimal form of four octets is allowed by this
- grammar.
-
- IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet
-
- dec-octet = DIGIT ; 0-9
- / %x31-39 DIGIT ; 10-99
- / "1" 2DIGIT ; 100-199
- / "2" %x30-34 DIGIT ; 200-249
- / "25" %x30-35 ; 250-255
-
- A host identified by a registered name is a sequence of characters
- usually intended for lookup within a locally defined host or service
- name registry, though the URI's scheme-specific semantics may require
- that a specific registry (or fixed name table) be used instead. The
- most common name registry mechanism is the Domain Name System (DNS).
- A registered name intended for lookup in the DNS uses the syntax
-
-
-
-Berners-Lee, et al. Standards Track [Page 20]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- defined in Section 3.5 of [RFC1034] and Section 2.1 of [RFC1123].
- Such a name consists of a sequence of domain labels separated by ".",
- each domain label starting and ending with an alphanumeric character
- and possibly also containing "-" characters. The rightmost domain
- label of a fully qualified domain name in DNS may be followed by a
- single "." and should be if it is necessary to distinguish between
- the complete domain name and some local domain.
-
- reg-name = *( unreserved / pct-encoded / sub-delims )
-
- If the URI scheme defines a default for host, then that default
- applies when the host subcomponent is undefined or when the
- registered name is empty (zero length). For example, the "file" URI
- scheme is defined so that no authority, an empty host, and
- "localhost" all mean the end-user's machine, whereas the "http"
- scheme considers a missing authority or empty host invalid.
-
- This specification does not mandate a particular registered name
- lookup technology and therefore does not restrict the syntax of reg-
- name beyond what is necessary for interoperability. Instead, it
- delegates the issue of registered name syntax conformance to the
- operating system of each application performing URI resolution, and
- that operating system decides what it will allow for the purpose of
- host identification. A URI resolution implementation might use DNS,
- host tables, yellow pages, NetInfo, WINS, or any other system for
- lookup of registered names. However, a globally scoped naming
- system, such as DNS fully qualified domain names, is necessary for
- URIs intended to have global scope. URI producers should use names
- that conform to the DNS syntax, even when use of DNS is not
- immediately apparent, and should limit these names to no more than
- 255 characters in length.
-
- The reg-name syntax allows percent-encoded octets in order to
- represent non-ASCII registered names in a uniform way that is
- independent of the underlying name resolution technology. Non-ASCII
- characters must first be encoded according to UTF-8 [STD63], and then
- each octet of the corresponding UTF-8 sequence must be percent-
- encoded to be represented as URI characters. URI producing
- applications must not use percent-encoding in host unless it is used
- to represent a UTF-8 character sequence. When a non-ASCII registered
- name represents an internationalized domain name intended for
- resolution via the DNS, the name must be transformed to the IDNA
- encoding [RFC3490] prior to name lookup. URI producers should
- provide these registered names in the IDNA encoding, rather than a
- percent-encoding, if they wish to maximize interoperability with
- legacy URI resolvers.
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 21]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-3.2.3. Port
-
- The port subcomponent of authority is designated by an optional port
- number in decimal following the host and delimited from it by a
- single colon (":") character.
-
- port = *DIGIT
-
- A scheme may define a default port. For example, the "http" scheme
- defines a default port of "80", corresponding to its reserved TCP
- port number. The type of port designated by the port number (e.g.,
- TCP, UDP, SCTP) is defined by the URI scheme. URI producers and
- normalizers should omit the port component and its ":" delimiter if
- port is empty or if its value would be the same as that of the
- scheme's default.
-
-3.3. Path
-
- The path component contains data, usually organized in hierarchical
- form, that, along with data in the non-hierarchical query component
- (Section 3.4), serves to identify a resource within the scope of the
- URI's scheme and naming authority (if any). The path is terminated
- by the first question mark ("?") or number sign ("#") character, or
- by the end of the URI.
-
- If a URI contains an authority component, then the path component
- must either be empty or begin with a slash ("/") character. If a URI
- does not contain an authority component, then the path cannot begin
- with two slash characters ("//"). In addition, a URI reference
- (Section 4.1) may be a relative-path reference, in which case the
- first path segment cannot contain a colon (":") character. The ABNF
- requires five separate rules to disambiguate these cases, only one of
- which will match the path substring within a given URI reference. We
- use the generic term "path component" to describe the URI substring
- matched by the parser to one of these rules.
-
- path = path-abempty ; begins with "/" or is empty
- / path-absolute ; begins with "/" but not "//"
- / path-noscheme ; begins with a non-colon segment
- / path-rootless ; begins with a segment
- / path-empty ; zero characters
-
- path-abempty = *( "/" segment )
- path-absolute = "/" [ segment-nz *( "/" segment ) ]
- path-noscheme = segment-nz-nc *( "/" segment )
- path-rootless = segment-nz *( "/" segment )
- path-empty = 0<pchar>
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 22]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- segment = *pchar
- segment-nz = 1*pchar
- segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
- ; non-zero-length segment without any colon ":"
-
- pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
-
- A path consists of a sequence of path segments separated by a slash
- ("/") character. A path is always defined for a URI, though the
- defined path may be empty (zero length). Use of the slash character
- to indicate hierarchy is only required when a URI will be used as the
- context for relative references. For example, the URI
- <mailto:fred@example.com> has a path of "fred@example.com", whereas
- the URI <foo://info.example.com?fred> has an empty path.
-
- The path segments "." and "..", also known as dot-segments, are
- defined for relative reference within the path name hierarchy. They
- are intended for use at the beginning of a relative-path reference
- (Section 4.2) to indicate relative position within the hierarchical
- tree of names. This is similar to their role within some operating
- systems' file directory structures to indicate the current directory
- and parent directory, respectively. However, unlike in a file
- system, these dot-segments are only interpreted within the URI path
- hierarchy and are removed as part of the resolution process (Section
- 5.2).
-
- Aside from dot-segments in hierarchical paths, a path segment is
- considered opaque by the generic syntax. URI producing applications
- often use the reserved characters allowed in a segment to delimit
- scheme-specific or dereference-handler-specific subcomponents. For
- example, the semicolon (";") and equals ("=") reserved characters are
- often used to delimit parameters and parameter values applicable to
- that segment. The comma (",") reserved character is often used for
- similar purposes. For example, one URI producer might use a segment
- such as "name;v=1.1" to indicate a reference to version 1.1 of
- "name", whereas another might use a segment such as "name,1.1" to
- indicate the same. Parameter types may be defined by scheme-specific
- semantics, but in most cases the syntax of a parameter is specific to
- the implementation of the URI's dereferencing algorithm.
-
-3.4. Query
-
- The query component contains non-hierarchical data that, along with
- data in the path component (Section 3.3), serves to identify a
- resource within the scope of the URI's scheme and naming authority
- (if any). The query component is indicated by the first question
- mark ("?") character and terminated by a number sign ("#") character
- or by the end of the URI.
-
-
-
-Berners-Lee, et al. Standards Track [Page 23]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- query = *( pchar / "/" / "?" )
-
- The characters slash ("/") and question mark ("?") may represent data
- within the query component. Beware that some older, erroneous
- implementations may not handle such data correctly when it is used as
- the base URI for relative references (Section 5.1), apparently
- because they fail to distinguish query data from path data when
- looking for hierarchical separators. However, as query components
- are often used to carry identifying information in the form of
- "key=value" pairs and one frequently used value is a reference to
- another URI, it is sometimes better for usability to avoid percent-
- encoding those characters.
-
-3.5. Fragment
-
- The fragment identifier component of a URI allows indirect
- identification of a secondary resource by reference to a primary
- resource and additional identifying information. The identified
- secondary resource may be some portion or subset of the primary
- resource, some view on representations of the primary resource, or
- some other resource defined or described by those representations. A
- fragment identifier component is indicated by the presence of a
- number sign ("#") character and terminated by the end of the URI.
-
- fragment = *( pchar / "/" / "?" )
-
- The semantics of a fragment identifier are defined by the set of
- representations that might result from a retrieval action on the
- primary resource. The fragment's format and resolution is therefore
- dependent on the media type [RFC2046] of a potentially retrieved
- representation, even though such a retrieval is only performed if the
- URI is dereferenced. If no such representation exists, then the
- semantics of the fragment are considered unknown and are effectively
- unconstrained. Fragment identifier semantics are independent of the
- URI scheme and thus cannot be redefined by scheme specifications.
-
- Individual media types may define their own restrictions on or
- structures within the fragment identifier syntax for specifying
- different types of subsets, views, or external references that are
- identifiable as secondary resources by that media type. If the
- primary resource has multiple representations, as is often the case
- for resources whose representation is selected based on attributes of
- the retrieval request (a.k.a., content negotiation), then whatever is
- identified by the fragment should be consistent across all of those
- representations. Each representation should either define the
- fragment so that it corresponds to the same secondary resource,
- regardless of how it is represented, or should leave the fragment
- undefined (i.e., not found).
-
-
-
-Berners-Lee, et al. Standards Track [Page 24]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- As with any URI, use of a fragment identifier component does not
- imply that a retrieval action will take place. A URI with a fragment
- identifier may be used to refer to the secondary resource without any
- implication that the primary resource is accessible or will ever be
- accessed.
-
- Fragment identifiers have a special role in information retrieval
- systems as the primary form of client-side indirect referencing,
- allowing an author to specifically identify aspects of an existing
- resource that are only indirectly provided by the resource owner. As
- such, the fragment identifier is not used in the scheme-specific
- processing of a URI; instead, the fragment identifier is separated
- from the rest of the URI prior to a dereference, and thus the
- identifying information within the fragment itself is dereferenced
- solely by the user agent, regardless of the URI scheme. Although
- this separate handling is often perceived to be a loss of
- information, particularly for accurate redirection of references as
- resources move over time, it also serves to prevent information
- providers from denying reference authors the right to refer to
- information within a resource selectively. Indirect referencing also
- provides additional flexibility and extensibility to systems that use
- URIs, as new media types are easier to define and deploy than new
- schemes of identification.
-
- The characters slash ("/") and question mark ("?") are allowed to
- represent data within the fragment identifier. Beware that some
- older, erroneous implementations may not handle this data correctly
- when it is used as the base URI for relative references (Section
- 5.1).
-
-4. Usage
-
- When applications make reference to a URI, they do not always use the
- full form of reference defined by the "URI" syntax rule. To save
- space and take advantage of hierarchical locality, many Internet
- protocol elements and media type formats allow an abbreviation of a
- URI, whereas others restrict the syntax to a particular form of URI.
- We define the most common forms of reference syntax in this
- specification because they impact and depend upon the design of the
- generic syntax, requiring a uniform parsing algorithm in order to be
- interpreted consistently.
-
-4.1. URI Reference
-
- URI-reference is used to denote the most common usage of a resource
- identifier.
-
- URI-reference = URI / relative-ref
-
-
-
-Berners-Lee, et al. Standards Track [Page 25]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- A URI-reference is either a URI or a relative reference. If the
- URI-reference's prefix does not match the syntax of a scheme followed
- by its colon separator, then the URI-reference is a relative
- reference.
-
- A URI-reference is typically parsed first into the five URI
- components, in order to determine what components are present and
- whether the reference is relative. Then, each component is parsed
- for its subparts and their validation. The ABNF of URI-reference,
- along with the "first-match-wins" disambiguation rule, is sufficient
- to define a validating parser for the generic syntax. Readers
- familiar with regular expressions should see Appendix B for an
- example of a non-validating URI-reference parser that will take any
- given string and extract the URI components.
-
-4.2. Relative Reference
-
- A relative reference takes advantage of the hierarchical syntax
- (Section 1.2.3) to express a URI reference relative to the name space
- of another hierarchical URI.
-
- relative-ref = relative-part [ "?" query ] [ "#" fragment ]
-
- relative-part = "//" authority path-abempty
- / path-absolute
- / path-noscheme
- / path-empty
-
- The URI referred to by a relative reference, also known as the target
- URI, is obtained by applying the reference resolution algorithm of
- Section 5.
-
- A relative reference that begins with two slash characters is termed
- a network-path reference; such references are rarely used. A
- relative reference that begins with a single slash character is
- termed an absolute-path reference. A relative reference that does
- not begin with a slash character is termed a relative-path reference.
-
- A path segment that contains a colon character (e.g., "this:that")
- cannot be used as the first segment of a relative-path reference, as
- it would be mistaken for a scheme name. Such a segment must be
- preceded by a dot-segment (e.g., "./this:that") to make a relative-
- path reference.
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 26]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-4.3. Absolute URI
-
- Some protocol elements allow only the absolute form of a URI without
- a fragment identifier. For example, defining a base URI for later
- use by relative references calls for an absolute-URI syntax rule that
- does not allow a fragment.
-
- absolute-URI = scheme ":" hier-part [ "?" query ]
-
- URI scheme specifications must define their own syntax so that all
- strings matching their scheme-specific syntax will also match the
- <absolute-URI> grammar. Scheme specifications will not define
- fragment identifier syntax or usage, regardless of its applicability
- to resources identifiable via that scheme, as fragment identification
- is orthogonal to scheme definition. However, scheme specifications
- are encouraged to include a wide range of examples, including
- examples that show use of the scheme's URIs with fragment identifiers
- when such usage is appropriate.
-
-4.4. Same-Document Reference
-
- When a URI reference refers to a URI that is, aside from its fragment
- component (if any), identical to the base URI (Section 5.1), that
- reference is called a "same-document" reference. The most frequent
- examples of same-document references are relative references that are
- empty or include only the number sign ("#") separator followed by a
- fragment identifier.
-
- When a same-document reference is dereferenced for a retrieval
- action, the target of that reference is defined to be within the same
- entity (representation, document, or message) as the reference;
- therefore, a dereference should not result in a new retrieval action.
-
- Normalization of the base and target URIs prior to their comparison,
- as described in Sections 6.2.2 and 6.2.3, is allowed but rarely
- performed in practice. Normalization may increase the set of same-
- document references, which may be of benefit to some caching
- applications. As such, reference authors should not assume that a
- slightly different, though equivalent, reference URI will (or will
- not) be interpreted as a same-document reference by any given
- application.
-
-4.5. Suffix Reference
-
- The URI syntax is designed for unambiguous reference to resources and
- extensibility via the URI scheme. However, as URI identification and
- usage have become commonplace, traditional media (television, radio,
- newspapers, billboards, etc.) have increasingly used a suffix of the
-
-
-
-Berners-Lee, et al. Standards Track [Page 27]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- URI as a reference, consisting of only the authority and path
- portions of the URI, such as
-
- www.w3.org/Addressing/
-
- or simply a DNS registered name on its own. Such references are
- primarily intended for human interpretation rather than for machines,
- with the assumption that context-based heuristics are sufficient to
- complete the URI (e.g., most registered names beginning with "www"
- are likely to have a URI prefix of "http://"). Although there is no
- standard set of heuristics for disambiguating a URI suffix, many
- client implementations allow them to be entered by the user and
- heuristically resolved.
-
- Although this practice of using suffix references is common, it
- should be avoided whenever possible and should never be used in
- situations where long-term references are expected. The heuristics
- noted above will change over time, particularly when a new URI scheme
- becomes popular, and are often incorrect when used out of context.
- Furthermore, they can lead to security issues along the lines of
- those described in [RFC1535].
-
- As a URI suffix has the same syntax as a relative-path reference, a
- suffix reference cannot be used in contexts where a relative
- reference is expected. As a result, suffix references are limited to
- places where there is no defined base URI, such as dialog boxes and
- off-line advertisements.
-
-5. Reference Resolution
-
- This section defines the process of resolving a URI reference within
- a context that allows relative references so that the result is a
- string matching the <URI> syntax rule of Section 3.
-
-5.1. Establishing a Base URI
-
- The term "relative" implies that a "base URI" exists against which
- the relative reference is applied. Aside from fragment-only
- references (Section 4.4), relative references are only usable when a
- base URI is known. A base URI must be established by the parser
- prior to parsing URI references that might be relative. A base URI
- must conform to the <absolute-URI> syntax rule (Section 4.3). If the
- base URI is obtained from a URI reference, then that reference must
- be converted to absolute form and stripped of any fragment component
- prior to its use as a base URI.
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 28]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- The base URI of a reference can be established in one of four ways,
- discussed below in order of precedence. The order of precedence can
- be thought of in terms of layers, where the innermost defined base
- URI has the highest precedence. This can be visualized graphically
- as follows:
-
- .----------------------------------------------------------.
- | .----------------------------------------------------. |
- | | .----------------------------------------------. | |
- | | | .----------------------------------------. | | |
- | | | | .----------------------------------. | | | |
- | | | | | <relative-reference> | | | | |
- | | | | `----------------------------------' | | | |
- | | | | (5.1.1) Base URI embedded in content | | | |
- | | | `----------------------------------------' | | |
- | | | (5.1.2) Base URI of the encapsulating entity | | |
- | | | (message, representation, or none) | | |
- | | `----------------------------------------------' | |
- | | (5.1.3) URI used to retrieve the entity | |
- | `----------------------------------------------------' |
- | (5.1.4) Default Base URI (application-dependent) |
- `----------------------------------------------------------'
-
-5.1.1. Base URI Embedded in Content
-
- Within certain media types, a base URI for relative references can be
- embedded within the content itself so that it can be readily obtained
- by a parser. This can be useful for descriptive documents, such as
- tables of contents, which may be transmitted to others through
- protocols other than their usual retrieval context (e.g., email or
- USENET news).
-
- It is beyond the scope of this specification to specify how, for each
- media type, a base URI can be embedded. The appropriate syntax, when
- available, is described by the data format specification associated
- with each media type.
-
-5.1.2. Base URI from the Encapsulating Entity
-
- If no base URI is embedded, the base URI is defined by the
- representation's retrieval context. For a document that is enclosed
- within another entity, such as a message or archive, the retrieval
- context is that entity. Thus, the default base URI of a
- representation is the base URI of the entity in which the
- representation is encapsulated.
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 29]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- A mechanism for embedding a base URI within MIME container types
- (e.g., the message and multipart types) is defined by MHTML
- [RFC2557]. Protocols that do not use the MIME message header syntax,
- but that do allow some form of tagged metadata to be included within
- messages, may define their own syntax for defining a base URI as part
- of a message.
-
-5.1.3. Base URI from the Retrieval URI
-
- If no base URI is embedded and the representation is not encapsulated
- within some other entity, then, if a URI was used to retrieve the
- representation, that URI shall be considered the base URI. Note that
- if the retrieval was the result of a redirected request, the last URI
- used (i.e., the URI that resulted in the actual retrieval of the
- representation) is the base URI.
-
-5.1.4. Default Base URI
-
- If none of the conditions described above apply, then the base URI is
- defined by the context of the application. As this definition is
- necessarily application-dependent, failing to define a base URI by
- using one of the other methods may result in the same content being
- interpreted differently by different types of applications.
-
- A sender of a representation containing relative references is
- responsible for ensuring that a base URI for those references can be
- established. Aside from fragment-only references, relative
- references can only be used reliably in situations where the base URI
- is well defined.
-
-5.2. Relative Resolution
-
- This section describes an algorithm for converting a URI reference
- that might be relative to a given base URI into the parsed components
- of the reference's target. The components can then be recomposed, as
- described in Section 5.3, to form the target URI. This algorithm
- provides definitive results that can be used to test the output of
- other implementations. Applications may implement relative reference
- resolution by using some other algorithm, provided that the results
- match what would be given by this one.
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 30]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-5.2.1. Pre-parse the Base URI
-
- The base URI (Base) is established according to the procedure of
- Section 5.1 and parsed into the five main components described in
- Section 3. Note that only the scheme component is required to be
- present in a base URI; the other components may be empty or
- undefined. A component is undefined if its associated delimiter does
- not appear in the URI reference; the path component is never
- undefined, though it may be empty.
-
- Normalization of the base URI, as described in Sections 6.2.2 and
- 6.2.3, is optional. A URI reference must be transformed to its
- target URI before it can be normalized.
-
-5.2.2. Transform References
-
- For each URI reference (R), the following pseudocode describes an
- algorithm for transforming R into its target URI (T):
-
- -- The URI reference is parsed into the five URI components
- --
- (R.scheme, R.authority, R.path, R.query, R.fragment) = parse(R);
-
- -- A non-strict parser may ignore a scheme in the reference
- -- if it is identical to the base URI's scheme.
- --
- if ((not strict) and (R.scheme == Base.scheme)) then
- undefine(R.scheme);
- endif;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 31]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- if defined(R.scheme) then
- T.scheme = R.scheme;
- T.authority = R.authority;
- T.path = remove_dot_segments(R.path);
- T.query = R.query;
- else
- if defined(R.authority) then
- T.authority = R.authority;
- T.path = remove_dot_segments(R.path);
- T.query = R.query;
- else
- if (R.path == "") then
- T.path = Base.path;
- if defined(R.query) then
- T.query = R.query;
- else
- T.query = Base.query;
- endif;
- else
- if (R.path starts-with "/") then
- T.path = remove_dot_segments(R.path);
- else
- T.path = merge(Base.path, R.path);
- T.path = remove_dot_segments(T.path);
- endif;
- T.query = R.query;
- endif;
- T.authority = Base.authority;
- endif;
- T.scheme = Base.scheme;
- endif;
-
- T.fragment = R.fragment;
-
-5.2.3. Merge Paths
-
- The pseudocode above refers to a "merge" routine for merging a
- relative-path reference with the path of the base URI. This is
- accomplished as follows:
-
- o If the base URI has a defined authority component and an empty
- path, then return a string consisting of "/" concatenated with the
- reference's path; otherwise,
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 32]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- o return a string consisting of the reference's path component
- appended to all but the last segment of the base URI's path (i.e.,
- excluding any characters after the right-most "/" in the base URI
- path, or excluding the entire base URI path if it does not contain
- any "/" characters).
-
-5.2.4. Remove Dot Segments
-
- The pseudocode also refers to a "remove_dot_segments" routine for
- interpreting and removing the special "." and ".." complete path
- segments from a referenced path. This is done after the path is
- extracted from a reference, whether or not the path was relative, in
- order to remove any invalid or extraneous dot-segments prior to
- forming the target URI. Although there are many ways to accomplish
- this removal process, we describe a simple method using two string
- buffers.
-
- 1. The input buffer is initialized with the now-appended path
- components and the output buffer is initialized to the empty
- string.
-
- 2. While the input buffer is not empty, loop as follows:
-
- A. If the input buffer begins with a prefix of "../" or "./",
- then remove that prefix from the input buffer; otherwise,
-
- B. if the input buffer begins with a prefix of "/./" or "/.",
- where "." is a complete path segment, then replace that
- prefix with "/" in the input buffer; otherwise,
-
- C. if the input buffer begins with a prefix of "/../" or "/..",
- where ".." is a complete path segment, then replace that
- prefix with "/" in the input buffer and remove the last
- segment and its preceding "/" (if any) from the output
- buffer; otherwise,
-
- D. if the input buffer consists only of "." or "..", then remove
- that from the input buffer; otherwise,
-
- E. move the first path segment in the input buffer to the end of
- the output buffer, including the initial "/" character (if
- any) and any subsequent characters up to, but not including,
- the next "/" character or the end of the input buffer.
-
- 3. Finally, the output buffer is returned as the result of
- remove_dot_segments.
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 33]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- Note that dot-segments are intended for use in URI references to
- express an identifier relative to the hierarchy of names in the base
- URI. The remove_dot_segments algorithm respects that hierarchy by
- removing extra dot-segments rather than treat them as an error or
- leaving them to be misinterpreted by dereference implementations.
-
- The following illustrates how the above steps are applied for two
- examples of merged paths, showing the state of the two buffers after
- each step.
-
- STEP OUTPUT BUFFER INPUT BUFFER
-
- 1 : /a/b/c/./../../g
- 2E: /a /b/c/./../../g
- 2E: /a/b /c/./../../g
- 2E: /a/b/c /./../../g
- 2B: /a/b/c /../../g
- 2C: /a/b /../g
- 2C: /a /g
- 2E: /a/g
-
- STEP OUTPUT BUFFER INPUT BUFFER
-
- 1 : mid/content=5/../6
- 2E: mid /content=5/../6
- 2E: mid/content=5 /../6
- 2C: mid /6
- 2E: mid/6
-
- Some applications may find it more efficient to implement the
- remove_dot_segments algorithm by using two segment stacks rather than
- strings.
-
- Note: Beware that some older, erroneous implementations will fail
- to separate a reference's query component from its path component
- prior to merging the base and reference paths, resulting in an
- interoperability failure if the query component contains the
- strings "/../" or "/./".
-
-
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 34]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-5.3. Component Recomposition
-
- Parsed URI components can be recomposed to obtain the corresponding
- URI reference string. Using pseudocode, this would be:
-
- result = ""
-
- if defined(scheme) then
- append scheme to result;
- append ":" to result;
- endif;
-
- if defined(authority) then
- append "//" to result;
- append authority to result;
- endif;
-
- append path to result;
-
- if defined(query) then
- append "?" to result;
- append query to result;
- endif;
-
- if defined(fragment) then
- append "#" to result;
- append fragment to result;
- endif;
-
- return result;
-
- Note that we are careful to preserve the distinction between a
- component that is undefined, meaning that its separator was not
- present in the reference, and a component that is empty, meaning that
- the separator was present and was immediately followed by the next
- component separator or the end of the reference.
-
-5.4. Reference Resolution Examples
-
- Within a representation with a well defined base URI of
-
- http://a/b/c/d;p?q
-
- a relative reference is transformed to its target URI as follows.
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 35]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-5.4.1. Normal Examples
-
- "g:h" = "g:h"
- "g" = "http://a/b/c/g"
- "./g" = "http://a/b/c/g"
- "g/" = "http://a/b/c/g/"
- "/g" = "http://a/g"
- "//g" = "http://g"
- "?y" = "http://a/b/c/d;p?y"
- "g?y" = "http://a/b/c/g?y"
- "#s" = "http://a/b/c/d;p?q#s"
- "g#s" = "http://a/b/c/g#s"
- "g?y#s" = "http://a/b/c/g?y#s"
- ";x" = "http://a/b/c/;x"
- "g;x" = "http://a/b/c/g;x"
- "g;x?y#s" = "http://a/b/c/g;x?y#s"
- "" = "http://a/b/c/d;p?q"
- "." = "http://a/b/c/"
- "./" = "http://a/b/c/"
- ".." = "http://a/b/"
- "../" = "http://a/b/"
- "../g" = "http://a/b/g"
- "../.." = "http://a/"
- "../../" = "http://a/"
- "../../g" = "http://a/g"
-
-5.4.2. Abnormal Examples
-
- Although the following abnormal examples are unlikely to occur in
- normal practice, all URI parsers should be capable of resolving them
- consistently. Each example uses the same base as that above.
-
- Parsers must be careful in handling cases where there are more ".."
- segments in a relative-path reference than there are hierarchical
- levels in the base URI's path. Note that the ".." syntax cannot be
- used to change the authority component of a URI.
-
- "../../../g" = "http://a/g"
- "../../../../g" = "http://a/g"
-
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 36]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- Similarly, parsers must remove the dot-segments "." and ".." when
- they are complete components of a path, but not when they are only
- part of a segment.
-
- "/./g" = "http://a/g"
- "/../g" = "http://a/g"
- "g." = "http://a/b/c/g."
- ".g" = "http://a/b/c/.g"
- "g.." = "http://a/b/c/g.."
- "..g" = "http://a/b/c/..g"
-
- Less likely are cases where the relative reference uses unnecessary
- or nonsensical forms of the "." and ".." complete path segments.
-
- "./../g" = "http://a/b/g"
- "./g/." = "http://a/b/c/g/"
- "g/./h" = "http://a/b/c/g/h"
- "g/../h" = "http://a/b/c/h"
- "g;x=1/./y" = "http://a/b/c/g;x=1/y"
- "g;x=1/../y" = "http://a/b/c/y"
-
- Some applications fail to separate the reference's query and/or
- fragment components from the path component before merging it with
- the base path and removing dot-segments. This error is rarely
- noticed, as typical usage of a fragment never includes the hierarchy
- ("/") character and the query component is not normally used within
- relative references.
-
- "g?y/./x" = "http://a/b/c/g?y/./x"
- "g?y/../x" = "http://a/b/c/g?y/../x"
- "g#s/./x" = "http://a/b/c/g#s/./x"
- "g#s/../x" = "http://a/b/c/g#s/../x"
-
- Some parsers allow the scheme name to be present in a relative
- reference if it is the same as the base URI scheme. This is
- considered to be a loophole in prior specifications of partial URI
- [RFC1630]. Its use should be avoided but is allowed for backward
- compatibility.
-
- "http:g" = "http:g" ; for strict parsers
- / "http://a/b/c/g" ; for backward compatibility
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 37]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-6. Normalization and Comparison
-
- One of the most common operations on URIs is simple comparison:
- determining whether two URIs are equivalent without using the URIs to
- access their respective resource(s). A comparison is performed every
- time a response cache is accessed, a browser checks its history to
- color a link, or an XML parser processes tags within a namespace.
- Extensive normalization prior to comparison of URIs is often used by
- spiders and indexing engines to prune a search space or to reduce
- duplication of request actions and response storage.
-
- URI comparison is performed for some particular purpose. Protocols
- or implementations that compare URIs for different purposes will
- often be subject to differing design trade-offs in regards to how
- much effort should be spent in reducing aliased identifiers. This
- section describes various methods that may be used to compare URIs,
- the trade-offs between them, and the types of applications that might
- use them.
-
-6.1. Equivalence
-
- Because URIs exist to identify resources, presumably they should be
- considered equivalent when they identify the same resource. However,
- this definition of equivalence is not of much practical use, as there
- is no way for an implementation to compare two resources unless it
- has full knowledge or control of them. For this reason,
- determination of equivalence or difference of URIs is based on string
- comparison, perhaps augmented by reference to additional rules
- provided by URI scheme definitions. We use the terms "different" and
- "equivalent" to describe the possible outcomes of such comparisons,
- but there are many application-dependent versions of equivalence.
-
- Even though it is possible to determine that two URIs are equivalent,
- URI comparison is not sufficient to determine whether two URIs
- identify different resources. For example, an owner of two different
- domain names could decide to serve the same resource from both,
- resulting in two different URIs. Therefore, comparison methods are
- designed to minimize false negatives while strictly avoiding false
- positives.
-
- In testing for equivalence, applications should not directly compare
- relative references; the references should be converted to their
- respective target URIs before comparison. When URIs are compared to
- select (or avoid) a network action, such as retrieval of a
- representation, fragment components (if any) should be excluded from
- the comparison.
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 38]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-6.2. Comparison Ladder
-
- A variety of methods are used in practice to test URI equivalence.
- These methods fall into a range, distinguished by the amount of
- processing required and the degree to which the probability of false
- negatives is reduced. As noted above, false negatives cannot be
- eliminated. In practice, their probability can be reduced, but this
- reduction requires more processing and is not cost-effective for all
- applications.
-
- If this range of comparison practices is considered as a ladder, the
- following discussion will climb the ladder, starting with practices
- that are cheap but have a relatively higher chance of producing false
- negatives, and proceeding to those that have higher computational
- cost and lower risk of false negatives.
-
-6.2.1. Simple String Comparison
-
- If two URIs, when considered as character strings, are identical,
- then it is safe to conclude that they are equivalent. This type of
- equivalence test has very low computational cost and is in wide use
- in a variety of applications, particularly in the domain of parsing.
-
- Testing strings for equivalence requires some basic precautions.
- This procedure is often referred to as "bit-for-bit" or
- "byte-for-byte" comparison, which is potentially misleading. Testing
- strings for equality is normally based on pair comparison of the
- characters that make up the strings, starting from the first and
- proceeding until both strings are exhausted and all characters are
- found to be equal, until a pair of characters compares unequal, or
- until one of the strings is exhausted before the other.
-
- This character comparison requires that each pair of characters be
- put in comparable form. For example, should one URI be stored in a
- byte array in EBCDIC encoding and the second in a Java String object
- (UTF-16), bit-for-bit comparisons applied naively will produce
- errors. It is better to speak of equality on a character-for-
- character basis rather than on a byte-for-byte or bit-for-bit basis.
- In practical terms, character-by-character comparisons should be done
- codepoint-by-codepoint after conversion to a common character
- encoding.
-
- False negatives are caused by the production and use of URI aliases.
- Unnecessary aliases can be reduced, regardless of the comparison
- method, by consistently providing URI references in an already-
- normalized form (i.e., a form identical to what would be produced
- after normalization is applied, as described below).
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 39]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- Protocols and data formats often limit some URI comparisons to simple
- string comparison, based on the theory that people and
- implementations will, in their own best interest, be consistent in
- providing URI references, or at least consistent enough to negate any
- efficiency that might be obtained from further normalization.
-
-6.2.2. Syntax-Based Normalization
-
- Implementations may use logic based on the definitions provided by
- this specification to reduce the probability of false negatives.
- This processing is moderately higher in cost than character-for-
- character string comparison. For example, an application using this
- approach could reasonably consider the following two URIs equivalent:
-
- example://a/b/c/%7Bfoo%7D
- eXAMPLE://a/./b/../b/%63/%7bfoo%7d
-
- Web user agents, such as browsers, typically apply this type of URI
- normalization when determining whether a cached response is
- available. Syntax-based normalization includes such techniques as
- case normalization, percent-encoding normalization, and removal of
- dot-segments.
-
-6.2.2.1. Case Normalization
-
- For all URIs, the hexadecimal digits within a percent-encoding
- triplet (e.g., "%3a" versus "%3A") are case-insensitive and therefore
- should be normalized to use uppercase letters for the digits A-F.
-
- When a URI uses components of the generic syntax, the component
- syntax equivalence rules always apply; namely, that the scheme and
- host are case-insensitive and therefore should be normalized to
- lowercase. For example, the URI <HTTP://www.EXAMPLE.com/> is
- equivalent to <http://www.example.com/>. The other generic syntax
- components are assumed to be case-sensitive unless specifically
- defined otherwise by the scheme (see Section 6.2.3).
-
-6.2.2.2. Percent-Encoding Normalization
-
- The percent-encoding mechanism (Section 2.1) is a frequent source of
- variance among otherwise identical URIs. In addition to the case
- normalization issue noted above, some URI producers percent-encode
- octets that do not require percent-encoding, resulting in URIs that
- are equivalent to their non-encoded counterparts. These URIs should
- be normalized by decoding any percent-encoded octet that corresponds
- to an unreserved character, as described in Section 2.3.
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 40]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-6.2.2.3. Path Segment Normalization
-
- The complete path segments "." and ".." are intended only for use
- within relative references (Section 4.1) and are removed as part of
- the reference resolution process (Section 5.2). However, some
- deployed implementations incorrectly assume that reference resolution
- is not necessary when the reference is already a URI and thus fail to
- remove dot-segments when they occur in non-relative paths. URI
- normalizers should remove dot-segments by applying the
- remove_dot_segments algorithm to the path, as described in
- Section 5.2.4.
-
-6.2.3. Scheme-Based Normalization
-
- The syntax and semantics of URIs vary from scheme to scheme, as
- described by the defining specification for each scheme.
- Implementations may use scheme-specific rules, at further processing
- cost, to reduce the probability of false negatives. For example,
- because the "http" scheme makes use of an authority component, has a
- default port of "80", and defines an empty path to be equivalent to
- "/", the following four URIs are equivalent:
-
- http://example.com
- http://example.com/
- http://example.com:/
- http://example.com:80/
-
- In general, a URI that uses the generic syntax for authority with an
- empty path should be normalized to a path of "/". Likewise, an
- explicit ":port", for which the port is empty or the default for the
- scheme, is equivalent to one where the port and its ":" delimiter are
- elided and thus should be removed by scheme-based normalization. For
- example, the second URI above is the normal form for the "http"
- scheme.
-
- Another case where normalization varies by scheme is in the handling
- of an empty authority component or empty host subcomponent. For many
- scheme specifications, an empty authority or host is considered an
- error; for others, it is considered equivalent to "localhost" or the
- end-user's host. When a scheme defines a default for authority and a
- URI reference to that default is desired, the reference should be
- normalized to an empty authority for the sake of uniformity, brevity,
- and internationalization. If, however, either the userinfo or port
- subcomponents are non-empty, then the host should be given explicitly
- even if it matches the default.
-
- Normalization should not remove delimiters when their associated
- component is empty unless licensed to do so by the scheme
-
-
-
-Berners-Lee, et al. Standards Track [Page 41]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- specification. For example, the URI "http://example.com/?" cannot be
- assumed to be equivalent to any of the examples above. Likewise, the
- presence or absence of delimiters within a userinfo subcomponent is
- usually significant to its interpretation. The fragment component is
- not subject to any scheme-based normalization; thus, two URIs that
- differ only by the suffix "#" are considered different regardless of
- the scheme.
-
- Some schemes define additional subcomponents that consist of case-
- insensitive data, giving an implicit license to normalizers to
- convert this data to a common case (e.g., all lowercase). For
- example, URI schemes that define a subcomponent of path to contain an
- Internet hostname, such as the "mailto" URI scheme, cause that
- subcomponent to be case-insensitive and thus subject to case
- normalization (e.g., "mailto:Joe@Example.COM" is equivalent to
- "mailto:Joe@example.com", even though the generic syntax considers
- the path component to be case-sensitive).
-
- Other scheme-specific normalizations are possible.
-
-6.2.4. Protocol-Based Normalization
-
- Substantial effort to reduce the incidence of false negatives is
- often cost-effective for web spiders. Therefore, they implement even
- more aggressive techniques in URI comparison. For example, if they
- observe that a URI such as
-
- http://example.com/data
-
- redirects to a URI differing only in the trailing slash
-
- http://example.com/data/
-
- they will likely regard the two as equivalent in the future. This
- kind of technique is only appropriate when equivalence is clearly
- indicated by both the result of accessing the resources and the
- common conventions of their scheme's dereference algorithm (in this
- case, use of redirection by HTTP origin servers to avoid problems
- with relative references).
-
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 42]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-7. Security Considerations
-
- A URI does not in itself pose a security threat. However, as URIs
- are often used to provide a compact set of instructions for access to
- network resources, care must be taken to properly interpret the data
- within a URI, to prevent that data from causing unintended access,
- and to avoid including data that should not be revealed in plain
- text.
-
-7.1. Reliability and Consistency
-
- There is no guarantee that once a URI has been used to retrieve
- information, the same information will be retrievable by that URI in
- the future. Nor is there any guarantee that the information
- retrievable via that URI in the future will be observably similar to
- that retrieved in the past. The URI syntax does not constrain how a
- given scheme or authority apportions its namespace or maintains it
- over time. Such guarantees can only be obtained from the person(s)
- controlling that namespace and the resource in question. A specific
- URI scheme may define additional semantics, such as name persistence,
- if those semantics are required of all naming authorities for that
- scheme.
-
-7.2. Malicious Construction
-
- It is sometimes possible to construct a URI so that an attempt to
- perform a seemingly harmless, idempotent operation, such as the
- retrieval of a representation, will in fact cause a possibly damaging
- remote operation. The unsafe URI is typically constructed by
- specifying a port number other than that reserved for the network
- protocol in question. The client unwittingly contacts a site running
- a different protocol service, and data within the URI contains
- instructions that, when interpreted according to this other protocol,
- cause an unexpected operation. A frequent example of such abuse has
- been the use of a protocol-based scheme with a port component of
- "25", thereby fooling user agent software into sending an unintended
- or impersonating message via an SMTP server.
-
- Applications should prevent dereference of a URI that specifies a TCP
- port number within the "well-known port" range (0 - 1023) unless the
- protocol being used to dereference that URI is compatible with the
- protocol expected on that well-known port. Although IANA maintains a
- registry of well-known ports, applications should make such
- restrictions user-configurable to avoid preventing the deployment of
- new services.
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 43]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- When a URI contains percent-encoded octets that match the delimiters
- for a given resolution or dereference protocol (for example, CR and
- LF characters for the TELNET protocol), these percent-encodings must
- not be decoded before transmission across that protocol. Transfer of
- the percent-encoding, which might violate the protocol, is less
- harmful than allowing decoded octets to be interpreted as additional
- operations or parameters, perhaps triggering an unexpected and
- possibly harmful remote operation.
-
-7.3. Back-End Transcoding
-
- When a URI is dereferenced, the data within it is often parsed by
- both the user agent and one or more servers. In HTTP, for example, a
- typical user agent will parse a URI into its five major components,
- access the authority's server, and send it the data within the
- authority, path, and query components. A typical server will take
- that information, parse the path into segments and the query into
- key/value pairs, and then invoke implementation-specific handlers to
- respond to the request. As a result, a common security concern for
- server implementations that handle a URI, either as a whole or split
- into separate components, is proper interpretation of the octet data
- represented by the characters and percent-encodings within that URI.
-
- Percent-encoded octets must be decoded at some point during the
- dereference process. Applications must split the URI into its
- components and subcomponents prior to decoding the octets, as
- otherwise the decoded octets might be mistaken for delimiters.
- Security checks of the data within a URI should be applied after
- decoding the octets. Note, however, that the "%00" percent-encoding
- (NUL) may require special handling and should be rejected if the
- application is not expecting to receive raw data within a component.
-
- Special care should be taken when the URI path interpretation process
- involves the use of a back-end file system or related system
- functions. File systems typically assign an operational meaning to
- special characters, such as the "/", "\", ":", "[", and "]"
- characters, and to special device names like ".", "..", "...", "aux",
- "lpt", etc. In some cases, merely testing for the existence of such
- a name will cause the operating system to pause or invoke unrelated
- system calls, leading to significant security concerns regarding
- denial of service and unintended data transfer. It would be
- impossible for this specification to list all such significant
- characters and device names. Implementers should research the
- reserved names and characters for the types of storage device that
- may be attached to their applications and restrict the use of data
- obtained from URI components accordingly.
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 44]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-7.4. Rare IP Address Formats
-
- Although the URI syntax for IPv4address only allows the common
- dotted-decimal form of IPv4 address literal, many implementations
- that process URIs make use of platform-dependent system routines,
- such as gethostbyname() and inet_aton(), to translate the string
- literal to an actual IP address. Unfortunately, such system routines
- often allow and process a much larger set of formats than those
- described in Section 3.2.2.
-
- For example, many implementations allow dotted forms of three
- numbers, wherein the last part is interpreted as a 16-bit quantity
- and placed in the right-most two bytes of the network address (e.g.,
- a Class B network). Likewise, a dotted form of two numbers means
- that the last part is interpreted as a 24-bit quantity and placed in
- the right-most three bytes of the network address (Class A), and a
- single number (without dots) is interpreted as a 32-bit quantity and
- stored directly in the network address. Adding further to the
- confusion, some implementations allow each dotted part to be
- interpreted as decimal, octal, or hexadecimal, as specified in the C
- language (i.e., a leading 0x or 0X implies hexadecimal; a leading 0
- implies octal; otherwise, the number is interpreted as decimal).
-
- These additional IP address formats are not allowed in the URI syntax
- due to differences between platform implementations. However, they
- can become a security concern if an application attempts to filter
- access to resources based on the IP address in string literal format.
- If this filtering is performed, literals should be converted to
- numeric form and filtered based on the numeric value, and not on a
- prefix or suffix of the string form.
-
-7.5. Sensitive Information
-
- URI producers should not provide a URI that contains a username or
- password that is intended to be secret. URIs are frequently
- displayed by browsers, stored in clear text bookmarks, and logged by
- user agent history and intermediary applications (proxies). A
- password appearing within the userinfo component is deprecated and
- should be considered an error (or simply ignored) except in those
- rare cases where the 'password' parameter is intended to be public.
-
-7.6. Semantic Attacks
-
- Because the userinfo subcomponent is rarely used and appears before
- the host in the authority component, it can be used to construct a
- URI intended to mislead a human user by appearing to identify one
- (trusted) naming authority while actually identifying a different
- authority hidden behind the noise. For example
-
-
-
-Berners-Lee, et al. Standards Track [Page 45]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- ftp://cnn.example.com&story=breaking_news@10.0.0.1/top_story.htm
-
- might lead a human user to assume that the host is 'cnn.example.com',
- whereas it is actually '10.0.0.1'. Note that a misleading userinfo
- subcomponent could be much longer than the example above.
-
- A misleading URI, such as that above, is an attack on the user's
- preconceived notions about the meaning of a URI rather than an attack
- on the software itself. User agents may be able to reduce the impact
- of such attacks by distinguishing the various components of the URI
- when they are rendered, such as by using a different color or tone to
- render userinfo if any is present, though there is no panacea. More
- information on URI-based semantic attacks can be found in [Siedzik].
-
-8. IANA Considerations
-
- URI scheme names, as defined by <scheme> in Section 3.1, form a
- registered namespace that is managed by IANA according to the
- procedures defined in [BCP35]. No IANA actions are required by this
- document.
-
-9. Acknowledgements
-
- This specification is derived from RFC 2396 [RFC2396], RFC 1808
- [RFC1808], and RFC 1738 [RFC1738]; the acknowledgements in those
- documents still apply. It also incorporates the update (with
- corrections) for IPv6 literals in the host syntax, as defined by
- Robert M. Hinden, Brian E. Carpenter, and Larry Masinter in
- [RFC2732]. In addition, contributions by Gisle Aas, Reese Anschultz,
- Daniel Barclay, Tim Bray, Mike Brown, Rob Cameron, Jeremy Carroll,
- Dan Connolly, Adam M. Costello, John Cowan, Jason Diamond, Martin
- Duerst, Stefan Eissing, Clive D.W. Feather, Al Gilman, Tony Hammond,
- Elliotte Harold, Pat Hayes, Henry Holtzman, Ian B. Jacobs, Michael
- Kay, John C. Klensin, Graham Klyne, Dan Kohn, Bruce Lilly, Andrew
- Main, Dave McAlpin, Ira McDonald, Michael Mealling, Ray Merkert,
- Stephen Pollei, Julian Reschke, Tomas Rokicki, Miles Sabin, Kai
- Schaetzl, Mark Thomson, Ronald Tschalaer, Norm Walsh, Marc Warne,
- Stuart Williams, and Henry Zongaro are gratefully acknowledged.
-
-10. References
-
-10.1. Normative References
-
- [ASCII] American National Standards Institute, "Coded Character
- Set -- 7-bit American Standard Code for Information
- Interchange", ANSI X3.4, 1986.
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 46]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", RFC 2234, November 1997.
-
- [STD63] Yergeau, F., "UTF-8, a transformation format of
- ISO 10646", STD 63, RFC 3629, November 2003.
-
- [UCS] International Organization for Standardization,
- "Information Technology - Universal Multiple-Octet Coded
- Character Set (UCS)", ISO/IEC 10646:2003, December 2003.
-
-10.2. Informative References
-
- [BCP19] Freed, N. and J. Postel, "IANA Charset Registration
- Procedures", BCP 19, RFC 2978, October 2000.
-
- [BCP35] Petke, R. and I. King, "Registration Procedures for URL
- Scheme Names", BCP 35, RFC 2717, November 1999.
-
- [RFC0952] Harrenstien, K., Stahl, M., and E. Feinler, "DoD Internet
- host table specification", RFC 952, October 1985.
-
- [RFC1034] Mockapetris, P., "Domain names - concepts and facilities",
- STD 13, RFC 1034, November 1987.
-
- [RFC1123] Braden, R., "Requirements for Internet Hosts - Application
- and Support", STD 3, RFC 1123, October 1989.
-
- [RFC1535] Gavron, E., "A Security Problem and Proposed Correction
- With Widely Deployed DNS Software", RFC 1535,
- October 1993.
-
- [RFC1630] Berners-Lee, T., "Universal Resource Identifiers in WWW: A
- Unifying Syntax for the Expression of Names and Addresses
- of Objects on the Network as used in the World-Wide Web",
- RFC 1630, June 1994.
-
- [RFC1736] Kunze, J., "Functional Recommendations for Internet
- Resource Locators", RFC 1736, February 1995.
-
- [RFC1737] Sollins, K. and L. Masinter, "Functional Requirements for
- Uniform Resource Names", RFC 1737, December 1994.
-
- [RFC1738] Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform
- Resource Locators (URL)", RFC 1738, December 1994.
-
- [RFC1808] Fielding, R., "Relative Uniform Resource Locators",
- RFC 1808, June 1995.
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 47]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
- Extensions (MIME) Part Two: Media Types", RFC 2046,
- November 1996.
-
- [RFC2141] Moats, R., "URN Syntax", RFC 2141, May 1997.
-
- [RFC2396] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
- Resource Identifiers (URI): Generic Syntax", RFC 2396,
- August 1998.
-
- [RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D.
- Jensen, "HTTP Extensions for Distributed Authoring --
- WEBDAV", RFC 2518, February 1999.
-
- [RFC2557] Palme, J., Hopmann, A., and N. Shelness, "MIME
- Encapsulation of Aggregate Documents, such as HTML
- (MHTML)", RFC 2557, March 1999.
-
- [RFC2718] Masinter, L., Alvestrand, H., Zigmond, D., and R. Petke,
- "Guidelines for new URL Schemes", RFC 2718, November 1999.
-
- [RFC2732] Hinden, R., Carpenter, B., and L. Masinter, "Format for
- Literal IPv6 Addresses in URL's", RFC 2732, December 1999.
-
- [RFC3305] Mealling, M. and R. Denenberg, "Report from the Joint
- W3C/IETF URI Planning Interest Group: Uniform Resource
- Identifiers (URIs), URLs, and Uniform Resource Names
- (URNs): Clarifications and Recommendations", RFC 3305,
- August 2002.
-
- [RFC3490] Faltstrom, P., Hoffman, P., and A. Costello,
- "Internationalizing Domain Names in Applications (IDNA)",
- RFC 3490, March 2003.
-
- [RFC3513] Hinden, R. and S. Deering, "Internet Protocol Version 6
- (IPv6) Addressing Architecture", RFC 3513, April 2003.
-
- [Siedzik] Siedzik, R., "Semantic Attacks: What's in a URL?",
- April 2001, <http://www.giac.org/practical/gsec/
- Richard_Siedzik_GSEC.pdf>.
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 48]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-Appendix A. Collected ABNF for URI
-
- URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
-
- hier-part = "//" authority path-abempty
- / path-absolute
- / path-rootless
- / path-empty
-
- URI-reference = URI / relative-ref
-
- absolute-URI = scheme ":" hier-part [ "?" query ]
-
- relative-ref = relative-part [ "?" query ] [ "#" fragment ]
-
- relative-part = "//" authority path-abempty
- / path-absolute
- / path-noscheme
- / path-empty
-
- scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
-
- authority = [ userinfo "@" ] host [ ":" port ]
- userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
- host = IP-literal / IPv4address / reg-name
- port = *DIGIT
-
- IP-literal = "[" ( IPv6address / IPvFuture ) "]"
-
- IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
-
- IPv6address = 6( h16 ":" ) ls32
- / "::" 5( h16 ":" ) ls32
- / [ h16 ] "::" 4( h16 ":" ) ls32
- / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
- / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
- / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32
- / [ *4( h16 ":" ) h16 ] "::" ls32
- / [ *5( h16 ":" ) h16 ] "::" h16
- / [ *6( h16 ":" ) h16 ] "::"
-
- h16 = 1*4HEXDIG
- ls32 = ( h16 ":" h16 ) / IPv4address
- IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 49]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- dec-octet = DIGIT ; 0-9
- / %x31-39 DIGIT ; 10-99
- / "1" 2DIGIT ; 100-199
- / "2" %x30-34 DIGIT ; 200-249
- / "25" %x30-35 ; 250-255
-
- reg-name = *( unreserved / pct-encoded / sub-delims )
-
- path = path-abempty ; begins with "/" or is empty
- / path-absolute ; begins with "/" but not "//"
- / path-noscheme ; begins with a non-colon segment
- / path-rootless ; begins with a segment
- / path-empty ; zero characters
-
- path-abempty = *( "/" segment )
- path-absolute = "/" [ segment-nz *( "/" segment ) ]
- path-noscheme = segment-nz-nc *( "/" segment )
- path-rootless = segment-nz *( "/" segment )
- path-empty = 0<pchar>
-
- segment = *pchar
- segment-nz = 1*pchar
- segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
- ; non-zero-length segment without any colon ":"
-
- pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
-
- query = *( pchar / "/" / "?" )
-
- fragment = *( pchar / "/" / "?" )
-
- pct-encoded = "%" HEXDIG HEXDIG
-
- unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- reserved = gen-delims / sub-delims
- gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
- sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
- / "*" / "+" / "," / ";" / "="
-
-Appendix B. Parsing a URI Reference with a Regular Expression
-
- As the "first-match-wins" algorithm is identical to the "greedy"
- disambiguation method used by POSIX regular expressions, it is
- natural and commonplace to use a regular expression for parsing the
- potential five components of a URI reference.
-
- The following line is the regular expression for breaking-down a
- well-formed URI reference into its components.
-
-
-
-Berners-Lee, et al. Standards Track [Page 50]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
- 12 3 4 5 6 7 8 9
-
- The numbers in the second line above are only to assist readability;
- they indicate the reference points for each subexpression (i.e., each
- paired parenthesis). We refer to the value matched for subexpression
- <n> as $<n>. For example, matching the above expression to
-
- http://www.ics.uci.edu/pub/ietf/uri/#Related
-
- results in the following subexpression matches:
-
- $1 = http:
- $2 = http
- $3 = //www.ics.uci.edu
- $4 = www.ics.uci.edu
- $5 = /pub/ietf/uri/
- $6 = <undefined>
- $7 = <undefined>
- $8 = #Related
- $9 = Related
-
- where <undefined> indicates that the component is not present, as is
- the case for the query component in the above example. Therefore, we
- can determine the value of the five components as
-
- scheme = $2
- authority = $4
- path = $5
- query = $7
- fragment = $9
-
- Going in the opposite direction, we can recreate a URI reference from
- its components by using the algorithm of Section 5.3.
-
-Appendix C. Delimiting a URI in Context
-
- URIs are often transmitted through formats that do not provide a
- clear context for their interpretation. For example, there are many
- occasions when a URI is included in plain text; examples include text
- sent in email, USENET news, and on printed paper. In such cases, it
- is important to be able to delimit the URI from the rest of the text,
- and in particular from punctuation marks that might be mistaken for
- part of the URI.
-
- In practice, URIs are delimited in a variety of ways, but usually
- within double-quotes "http://example.com/", angle brackets
- <http://example.com/>, or just by using whitespace:
-
-
-
-Berners-Lee, et al. Standards Track [Page 51]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- http://example.com/
-
- These wrappers do not form part of the URI.
-
- In some cases, extra whitespace (spaces, line-breaks, tabs, etc.) may
- have to be added to break a long URI across lines. The whitespace
- should be ignored when the URI is extracted.
-
- No whitespace should be introduced after a hyphen ("-") character.
- Because some typesetters and printers may (erroneously) introduce a
- hyphen at the end of line when breaking it, the interpreter of a URI
- containing a line break immediately after a hyphen should ignore all
- whitespace around the line break and should be aware that the hyphen
- may or may not actually be part of the URI.
-
- Using <> angle brackets around each URI is especially recommended as
- a delimiting style for a reference that contains embedded whitespace.
-
- The prefix "URL:" (with or without a trailing space) was formerly
- recommended as a way to help distinguish a URI from other bracketed
- designators, though it is not commonly used in practice and is no
- longer recommended.
-
- For robustness, software that accepts user-typed URI should attempt
- to recognize and strip both delimiters and embedded whitespace.
-
- For example, the text
-
- Yes, Jim, I found it under "http://www.w3.org/Addressing/",
- but you can probably pick it up from <ftp://foo.example.
- com/rfc/>. Note the warning in <http://www.ics.uci.edu/pub/
- ietf/uri/historical.html#WARNING>.
-
- contains the URI references
-
- http://www.w3.org/Addressing/
- ftp://foo.example.com/rfc/
- http://www.ics.uci.edu/pub/ietf/uri/historical.html#WARNING
-
-
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 52]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-Appendix D. Changes from RFC 2396
-
-D.1. Additions
-
- An ABNF rule for URI has been introduced to correspond to one common
- usage of the term: an absolute URI with optional fragment.
-
- IPv6 (and later) literals have been added to the list of possible
- identifiers for the host portion of an authority component, as
- described by [RFC2732], with the addition of "[" and "]" to the
- reserved set and a version flag to anticipate future versions of IP
- literals. Square brackets are now specified as reserved within the
- authority component and are not allowed outside their use as
- delimiters for an IP literal within host. In order to make this
- change without changing the technical definition of the path, query,
- and fragment components, those rules were redefined to directly
- specify the characters allowed.
-
- As [RFC2732] defers to [RFC3513] for definition of an IPv6 literal
- address, which, unfortunately, lacks an ABNF description of
- IPv6address, we created a new ABNF rule for IPv6address that matches
- the text representations defined by Section 2.2 of [RFC3513].
- Likewise, the definition of IPv4address has been improved in order to
- limit each decimal octet to the range 0-255.
-
- Section 6, on URI normalization and comparison, has been completely
- rewritten and extended by using input from Tim Bray and discussion
- within the W3C Technical Architecture Group.
-
-D.2. Modifications
-
- The ad-hoc BNF syntax of RFC 2396 has been replaced with the ABNF of
- [RFC2234]. This change required all rule names that formerly
- included underscore characters to be renamed with a dash instead. In
- addition, a number of syntax rules have been eliminated or simplified
- to make the overall grammar more comprehensible. Specifications that
- refer to the obsolete grammar rules may be understood by replacing
- those rules according to the following table:
-
-
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 53]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- +----------------+--------------------------------------------------+
- | obsolete rule | translation |
- +----------------+--------------------------------------------------+
- | absoluteURI | absolute-URI |
- | relativeURI | relative-part [ "?" query ] |
- | hier_part | ( "//" authority path-abempty / |
- | | path-absolute ) [ "?" query ] |
- | | |
- | opaque_part | path-rootless [ "?" query ] |
- | net_path | "//" authority path-abempty |
- | abs_path | path-absolute |
- | rel_path | path-rootless |
- | rel_segment | segment-nz-nc |
- | reg_name | reg-name |
- | server | authority |
- | hostport | host [ ":" port ] |
- | hostname | reg-name |
- | path_segments | path-abempty |
- | param | *<pchar excluding ";"> |
- | | |
- | uric | unreserved / pct-encoded / ";" / "?" / ":" |
- | | / "@" / "&" / "=" / "+" / "$" / "," / "/" |
- | | |
- | uric_no_slash | unreserved / pct-encoded / ";" / "?" / ":" |
- | | / "@" / "&" / "=" / "+" / "$" / "," |
- | | |
- | mark | "-" / "_" / "." / "!" / "~" / "*" / "'" |
- | | / "(" / ")" |
- | | |
- | escaped | pct-encoded |
- | hex | HEXDIG |
- | alphanum | ALPHA / DIGIT |
- +----------------+--------------------------------------------------+
-
- Use of the above obsolete rules for the definition of scheme-specific
- syntax is deprecated.
-
- Section 2, on characters, has been rewritten to explain what
- characters are reserved, when they are reserved, and why they are
- reserved, even when they are not used as delimiters by the generic
- syntax. The mark characters that are typically unsafe to decode,
- including the exclamation mark ("!"), asterisk ("*"), single-quote
- ("'"), and open and close parentheses ("(" and ")"), have been moved
- to the reserved set in order to clarify the distinction between
- reserved and unreserved and, hopefully, to answer the most common
- question of scheme designers. Likewise, the section on
- percent-encoded characters has been rewritten, and URI normalizers
- are now given license to decode any percent-encoded octets
-
-
-
-Berners-Lee, et al. Standards Track [Page 54]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- corresponding to unreserved characters. In general, the terms
- "escaped" and "unescaped" have been replaced with "percent-encoded"
- and "decoded", respectively, to reduce confusion with other forms of
- escape mechanisms.
-
- The ABNF for URI and URI-reference has been redesigned to make them
- more friendly to LALR parsers and to reduce complexity. As a result,
- the layout form of syntax description has been removed, along with
- the uric, uric_no_slash, opaque_part, net_path, abs_path, rel_path,
- path_segments, rel_segment, and mark rules. All references to
- "opaque" URIs have been replaced with a better description of how the
- path component may be opaque to hierarchy. The relativeURI rule has
- been replaced with relative-ref to avoid unnecessary confusion over
- whether they are a subset of URI. The ambiguity regarding the
- parsing of URI-reference as a URI or a relative-ref with a colon in
- the first segment has been eliminated through the use of five
- separate path matching rules.
-
- The fragment identifier has been moved back into the section on
- generic syntax components and within the URI and relative-ref rules,
- though it remains excluded from absolute-URI. The number sign ("#")
- character has been moved back to the reserved set as a result of
- reintegrating the fragment syntax.
-
- The ABNF has been corrected to allow the path component to be empty.
- This also allows an absolute-URI to consist of nothing after the
- "scheme:", as is present in practice with the "dav:" namespace
- [RFC2518] and with the "about:" scheme used internally by many WWW
- browser implementations. The ambiguity regarding the boundary
- between authority and path has been eliminated through the use of
- five separate path matching rules.
-
- Registry-based naming authorities that use the generic syntax are now
- defined within the host rule. This change allows current
- implementations, where whatever name provided is simply fed to the
- local name resolution mechanism, to be consistent with the
- specification. It also removes the need to re-specify DNS name
- formats here. Furthermore, it allows the host component to contain
- percent-encoded octets, which is necessary to enable
- internationalized domain names to be provided in URIs, processed in
- their native character encodings at the application layers above URI
- processing, and passed to an IDNA library as a registered name in the
- UTF-8 character encoding. The server, hostport, hostname,
- domainlabel, toplabel, and alphanum rules have been removed.
-
- The resolving relative references algorithm of [RFC2396] has been
- rewritten with pseudocode for this revision to improve clarity and
- fix the following issues:
-
-
-
-Berners-Lee, et al. Standards Track [Page 55]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- o [RFC2396] section 5.2, step 6a, failed to account for a base URI
- with no path.
-
- o Restored the behavior of [RFC1808] where, if the reference
- contains an empty path and a defined query component, the target
- URI inherits the base URI's path component.
-
- o The determination of whether a URI reference is a same-document
- reference has been decoupled from the URI parser, simplifying the
- URI processing interface within applications in a way consistent
- with the internal architecture of deployed URI processing
- implementations. The determination is now based on comparison to
- the base URI after transforming a reference to absolute form,
- rather than on the format of the reference itself. This change
- may result in more references being considered "same-document"
- under this specification than there would be under the rules given
- in RFC 2396, especially when normalization is used to reduce
- aliases. However, it does not change the status of existing
- same-document references.
-
- o Separated the path merge routine into two routines: merge, for
- describing combination of the base URI path with a relative-path
- reference, and remove_dot_segments, for describing how to remove
- the special "." and ".." segments from a composed path. The
- remove_dot_segments algorithm is now applied to all URI reference
- paths in order to match common implementations and to improve the
- normalization of URIs in practice. This change only impacts the
- parsing of abnormal references and same-scheme references wherein
- the base URI has a non-hierarchical path.
-
-Index
-
- A
- ABNF 11
- absolute 27
- absolute-path 26
- absolute-URI 27
- access 9
- authority 17, 18
-
- B
- base URI 28
-
- C
- character encoding 4
- character 4
- characters 8, 11
- coded character set 4
-
-
-
-Berners-Lee, et al. Standards Track [Page 56]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- D
- dec-octet 20
- dereference 9
- dot-segments 23
-
- F
- fragment 16, 24
-
- G
- gen-delims 13
- generic syntax 6
-
- H
- h16 20
- hier-part 16
- hierarchical 10
- host 18
-
- I
- identifier 5
- IP-literal 19
- IPv4 20
- IPv4address 19, 20
- IPv6 19
- IPv6address 19, 20
- IPvFuture 19
-
- L
- locator 7
- ls32 20
-
- M
- merge 32
-
- N
- name 7
- network-path 26
-
- P
- path 16, 22, 26
- path-abempty 22
- path-absolute 22
- path-empty 22
- path-noscheme 22
- path-rootless 22
- path-abempty 16, 22, 26
- path-absolute 16, 22, 26
- path-empty 16, 22, 26
-
-
-
-Berners-Lee, et al. Standards Track [Page 57]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- path-rootless 16, 22
- pchar 23
- pct-encoded 12
- percent-encoding 12
- port 22
-
- Q
- query 16, 23
-
- R
- reg-name 21
- registered name 20
- relative 10, 28
- relative-path 26
- relative-ref 26
- remove_dot_segments 33
- representation 9
- reserved 12
- resolution 9, 28
- resource 5
- retrieval 9
-
- S
- same-document 27
- sameness 9
- scheme 16, 17
- segment 22, 23
- segment-nz 23
- segment-nz-nc 23
- sub-delims 13
- suffix 27
-
- T
- transcription 8
-
- U
- uniform 4
- unreserved 13
- URI grammar
- absolute-URI 27
- ALPHA 11
- authority 18
- CR 11
- dec-octet 20
- DIGIT 11
- DQUOTE 11
- fragment 24
- gen-delims 13
-
-
-
-Berners-Lee, et al. Standards Track [Page 58]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
- h16 20
- HEXDIG 11
- hier-part 16
- host 19
- IP-literal 19
- IPv4address 20
- IPv6address 20
- IPvFuture 19
- LF 11
- ls32 20
- OCTET 11
- path 22
- path-abempty 22
- path-absolute 22
- path-empty 22
- path-noscheme 22
- path-rootless 22
- pchar 23
- pct-encoded 12
- port 22
- query 24
- reg-name 21
- relative-ref 26
- reserved 13
- scheme 17
- segment 23
- segment-nz 23
- segment-nz-nc 23
- SP 11
- sub-delims 13
- unreserved 13
- URI 16
- URI-reference 25
- userinfo 18
- URI 16
- URI-reference 25
- URL 7
- URN 7
- userinfo 18
-
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 59]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-Authors' Addresses
-
- Tim Berners-Lee
- World Wide Web Consortium
- Massachusetts Institute of Technology
- 77 Massachusetts Avenue
- Cambridge, MA 02139
- USA
-
- Phone: +1-617-253-5702
- Fax: +1-617-258-5999
- EMail: timbl@w3.org
- URI: http://www.w3.org/People/Berners-Lee/
-
-
- Roy T. Fielding
- Day Software
- 5251 California Ave., Suite 110
- Irvine, CA 92617
- USA
-
- Phone: +1-949-679-2960
- Fax: +1-949-679-2972
- EMail: fielding@gbiv.com
- URI: http://roy.gbiv.com/
-
-
- Larry Masinter
- Adobe Systems Incorporated
- 345 Park Ave
- San Jose, CA 95110
- USA
-
- Phone: +1-408-536-3024
- EMail: LMM@acm.org
- URI: http://larry.masinter.net/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 60]
-
-RFC 3986 URI Generic Syntax January 2005
-
-
-Full Copyright Statement
-
- Copyright (C) The Internet Society (2005).
-
- This document is subject to the rights, licenses and restrictions
- contained in BCP 78, and except as set forth therein, the authors
- retain all their rights.
-
- This document and the information contained herein are provided on an
- "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
- OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
- ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
- INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
- INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
- WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Intellectual Property
-
- The IETF takes no position regarding the validity or scope of any
- Intellectual Property Rights or other rights that might be claimed to
- pertain to the implementation or use of the technology described in
- this document or the extent to which any license under such rights
- might or might not be available; nor does it represent that it has
- made any independent effort to identify any such rights. Information
- on the IETF's procedures with respect to rights in IETF Documents can
- be found in BCP 78 and BCP 79.
-
- Copies of IPR disclosures made to the IETF Secretariat and any
- assurances of licenses to be made available, or the result of an
- attempt made to obtain a general license or permission for the use of
- such proprietary rights by implementers or users of this
- specification can be obtained from the IETF on-line IPR repository at
- http://www.ietf.org/ipr.
-
- The IETF invites any interested party to bring to its attention any
- copyrights, patents or patent applications, or other proprietary
- rights that may cover technology that may be required to implement
- this standard. Please address the information to the IETF at ietf-
- ipr@ietf.org.
-
-
-Acknowledgement
-
- Funding for the RFC Editor function is currently provided by the
- Internet Society.
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 61]
-
diff --git a/txt/rfc3987.txt b/txt/rfc3987.txt
deleted file mode 100644
index f0b1513b..00000000
--- a/txt/rfc3987.txt
+++ /dev/null
@@ -1,2579 +0,0 @@
-
-
-
-
-
-
-Network Working Group M. Duerst
-Request for Comments: 3987 W3C
-Category: Standards Track M. Suignard
- Microsoft Corporation
- January 2005
-
-
- Internationalized Resource Identifiers (IRIs)
-
-Status of This Memo
-
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
-Copyright Notice
-
- Copyright (C) The Internet Society (2005).
-
-Abstract
-
- This document defines a new protocol element, the Internationalized
- Resource Identifier (IRI), as a complement to the Uniform Resource
- Identifier (URI). An IRI is a sequence of characters from the
- Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to
- URIs is defined, which means that IRIs can be used instead of URIs,
- where appropriate, to identify resources.
-
- The approach of defining a new protocol element was chosen instead of
- extending or changing the definition of URIs. This was done in order
- to allow a clear distinction and to avoid incompatibilities with
- existing software. Guidelines are provided for the use and
- deployment of IRIs in various protocols, formats, and software
- components that currently deal with URIs.
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 1.1. Overview and Motivation . . . . . . . . . . . . . . . . 3
- 1.2. Applicability . . . . . . . . . . . . . . . . . . . . . 3
- 1.3. Definitions . . . . . . . . . . . . . . . . . . . . . . 4
- 1.4. Notation . . . . . . . . . . . . . . . . . . . . . . . . 5
- 2. IRI Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . 6
- 2.1. Summary of IRI Syntax . . . . . . . . . . . . . . . . . 6
- 2.2. ABNF for IRI References and IRIs . . . . . . . . . . . . 7
-
-
-
-
-Duerst & Suignard Standards Track [Page 1]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- 3. Relationship between IRIs and URIs . . . . . . . . . . . . . . 10
- 3.1. Mapping of IRIs to URIs . . . . . . . . . . . . . . . . 10
- 3.2. Converting URIs to IRIs . . . . . . . . . . . . . . . . 14
- 3.2.1. Examples . . . . . . . . . . . . . . . . . . . . 15
- 4. Bidirectional IRIs for Right-to-Left Languages. . . . . . . . 16
- 4.1. Logical Storage and Visual Presentation . . . . . . . . 17
- 4.2. Bidi IRI Structure . . . . . . . . . . . . . . . . . . . 18
- 4.3. Input of Bidi IRIs . . . . . . . . . . . . . . . . . . . 19
- 4.4. Examples . . . . . . . . . . . . . . . . . . . . . . . . 19
- 5. Normalization and Comparison . . . . . . . . . . . . . . . . . 21
- 5.1. Equivalence . . . . . . . . . . . . . . . . . . . . . . 22
- 5.2. Preparation for Comparison . . . . . . . . . . . . . . . 22
- 5.3. Comparison Ladder . . . . . . . . . . . . . . . . . . . 23
- 5.3.1. Simple String Comparison . . . . . . . . . . . . 23
- 5.3.2. Syntax-Based Normalization . . . . . . . . . . . 24
- 5.3.3. Scheme-Based Normalization . . . . . . . . . . . 27
- 5.3.4. Protocol-Based Normalization . . . . . . . . . . 28
- 6. Use of IRIs . . . . . . . . . . . . . . . . . . . . . . . . . 29
- 6.1. Limitations on UCS Characters Allowed in IRIs . . . . . 29
- 6.2. Software Interfaces and Protocols . . . . . . . . . . . 29
- 6.3. Format of URIs and IRIs in Documents and Protocols . . . 30
- 6.4. Use of UTF-8 for Encoding Original Characters .. . . . . 30
- 6.5. Relative IRI References . . . . . . . . . . . . . . . . 32
- 7. URI/IRI Processing Guidelines (informative) . . . . . . . . . 32
- 7.1. URI/IRI Software Interfaces . . . . . . . . . . . . . . 32
- 7.2. URI/IRI Entry . . . . . . . . . . . . . . . . . . . . . 33
- 7.3. URI/IRI Transfer between Applications . . . . . . . . . 33
- 7.4. URI/IRI Generation . . . . . . . . . . . . . . . . . . . 34
- 7.5. URI/IRI Selection . . . . . . . . . . . . . . . . . . . 34
- 7.6. Display of URIs/IRIs . . . . . . . . . . . . . . . . . . 35
- 7.7. Interpretation of URIs and IRIs . . . . . . . . . . . . 36
- 7.8. Upgrading Strategy . . . . . . . . . . . . . . . . . . . 36
- 8. Security Considerations . . . . . . . . . . . . . . . . . . . 37
- 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 39
- 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 40
- 10.1. Normative References . . . . . . . . . . . . . . . . . . 40
- 10.2. Informative References . . . . . . . . . . . . . . . . . 41
- A. Design Alternatives . . . . . . . . . . . . . . . . . . . . . 44
- A.1. New Scheme(s) . . . . . . . . . . . . . . . . . . . . . 44
- A.2. Character Encodings Other Than UTF-8 . . . . . . . . . . 44
- A.3. New Encoding Convention . . . . . . . . . . . . . . . . 44
- A.4. Indicating Character Encodings in the URI/IRI . . . . . 45
- Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 45
- Full Copyright Statement . . . . . . . . . . . . . . . . . . . . . 46
-
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 2]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
-1. Introduction
-
-1.1. Overview and Motivation
-
- A Uniform Resource Identifier (URI) is defined in [RFC3986] as a
- sequence of characters chosen from a limited subset of the repertoire
- of US-ASCII [ASCII] characters.
-
- The characters in URIs are frequently used for representing words of
- natural languages. This usage has many advantages: Such URIs are
- easier to memorize, easier to interpret, easier to transcribe, easier
- to create, and easier to guess. For most languages other than
- English, however, the natural script uses characters other than A -
- Z. For many people, handling Latin characters is as difficult as
- handling the characters of other scripts is for those who use only
- the Latin alphabet. Many languages with non-Latin scripts are
- transcribed with Latin letters. These transcriptions are now often
- used in URIs, but they introduce additional ambiguities.
-
- The infrastructure for the appropriate handling of characters from
- local scripts is now widely deployed in local versions of operating
- system and application software. Software that can handle a wide
- variety of scripts and languages at the same time is increasingly
- common. Also, increasing numbers of protocols and formats can carry
- a wide range of characters.
-
- This document defines a new protocol element called Internationalized
- Resource Identifier (IRI) by extending the syntax of URIs to a much
- wider repertoire of characters. It also defines "internationalized"
- versions corresponding to other constructs from [RFC3986], such as
- URI references. The syntax of IRIs is defined in section 2, and the
- relationship between IRIs and URIs in section 3.
-
- Using characters outside of A - Z in IRIs brings some difficulties.
- Section 4 discusses the special case of bidirectional IRIs, section 5
- various forms of equivalence between IRIs, and section 6 the use of
- IRIs in different situations. Section 7 gives additional informative
- guidelines, and section 8 security considerations.
-
-1.2. Applicability
-
- IRIs are designed to be compatible with recommendations for new URI
- schemes [RFC2718]. The compatibility is provided by specifying a
- well-defined and deterministic mapping from the IRI character
- sequence to the functionally equivalent URI character sequence.
- Practical use of IRIs (or IRI references) in place of URIs (or URI
- references) depends on the following conditions being met:
-
-
-
-
-Duerst & Suignard Standards Track [Page 3]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- a. A protocol or format element should be explicitly designated to
- be able to carry IRIs. The intent is not to introduce IRIs into
- contexts that are not defined to accept them. For example, XML
- schema [XMLSchema] has an explicit type "anyURI" that includes
- IRIs and IRI references. Therefore, IRIs and IRI references can
- be in attributes and elements of type "anyURI". On the other
- hand, in the HTTP protocol [RFC2616], the Request URI is defined
- as a URI, which means that direct use of IRIs is not allowed in
- HTTP requests.
-
- b. The protocol or format carrying the IRIs should have a mechanism
- to represent the wide range of characters used in IRIs, either
- natively or by some protocol- or format-specific escaping
- mechanism (for example, numeric character references in [XML1]).
-
- c. The URI corresponding to the IRI in question has to encode
- original characters into octets using UTF-8. For new URI
- schemes, this is recommended in [RFC2718]. It can apply to a
- whole scheme (e.g., IMAP URLs [RFC2192] and POP URLs [RFC2384],
- or the URN syntax [RFC2141]). It can apply to a specific part of
- a URI, such as the fragment identifier (e.g., [XPointer]). It
- can apply to a specific URI or part(s) thereof. For details,
- please see section 6.4.
-
-1.3. Definitions
-
- The following definitions are used in this document; they follow the
- terms in [RFC2130], [RFC2277], and [ISO10646].
-
- character: A member of a set of elements used for the organization,
- control, or representation of data. For example, "LATIN CAPITAL
- LETTER A" names a character.
-
- octet: An ordered sequence of eight bits considered as a unit.
-
- character repertoire: A set of characters (in the mathematical
- sense).
-
- sequence of characters: A sequence of characters (one after another).
-
- sequence of octets: A sequence of octets (one after another).
-
- character encoding: A method of representing a sequence of characters
- as a sequence of octets (maybe with variants). Also, a method of
- (unambiguously) converting a sequence of octets into a sequence of
- characters.
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 4]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- charset: The name of a parameter or attribute used to identify a
- character encoding.
-
- UCS: Universal Character Set. The coded character set defined by
- ISO/IEC 10646 [ISO10646] and the Unicode Standard [UNIV4].
-
- IRI reference: Denotes the common usage of an Internationalized
- Resource Identifier. An IRI reference may be absolute or
- relative. However, the "IRI" that results from such a reference
- only includes absolute IRIs; any relative IRI references are
- resolved to their absolute form. Note that in [RFC2396] URIs did
- not include fragment identifiers, but in [RFC3986] fragment
- identifiers are part of URIs.
-
- running text: Human text (paragraphs, sentences, phrases) with syntax
- according to orthographic conventions of a natural language, as
- opposed to syntax defined for ease of processing by machines
- (e.g., markup, programming languages).
-
- protocol element: Any portion of a message that affects processing of
- that message by the protocol in question.
-
- presentation element: A presentation form corresponding to a protocol
- element; for example, using a wider range of characters.
-
- create (a URI or IRI): With respect to URIs and IRIs, the term is
- used for the initial creation. This may be the initial creation
- of a resource with a certain identifier, or the initial exposition
- of a resource under a particular identifier.
-
- generate (a URI or IRI): With respect to URIs and IRIs, the term is
- used when the IRI is generated by derivation from other
- information.
-
-1.4. Notation
-
- RFCs and Internet Drafts currently do not allow any characters
- outside the US-ASCII repertoire. Therefore, this document uses
- various special notations to denote such characters in examples.
-
- In text, characters outside US-ASCII are sometimes referenced by
- using a prefix of 'U+', followed by four to six hexadecimal digits.
-
- To represent characters outside US-ASCII in examples, this document
- uses two notations: 'XML Notation' and 'Bidi Notation'.
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 5]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- XML Notation uses a leading '&#x', a trailing ';', and the
- hexadecimal number of the character in the UCS in between. For
- example, &#x44F; stands for CYRILLIC CAPITAL LETTER YA. In this
- notation, an actual '&' is denoted by '&amp;'.
-
- Bidi Notation is used for bidirectional examples: Lowercase letters
- stand for Latin letters or other letters that are written left to
- right, whereas uppercase letters represent Arabic or Hebrew letters
- that are written right to left.
-
- To denote actual octets in examples (as opposed to percent-encoded
- octets), the two hex digits denoting the octet are enclosed in "<"
- and ">". For example, the octet often denoted as 0xc9 is denoted
- here as <c9>.
-
- In this document, the key words "MUST", "MUST NOT", "REQUIRED",
- "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
- and "OPTIONAL" are to be interpreted as described in [RFC2119].
-
-2. IRI Syntax
-
- This section defines the syntax of Internationalized Resource
- Identifiers (IRIs).
-
- As with URIs, an IRI is defined as a sequence of characters, not as a
- sequence of octets. This definition accommodates the fact that IRIs
- may be written on paper or read over the radio as well as stored or
- transmitted digitally. The same IRI may be represented as different
- sequences of octets in different protocols or documents if these
- protocols or documents use different character encodings (and/or
- transfer encodings). Using the same character encoding as the
- containing protocol or document ensures that the characters in the
- IRI can be handled (e.g., searched, converted, displayed) in the same
- way as the rest of the protocol or document.
-
-2.1. Summary of IRI Syntax
-
- IRIs are defined similarly to URIs in [RFC3986], but the class of
- unreserved characters is extended by adding the characters of the UCS
- (Universal Character Set, [ISO10646]) beyond U+007F, subject to the
- limitations given in the syntax rules below and in section 6.1.
-
- Otherwise, the syntax and use of components and reserved characters
- is the same as that in [RFC3986]. All the operations defined in
- [RFC3986], such as the resolution of relative references, can be
- applied to IRIs by IRI-processing software in exactly the same way as
- they are for URIs by URI-processing software.
-
-
-
-
-Duerst & Suignard Standards Track [Page 6]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- Characters outside the US-ASCII repertoire are not reserved and
- therefore MUST NOT be used for syntactical purposes, such as to
- delimit components in newly defined schemes. For example, U+00A2,
- CENT SIGN, is not allowed as a delimiter in IRIs, because it is in
- the 'iunreserved' category. This is similar to the fact that it is
- not possible to use '-' as a delimiter in URIs, because it is in the
- 'unreserved' category.
-
-2.2. ABNF for IRI References and IRIs
-
- Although it might be possible to define IRI references and IRIs
- merely by their transformation to URI references and URIs, they can
- also be accepted and processed directly. Therefore, an ABNF
- definition for IRI references (which are the most general concept and
- the start of the grammar) and IRIs is given here. The syntax of this
- ABNF is described in [RFC2234]. Character numbers are taken from the
- UCS, without implying any actual binary encoding. Terminals in the
- ABNF are characters, not bytes.
-
- The following grammar closely follows the URI grammar in [RFC3986],
- except that the range of unreserved characters is expanded to include
- UCS characters, with the restriction that private UCS characters can
- occur only in query parts. The grammar is split into two parts:
- Rules that differ from [RFC3986] because of the above-mentioned
- expansion, and rules that are the same as those in [RFC3986]. For
- rules that are different than those in [RFC3986], the names of the
- non-terminals have been changed as follows. If the non-terminal
- contains 'URI', this has been changed to 'IRI'. Otherwise, an 'i'
- has been prefixed.
-
- The following rules are different from those in [RFC3986]:
-
- IRI = scheme ":" ihier-part [ "?" iquery ]
- [ "#" ifragment ]
-
- ihier-part = "//" iauthority ipath-abempty
- / ipath-absolute
- / ipath-rootless
- / ipath-empty
-
- IRI-reference = IRI / irelative-ref
-
- absolute-IRI = scheme ":" ihier-part [ "?" iquery ]
-
- irelative-ref = irelative-part [ "?" iquery ] [ "#" ifragment ]
-
- irelative-part = "//" iauthority ipath-abempty
- / ipath-absolute
-
-
-
-Duerst & Suignard Standards Track [Page 7]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- / ipath-noscheme
- / ipath-empty
-
- iauthority = [ iuserinfo "@" ] ihost [ ":" port ]
- iuserinfo = *( iunreserved / pct-encoded / sub-delims / ":" )
- ihost = IP-literal / IPv4address / ireg-name
-
- ireg-name = *( iunreserved / pct-encoded / sub-delims )
-
- ipath = ipath-abempty ; begins with "/" or is empty
- / ipath-absolute ; begins with "/" but not "//"
- / ipath-noscheme ; begins with a non-colon segment
- / ipath-rootless ; begins with a segment
- / ipath-empty ; zero characters
-
- ipath-abempty = *( "/" isegment )
- ipath-absolute = "/" [ isegment-nz *( "/" isegment ) ]
- ipath-noscheme = isegment-nz-nc *( "/" isegment )
- ipath-rootless = isegment-nz *( "/" isegment )
- ipath-empty = 0<ipchar>
-
- isegment = *ipchar
- isegment-nz = 1*ipchar
- isegment-nz-nc = 1*( iunreserved / pct-encoded / sub-delims
- / "@" )
- ; non-zero-length segment without any colon ":"
-
- ipchar = iunreserved / pct-encoded / sub-delims / ":"
- / "@"
-
- iquery = *( ipchar / iprivate / "/" / "?" )
-
- ifragment = *( ipchar / "/" / "?" )
-
- iunreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" / ucschar
-
- ucschar = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF
- / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD
- / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD
- / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD
- / %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD
- / %xD0000-DFFFD / %xE1000-EFFFD
-
- iprivate = %xE000-F8FF / %xF0000-FFFFD / %x100000-10FFFD
-
- Some productions are ambiguous. The "first-match-wins" (a.k.a.
- "greedy") algorithm applies. For details, see [RFC3986].
-
-
-
-
-Duerst & Suignard Standards Track [Page 8]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- The following rules are the same as those in [RFC3986]:
-
- scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
-
- port = *DIGIT
-
- IP-literal = "[" ( IPv6address / IPvFuture ) "]"
-
- IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
-
- IPv6address = 6( h16 ":" ) ls32
- / "::" 5( h16 ":" ) ls32
- / [ h16 ] "::" 4( h16 ":" ) ls32
- / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
- / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
- / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32
- / [ *4( h16 ":" ) h16 ] "::" ls32
- / [ *5( h16 ":" ) h16 ] "::" h16
- / [ *6( h16 ":" ) h16 ] "::"
-
- h16 = 1*4HEXDIG
- ls32 = ( h16 ":" h16 ) / IPv4address
-
- IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet
-
- dec-octet = DIGIT ; 0-9
- / %x31-39 DIGIT ; 10-99
- / "1" 2DIGIT ; 100-199
- / "2" %x30-34 DIGIT ; 200-249
- / "25" %x30-35 ; 250-255
-
- pct-encoded = "%" HEXDIG HEXDIG
-
- unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- reserved = gen-delims / sub-delims
- gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
- sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
- / "*" / "+" / "," / ";" / "="
-
- This syntax does not support IPv6 scoped addressing zone identifiers.
-
-
-
-
-
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 9]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
-3. Relationship between IRIs and URIs
-
- IRIs are meant to replace URIs in identifying resources for
- protocols, formats, and software components that use a UCS-based
- character repertoire. These protocols and components may never need
- to use URIs directly, especially when the resource identifier is used
- simply for identification purposes. However, when the resource
- identifier is used for resource retrieval, it is in many cases
- necessary to determine the associated URI, because currently most
- retrieval mechanisms are only defined for URIs. In this case, IRIs
- can serve as presentation elements for URI protocol elements. An
- example would be an address bar in a Web user agent. (Additional
- rationale is given in section 3.1.)
-
-3.1. Mapping of IRIs to URIs
-
- This section defines how to map an IRI to a URI. Everything in this
- section also applies to IRI references and URI references, as well as
- to components thereof (for example, fragment identifiers).
-
- This mapping has two purposes:
-
- Syntaxical. Many URI schemes and components define additional
- syntactical restrictions not captured in section 2.2.
- Scheme-specific restrictions are applied to IRIs by converting
- IRIs to URIs and checking the URIs against the scheme-specific
- restrictions.
-
- Interpretational. URIs identify resources in various ways. IRIs also
- identify resources. When the IRI is used solely for
- identification purposes, it is not necessary to map the IRI to a
- URI (see section 5). However, when an IRI is used for resource
- retrieval, the resource that the IRI locates is the same as the
- one located by the URI obtained after converting the IRI according
- to the procedure defined here. This means that there is no need
- to define resolution separately on the IRI level.
-
- Applications MUST map IRIs to URIs by using the following two steps.
-
- Step 1. Generate a UCS character sequence from the original IRI
- format. This step has the following three variants,
- depending on the form of the input:
-
- a. If the IRI is written on paper, read aloud, or otherwise
- represented as a sequence of characters independent of
- any character encoding, represent the IRI as a sequence
- of characters from the UCS normalized according to
- Normalization Form C (NFC, [UTR15]).
-
-
-
-Duerst & Suignard Standards Track [Page 10]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- b. If the IRI is in some digital representation (e.g., an
- octet stream) in some known non-Unicode character
- encoding, convert the IRI to a sequence of characters
- from the UCS normalized according to NFC.
-
- c. If the IRI is in a Unicode-based character encoding (for
- example, UTF-8 or UTF-16), do not normalize (see section
- 5.3.2.2 for details). Apply step 2 directly to the
- encoded Unicode character sequence.
-
- Step 2. For each character in 'ucschar' or 'iprivate', apply steps
- 2.1 through 2.3 below.
-
- 2.1. Convert the character to a sequence of one or more octets
- using UTF-8 [RFC3629].
-
- 2.2. Convert each octet to %HH, where HH is the hexadecimal
- notation of the octet value. Note that this is identical
- to the percent-encoding mechanism in section 2.1 of
- [RFC3986]. To reduce variability, the hexadecimal notation
- SHOULD use uppercase letters.
-
- 2.3. Replace the original character with the resulting character
- sequence (i.e., a sequence of %HH triplets).
-
- The above mapping from IRIs to URIs produces URIs fully conforming to
- [RFC3986]. The mapping is also an identity transformation for URIs
- and is idempotent; applying the mapping a second time will not
- change anything. Every URI is by definition an IRI.
-
- Systems accepting IRIs MAY convert the ireg-name component of an IRI
- as follows (before step 2 above) for schemes known to use domain
- names in ireg-name, if the scheme definition does not allow
- percent-encoding for ireg-name:
-
- Replace the ireg-name part of the IRI by the part converted using the
- ToASCII operation specified in section 4.1 of [RFC3490] on each
- dot-separated label, and by using U+002E (FULL STOP) as a label
- separator, with the flag UseSTD3ASCIIRules set to TRUE, and with the
- flag AllowUnassigned set to FALSE for creating IRIs and set to TRUE
- otherwise.
-
-
-
-
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 11]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- The ToASCII operation may fail, but this would mean that the IRI
- cannot be resolved. This conversion SHOULD be used when the goal is
- to maximize interoperability with legacy URI resolvers. For example,
- the IRI
-
- "http://r&#xE9;sum&#xE9;.example.org"
-
- may be converted to
-
- "http://xn--rsum-bpad.example.org"
-
- instead of
-
- "http://r%C3%A9sum%C3%A9.example.org".
-
- An IRI with a scheme that is known to use domain names in ireg-name,
- but where the scheme definition does not allow percent-encoding for
- ireg-name, meets scheme-specific restrictions if either the
- straightforward conversion or the conversion using the ToASCII
- operation on ireg-name result in an URI that meets the scheme-
- specific restrictions.
-
- Such an IRI resolves to the URI obtained after converting the IRI and
- uses the ToASCII operation on ireg-name. Implementations do not have
- to do this conversion as long as they produce the same result.
-
- Note: The difference between variants b and c in step 1 (using
- normalization with NFC, versus not using any normalization)
- accounts for the fact that in many non-Unicode character
- encodings, some text cannot be represented directly. For example,
- the word "Vietnam" is natively written "Vi&#x1EC7;t Nam"
- (containing a LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW)
- in NFC, but a direct transcoding from the windows-1258 character
- encoding leads to "Vi&#xEA;&#x323;t Nam" (containing a LATIN SMALL
- LETTER E WITH CIRCUMFLEX followed by a COMBINING DOT BELOW).
- Direct transcoding of other 8-bit encodings of Vietnamese may lead
- to other representations.
-
- Note: The uniform treatment of the whole IRI in step 2 is important
- to make processing independent of URI scheme. See [Gettys] for an
- in-depth discussion.
-
- Note: In practice, whether the general mapping (steps 1 and 2) or the
- ToASCII operation of [RFC3490] is used for ireg-name will not be
- noticed if mapping from IRI to URI and resolution is tightly
- integrated (e.g., carried out in the same user agent). But
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 12]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- conversion using [RFC3490] may be able to better deal with
- backwards compatibility issues in case mapping and resolution are
- separated, as in the case of using an HTTP proxy.
-
- Note: Internationalized Domain Names may be contained in parts of an
- IRI other than the ireg-name part. It is the responsibility of
- scheme-specific implementations (if the Internationalized Domain
- Name is part of the scheme syntax) or of server-side
- implementations (if the Internationalized Domain Name is part of
- 'iquery') to apply the necessary conversions at the appropriate
- point. Example: Trying to validate the Web page at
- http://r&#xE9;sum&#xE9;.example.org would lead to an IRI of
- http://validator.w3.org/check?uri=http%3A%2F%2Fr&#xE9;sum&#xE9;.
- example.org, which would convert to a URI of
- http://validator.w3.org/check?uri=http%3A%2F%2Fr%C3%A9sum%C3%A9.
- example.org. The server side implementation would be responsible
- for making the necessary conversions to be able to retrieve the
- Web page.
-
- Systems accepting IRIs MAY also deal with the printable characters in
- US-ASCII that are not allowed in URIs, namely "<", ">", '"', space,
- "{", "}", "|", "\", "^", and "`", in step 2 above. If these
- characters are found but are not converted, then the conversion
- SHOULD fail. Please note that the number sign ("#"), the percent
- sign ("%"), and the square bracket characters ("[", "]") are not part
- of the above list and MUST NOT be converted. Protocols and formats
- that have used earlier definitions of IRIs including these characters
- MAY require percent-encoding of these characters as a preprocessing
- step to extract the actual IRI from a given field. This
- preprocessing MAY also be used by applications allowing the user to
- enter an IRI.
-
- Note: In this process (in step 2.3), characters allowed in URI
- references and existing percent-encoded sequences are not encoded
- further. (This mapping is similar to, but different from, the
- encoding applied when arbitrary content is included in some part
- of a URI.) For example, an IRI of
- "http://www.example.org/red%09ros&#xE9;#red" (in XML notation) is
- converted to
- "http://www.example.org/red%09ros%C3%A9#red", not to something
- like
- "http%3A%2F%2Fwww.example.org%2Fred%2509ros%C3%A9%23red".
-
- Note: Some older software transcoding to UTF-8 may produce illegal
- output for some input, in particular for characters outside the
- BMP (Basic Multilingual Plane). As an example, for the IRI with
- non-BMP characters (in XML Notation):
- "http://example.com/&#x10300;&#x10301;&#x10302";
-
-
-
-Duerst & Suignard Standards Track [Page 13]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- which contains the first three letters of the Old Italic alphabet,
- the correct conversion to a URI is
- "http://example.com/%F0%90%8C%80%F0%90%8C%81%F0%90%8C%82"
-
-3.2. Converting URIs to IRIs
-
- In some situations, converting a URI into an equivalent IRI may be
- desirable. This section gives a procedure for this conversion. The
- conversion described in this section will always result in an IRI
- that maps back to the URI used as an input for the conversion (except
- for potential case differences in percent-encoding and for potential
- percent-encoded unreserved characters). However, the IRI resulting
- from this conversion may not be exactly the same as the original IRI
- (if there ever was one).
-
- URI-to-IRI conversion removes percent-encodings, but not all
- percent-encodings can be eliminated. There are several reasons for
- this:
-
- 1. Some percent-encodings are necessary to distinguish percent-
- encoded and unencoded uses of reserved characters.
-
- 2. Some percent-encodings cannot be interpreted as sequences of
- UTF-8 octets.
-
- (Note: The octet patterns of UTF-8 are highly regular.
- Therefore, there is a very high probability, but no guarantee,
- that percent-encodings that can be interpreted as sequences of
- UTF-8 octets actually originated from UTF-8. For a detailed
- discussion, see [Duerst97].)
-
- 3. The conversion may result in a character that is not appropriate
- in an IRI. See sections 2.2, 4.1, and 6.1 for further details.
-
- Conversion from a URI to an IRI is done by using the following steps
- (or any other algorithm that produces the same result):
-
- 1. Represent the URI as a sequence of octets in US-ASCII.
-
- 2. Convert all percent-encodings ("%" followed by two hexadecimal
- digits) to the corresponding octets, except those corresponding
- to "%", characters in "reserved", and characters in US-ASCII not
- allowed in URIs.
-
- 3. Re-percent-encode any octet produced in step 2 that is not part
- of a strictly legal UTF-8 octet sequence.
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 14]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- 4. Re-percent-encode all octets produced in step 3 that in UTF-8
- represent characters that are not appropriate according to
- sections 2.2, 4.1, and 6.1.
-
- 5. Interpret the resulting octet sequence as a sequence of characters
- encoded in UTF-8.
-
- This procedure will convert as many percent-encoded characters as
- possible to characters in an IRI. Because there are some choices
- when step 4 is applied (see section 6.1), results may vary.
-
- Conversions from URIs to IRIs MUST NOT use any character encoding
- other than UTF-8 in steps 3 and 4, even if it might be possible to
- guess from the context that another character encoding than UTF-8 was
- used in the URI. For example, the URI
- "http://www.example.org/r%E9sum%E9.html" might with some guessing be
- interpreted to contain two e-acute characters encoded as iso-8859-1.
- It must not be converted to an IRI containing these e-acute
- characters. Otherwise, in the future the IRI will be mapped to
- "http://www.example.org/r%C3%A9sum%C3%A9.html", which is a different
- URI from "http://www.example.org/r%E9sum%E9.html".
-
-3.2.1. Examples
-
- This section shows various examples of converting URIs to IRIs. Each
- example shows the result after each of the steps 1 through 5 is
- applied. XML Notation is used for the final result. Octets are
- denoted by "<" followed by two hexadecimal digits followed by ">".
-
- The following example contains the sequence "%C3%BC", which is a
- strictly legal UTF-8 sequence, and which is converted into the actual
- character U+00FC, LATIN SMALL LETTER U WITH DIAERESIS (also known as
- u-umlaut).
-
- 1. http://www.example.org/D%C3%BCrst
-
- 2. http://www.example.org/D<c3><bc>rst
-
- 3. http://www.example.org/D<c3><bc>rst
-
- 4. http://www.example.org/D<c3><bc>rst
-
- 5. http://www.example.org/D&#xFC;rst
-
- The following example contains the sequence "%FC", which might
- represent U+00FC, LATIN SMALL LETTER U WITH DIAERESIS, in the
- iso-8859-1 character encoding. (It might represent other characters
- in other character encodings. For example, the octet <fc> in
-
-
-
-Duerst & Suignard Standards Track [Page 15]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- iso-8859-5 represents U+045C, CYRILLIC SMALL LETTER KJE.) Because
- <fc> is not part of a strictly legal UTF-8 sequence, it is
- re-percent-encoded in step 3.
-
- 1. http://www.example.org/D%FCrst
-
- 2. http://www.example.org/D<fc>rst
-
- 3. http://www.example.org/D%FCrst
-
- 4. http://www.example.org/D%FCrst
-
- 5. http://www.example.org/D%FCrst
-
- The following example contains "%e2%80%ae", which is the percent-
- encoded UTF-8 character encoding of U+202E, RIGHT-TO-LEFT OVERRIDE.
- Section 4.1 forbids the direct use of this character in an IRI.
- Therefore, the corresponding octets are re-percent-encoded in step 4.
- This example shows that the case (upper- or lowercase) of letters
- used in percent-encodings may not be preserved. The example also
- contains a punycode-encoded domain name label (xn--99zt52a), which is
- not converted.
-
- 1. http://xn--99zt52a.example.org/%e2%80%ae
-
- 2. http://xn--99zt52a.example.org/<e2><80><ae>
-
- 3. http://xn--99zt52a.example.org/<e2><80><ae>
-
- 4. http://xn--99zt52a.example.org/%E2%80%AE
-
- 5. http://xn--99zt52a.example.org/%E2%80%AE
-
- Implementations with scheme-specific knowledge MAY convert
- punycode-encoded domain name labels to the corresponding characters
- by using the ToUnicode procedure. Thus, for the example above, the
- label "xn--99zt52a" may be converted to U+7D0D U+8C46 (Japanese
- Natto), leading to the overall IRI of
- "http://&#x7D0D;&#x8C46;.example.org/%E2%80%AE".
-
-4. Bidirectional IRIs for Right-to-Left Languages
-
- Some UCS characters, such as those used in the Arabic and Hebrew
- scripts, have an inherent right-to-left (rtl) writing direction.
- IRIs containing these characters (called bidirectional IRIs or Bidi
- IRIs) require additional attention because of the non-trivial
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 16]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- relation between logical representation (used for digital
- representation and for reading/spelling) and visual representation
- (used for display/printing).
-
- Because of the complex interaction between the logical
- representation, the visual representation, and the syntax of a Bidi
- IRI, a balance is needed between various requirements. The main
- requirements are
-
- 1. user-predictable conversion between visual and logical
- representation;
-
- 2. the ability to include a wide range of characters in various
- parts of the IRI; and
-
- 3. minor or no changes or restrictions for implementations.
-
-4.1. Logical Storage and Visual Presentation
-
- When stored or transmitted in digital representation, bidirectional
- IRIs MUST be in full logical order and MUST conform to the IRI syntax
- rules (which includes the rules relevant to their scheme). This
- ensures that bidirectional IRIs can be processed in the same way as
- other IRIs.
-
- Bidirectional IRIs MUST be rendered by using the Unicode
- Bidirectional Algorithm [UNIV4], [UNI9]. Bidirectional IRIs MUST be
- rendered in the same way as they would be if they were in a
- left-to-right embedding; i.e., as if they were preceded by U+202A,
- LEFT-TO-RIGHT EMBEDDING (LRE), and followed by U+202C, POP
- DIRECTIONAL FORMATTING (PDF). Setting the embedding direction can
- also be done in a higher-level protocol (e.g., the dir='ltr'
- attribute in HTML).
-
- There is no requirement to use the above embedding if the display is
- still the same without the embedding. For example, a bidirectional
- IRI in a text with left-to-right base directionality (such as used
- for English or Cyrillic) that is preceded and followed by whitespace
- and strong left-to-right characters does not need an embedding.
- Also, a bidirectional relative IRI reference that only contains
- strong right-to-left characters and weak characters and that starts
- and ends with a strong right-to-left character and appears in a text
- with right-to-left base directionality (such as used for Arabic or
- Hebrew) and is preceded and followed by whitespace and strong
- characters does not need an embedding.
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 17]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- In some other cases, using U+200E, LEFT-TO-RIGHT MARK (LRM), may be
- sufficient to force the correct display behavior. However, the
- details of the Unicode Bidirectional algorithm are not always easy to
- understand. Implementers are strongly advised to err on the side of
- caution and to use embedding in all cases where they are not
- completely sure that the display behavior is unaffected without the
- embedding.
-
- The Unicode Bidirectional Algorithm ([UNI9], section 4.3) permits
- higher-level protocols to influence bidirectional rendering. Such
- changes by higher-level protocols MUST NOT be used if they change the
- rendering of IRIs.
-
- The bidirectional formatting characters that may be used before or
- after the IRI to ensure correct display are not themselves part of
- the IRI. IRIs MUST NOT contain bidirectional formatting characters
- (LRM, RLM, LRE, RLE, LRO, RLO, and PDF). They affect the visual
- rendering of the IRI but do not appear themselves. It would
- therefore not be possible to input an IRI with such characters
- correctly.
-
-4.2. Bidi IRI Structure
-
- The Unicode Bidirectional Algorithm is designed mainly for running
- text. To make sure that it does not affect the rendering of
- bidirectional IRIs too much, some restrictions on bidirectional IRIs
- are necessary. These restrictions are given in terms of delimiters
- (structural characters, mostly punctuation such as "@", ".", ":", and
- "/") and components (usually consisting mostly of letters and
- digits).
-
- The following syntax rules from section 2.2 correspond to components
- for the purpose of Bidi behavior: iuserinfo, ireg-name, isegment,
- isegment-nz, isegment-nz-nc, ireg-name, iquery, and ifragment.
-
- Specifications that define the syntax of any of the above components
- MAY divide them further and define smaller parts to be components
- according to this document. As an example, the restrictions of
- [RFC3490] on bidirectional domain names correspond to treating each
- label of a domain name as a component for schemes with ireg-name as a
- domain name. Even where the components are not defined formally, it
- may be helpful to think about some syntax in terms of components and
- to apply the relevant restrictions. For example, for the usual
- name/value syntax in query parts, it is convenient to treat each name
- and each value as a component. As another example, the extensions in
- a resource name can be treated as separate components.
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 18]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- For each component, the following restrictions apply:
-
- 1. A component SHOULD NOT use both right-to-left and left-to-right
- characters.
-
- 2. A component using right-to-left characters SHOULD start and end
- with right-to-left characters.
-
- The above restrictions are given as shoulds, rather than as musts.
- For IRIs that are never presented visually, they are not relevant.
- However, for IRIs in general, they are very important to ensure
- consistent conversion between visual presentation and logical
- representation, in both directions.
-
- Note: In some components, the above restrictions may actually be
- strictly enforced. For example, [RFC3490] requires that these
- restrictions apply to the labels of a host name for those schemes
- where ireg-name is a host name. In some other components (for
- example, path components) following these restrictions may not be
- too difficult. For other components, such as parts of the query
- part, it may be very difficult to enforce the restrictions because
- the values of query parameters may be arbitrary character
- sequences.
-
- If the above restrictions cannot be satisfied otherwise, the affected
- component can always be mapped to URI notation as described in
- section 3.1. Please note that the whole component has to be mapped
- (see also Example 9 below).
-
-4.3. Input of Bidi IRIs
-
- Bidi input methods MUST generate Bidi IRIs in logical order while
- rendering them according to section 4.1. During input, rendering
- SHOULD be updated after every new character is input to avoid end-
- user confusion.
-
-4.4. Examples
-
- This section gives examples of bidirectional IRIs, in Bidi Notation.
- It shows legal IRIs with the relationship between logical and visual
- representation and explains how certain phenomena in this
- relationship may look strange to somebody not familiar with
- bidirectional behavior, but familiar to users of Arabic and Hebrew.
- It also shows what happens if the restrictions given in section 4.2
- are not followed. The examples below can be seen at [BidiEx], in
- Arabic, Hebrew, and Bidi Notation variants.
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 19]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- To read the bidi text in the examples, read the visual representation
- from left to right until you encounter a block of rtl text. Read the
- rtl block (including slashes and other special characters) from right
- to left, then continue at the next unread ltr character.
-
- Example 1: A single component with rtl characters is inverted:
- Logical representation: "http://ab.CDEFGH.ij/kl/mn/op.html"
- Visual representation: "http://ab.HGFEDC.ij/kl/mn/op.html"
- Components can be read one by one, and each component can be read in
- its natural direction.
-
- Example 2: More than one consecutive component with rtl characters is
- inverted as a whole:
- Logical representation: "http://ab.CDE.FGH/ij/kl/mn/op.html"
- Visual representation: "http://ab.HGF.EDC/ij/kl/mn/op.html"
- A sequence of rtl components is read rtl, in the same way as a
- sequence of rtl words is read rtl in a bidi text.
-
- Example 3: All components of an IRI (except for the scheme) are rtl.
- All rtl components are inverted overall:
- Logical representation: "http://AB.CD.EF/GH/IJ/KL?MN=OP;QR=ST#UV"
- Visual representation: "http://VU#TS=RQ;PO=NM?LK/JI/HG/FE.DC.BA"
- The whole IRI (except the scheme) is read rtl. Delimiters between
- rtl components stay between the respective components; delimiters
- between ltr and rtl components don't move.
-
- Example 4: Each of several sequences of rtl components is inverted on
- its own:
- Logical representation: "http://AB.CD.ef/gh/IJ/KL.html"
- Visual representation: "http://DC.BA.ef/gh/LK/JI.html"
- Each sequence of rtl components is read rtl, in the same way as each
- sequence of rtl words in an ltr text is read rtl.
-
- Example 5: Example 2, applied to components of different kinds:
- Logical representation: "http://ab.cd.EF/GH/ij/kl.html"
- Visual representation: "http://ab.cd.HG/FE/ij/kl.html"
- The inversion of the domain name label and the path component may be
- unexpected, but it is consistent with other bidi behavior. For
- reassurance that the domain component really is "ab.cd.EF", it may be
- helpful to read aloud the visual representation following the bidi
- algorithm. After "http://ab.cd." one reads the RTL block
- "E-F-slash-G-H", which corresponds to the logical representation.
-
- Example 6: Same as Example 5, with more rtl components:
- Logical representation: "http://ab.CD.EF/GH/IJ/kl.html"
- Visual representation: "http://ab.JI/HG/FE.DC/kl.html"
- The inversion of the domain name labels and the path components may
- be easier to identify because the delimiters also move.
-
-
-
-Duerst & Suignard Standards Track [Page 20]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- Example 7: A single rtl component includes digits:
- Logical representation: "http://ab.CDE123FGH.ij/kl/mn/op.html"
- Visual representation: "http://ab.HGF123EDC.ij/kl/mn/op.html"
- Numbers are written ltr in all cases but are treated as an additional
- embedding inside a run of rtl characters. This is completely
- consistent with usual bidirectional text.
-
- Example 8 (not allowed): Numbers are at the start or end of an rtl
- component:
- Logical representation: "http://ab.cd.ef/GH1/2IJ/KL.html"
- Visual representation: "http://ab.cd.ef/LK/JI1/2HG.html"
- The sequence "1/2" is interpreted by the bidi algorithm as a
- fraction, fragmenting the components and leading to confusion. There
- are other characters that are interpreted in a special way close to
- numbers; in particular, "+", "-", "#", "$", "%", ",", ".", and ":".
-
- Example 9 (not allowed): The numbers in the previous example are
- percent-encoded:
- Logical representation: "http://ab.cd.ef/GH%31/%32IJ/KL.html",
- Visual representation (Hebrew): "http://ab.cd.ef/%31HG/LK/JI%32.html"
- Visual representation (Arabic): "http://ab.cd.ef/31%HG/%LK/JI32.html"
- Depending on whether the uppercase letters represent Arabic or
- Hebrew, the visual representation is different.
-
- Example 10 (allowed but not recommended):
- Logical representation: "http://ab.CDEFGH.123/kl/mn/op.html"
- Visual representation: "http://ab.123.HGFEDC/kl/mn/op.html"
- Components consisting of only numbers are allowed (it would be rather
- difficult to prohibit them), but these may interact with adjacent RTL
- components in ways that are not easy to predict.
-
-5. Normalization and Comparison
-
- Note: The structure and much of the material for this section is
- taken from section 6 of [RFC3986]; the differences are due to the
- specifics of IRIs.
-
- One of the most common operations on IRIs is simple comparison:
- Determining whether two IRIs are equivalent without using the IRIs or
- the mapped URIs to access their respective resource(s). A comparison
- is performed whenever a response cache is accessed, a browser checks
- its history to color a link, or an XML parser processes tags within a
- namespace. Extensive normalization prior to comparison of IRIs may
- be used by spiders and indexing engines to prune a search space or
- reduce duplication of request actions and response storage.
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 21]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- IRI comparison is performed for some particular purpose. Protocols
- or implementations that compare IRIs for different purposes will
- often be subject to differing design trade-offs in regards to how
- much effort should be spent in reducing aliased identifiers. This
- section describes various methods that may be used to compare IRIs,
- the trade-offs between them, and the types of applications that might
- use them.
-
-5.1. Equivalence
-
- Because IRIs exist to identify resources, presumably they should be
- considered equivalent when they identify the same resource. However,
- this definition of equivalence is not of much practical use, as there
- is no way for an implementation to compare two resources unless it
- has full knowledge or control of them. For this reason, determination
- of equivalence or difference of IRIs is based on string comparison,
- perhaps augmented by reference to additional rules provided by URI
- scheme definitions. We use the terms "different" and "equivalent" to
- describe the possible outcomes of such comparisons, but there are
- many application-dependent versions of equivalence.
-
- Even though it is possible to determine that two IRIs are equivalent,
- IRI comparison is not sufficient to determine whether two IRIs
- identify different resources. For example, an owner of two different
- domain names could decide to serve the same resource from both,
- resulting in two different IRIs. Therefore, comparison methods are
- designed to minimize false negatives while strictly avoiding false
- positives.
-
- In testing for equivalence, applications should not directly compare
- relative references; the references should be converted to their
- respective target IRIs before comparison. When IRIs are compared to
- select (or avoid) a network action, such as retrieval of a
- representation, fragment components (if any) should be excluded from
- the comparison.
-
- Applications using IRIs as identity tokens with no relationship to a
- protocol MUST use the Simple String Comparison (see section 5.3.1).
- All other applications MUST select one of the comparison practices
- from the Comparison Ladder (see section 5.3 or, after IRI-to-URI
- conversion, select one of the comparison practices from the URI
- comparison ladder in [RFC3986], section 6.2)
-
-5.2. Preparation for Comparison
-
- Any kind of IRI comparison REQUIRES that all escapings or encodings
- in the protocol or format that carries an IRI are resolved. This is
- usually done when the protocol or format is parsed. Examples of such
-
-
-
-Duerst & Suignard Standards Track [Page 22]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- escapings or encodings are entities and numeric character references
- in [HTML4] and [XML1]. As an example,
- "http://example.org/ros&eacute;" (in HTML),
- "http://example.org/ros&#233"; (in HTML or XML), and
- "http://example.org/ros&#xE9"; (in HTML or XML) are all resolved into
- what is denoted in this document (see section 1.4) as
- "http://example.org/ros&#xE9"; (the "&#xE9;" here standing for the
- actual e-acute character, to compensate for the fact that this
- document cannot contain non-ASCII characters).
-
- Similar considerations apply to encodings such as Transfer Codings in
- HTTP (see [RFC2616]) and Content Transfer Encodings in MIME
- ([RFC2045]), although in these cases, the encoding is based not on
- characters but on octets, and additional care is required to make
- sure that characters, and not just arbitrary octets, are compared
- (see section 5.3.1).
-
-5.3. Comparison Ladder
-
- In practice, a variety of methods are used, to test IRI equivalence.
- These methods fall into a range distinguished by the amount of
- processing required and the degree to which the probability of false
- negatives is reduced. As noted above, false negatives cannot be
- eliminated. In practice, their probability can be reduced, but this
- reduction requires more processing and is not cost-effective for all
- applications.
-
- If this range of comparison practices is considered as a ladder, the
- following discussion will climb the ladder, starting with practices
- that are cheap but have a relatively higher chance of producing false
- negatives, and proceeding to those that have higher computational
- cost and lower risk of false negatives.
-
-5.3.1. Simple String Comparison
-
- If two IRIs, when considered as character strings, are identical,
- then it is safe to conclude that they are equivalent. This type of
- equivalence test has very low computational cost and is in wide use
- in a variety of applications, particularly in the domain of parsing.
- It is also used when a definitive answer to the question of IRI
- equivalence is needed that is independent of the scheme used and that
- can be calculated quickly and without accessing a network. An
- example of such a case is XML Namespaces ([XMLNamespace]).
-
- Testing strings for equivalence requires some basic precautions. This
- procedure is often referred to as "bit-for-bit" or "byte-for-byte"
- comparison, which is potentially misleading. Testing strings for
- equality is normally based on pair comparison of the characters that
-
-
-
-Duerst & Suignard Standards Track [Page 23]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- make up the strings, starting from the first and proceeding until
- both strings are exhausted and all characters are found to be equal,
- until a pair of characters compares unequal, or until one of the
- strings is exhausted before the other.
-
- This character comparison requires that each pair of characters be
- put in comparable encoding form. For example, should one IRI be
- stored in a byte array in UTF-8 encoding form and the second in a
- UTF-16 encoding form, bit-for-bit comparisons applied naively will
- produce errors. It is better to speak of equality on a
- character-for-character rather than on a byte-for-byte or bit-for-bit
- basis. In practical terms, character-by-character comparisons should
- be done codepoint by codepoint after conversion to a common character
- encoding form. When comparing character by character, the comparison
- function MUST NOT map IRIs to URIs, because such a mapping would
- create additional spurious equivalences. It follows that an IRI
- SHOULD NOT be modified when being transported if there is any chance
- that this IRI might be used as an identifier.
-
- False negatives are caused by the production and use of IRI aliases.
- Unnecessary aliases can be reduced, regardless of the comparison
- method, by consistently providing IRI references in an already
- normalized form (i.e., a form identical to what would be produced
- after normalization is applied, as described below). Protocols and
- data formats often limit some IRI comparisons to simple string
- comparison, based on the theory that people and implementations will,
- in their own best interest, be consistent in providing IRI
- references, or at least be consistent enough to negate any efficiency
- that might be obtained from further normalization.
-
-5.3.2. Syntax-Based Normalization
-
- Implementations may use logic based on the definitions provided by
- this specification to reduce the probability of false negatives. This
- processing is moderately higher in cost than character-for-character
- string comparison. For example, an application using this approach
- could reasonably consider the following two IRIs equivalent:
-
- example://a/b/c/%7Bfoo%7D/ros&#xE9;
- eXAMPLE://a/./b/../b/%63/%7bfoo%7d/ros%C3%A9
-
- Web user agents, such as browsers, typically apply this type of IRI
- normalization when determining whether a cached response is
- available. Syntax-based normalization includes such techniques as
- case normalization, character normalization, percent-encoding
- normalization, and removal of dot-segments.
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 24]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
-5.3.2.1. Case Normalization
-
- For all IRIs, the hexadecimal digits within a percent-encoding
- triplet (e.g., "%3a" versus "%3A") are case-insensitive and therefore
- should be normalized to use uppercase letters for the digits A - F.
-
- When an IRI uses components of the generic syntax, the component
- syntax equivalence rules always apply; namely, that the scheme and
- US-ASCII only host are case insensitive and therefore should be
- normalized to lowercase. For example, the URI
- "HTTP://www.EXAMPLE.com/" is equivalent to "http://www.example.com/".
- Case equivalence for non-ASCII characters in IRI components that are
- IDNs are discussed in section 5.3.3. The other generic syntax
- components are assumed to be case sensitive unless specifically
- defined otherwise by the scheme.
-
- Creating schemes that allow case-insensitive syntax components
- containing non-ASCII characters should be avoided. Case normalization
- of non-ASCII characters can be culturally dependent and is always a
- complex operation. The only exception concerns non-ASCII host names
- for which the character normalization includes a mapping step derived
- from case folding.
-
-5.3.2.2. Character Normalization
-
- The Unicode Standard [UNIV4] defines various equivalences between
- sequences of characters for various purposes. Unicode Standard Annex
- #15 [UTR15] defines various Normalization Forms for these
- equivalences, in particular Normalization Form C (NFC, Canonical
- Decomposition, followed by Canonical Composition) and Normalization
- Form KC (NFKC, Compatibility Decomposition, followed by Canonical
- Composition).
-
- Equivalence of IRIs MUST rely on the assumption that IRIs are
- appropriately pre-character-normalized rather than apply character
- normalization when comparing two IRIs. The exceptions are conversion
- from a non-digital form, and conversion from a non-UCS-based
- character encoding to a UCS-based character encoding. In these cases,
- NFC or a normalizing transcoder using NFC MUST be used for
- interoperability. To avoid false negatives and problems with
- transcoding, IRIs SHOULD be created by using NFC. Using NFKC may
- avoid even more problems; for example, by choosing half-width Latin
- letters instead of full-width ones, and full-width instead of
- half-width Katakana.
-
- As an example, "http://www.example.org/r&#xE9;sum&#xE9;.html" (in XML
- Notation) is in NFC. On the other hand,
- "http://www.example.org/re&#x301;sume&#x301;.html" is not in NFC.
-
-
-
-Duerst & Suignard Standards Track [Page 25]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- The former uses precombined e-acute characters, and the latter uses
- "e" characters followed by combining acute accents. Both usages are
- defined as canonically equivalent in [UNIV4].
-
- Note: Because it is unknown how a particular sequence of characters
- is being treated with respect to character normalization, it would
- be inappropriate to allow third parties to normalize an IRI
- arbitrarily. This does not contradict the recommendation that
- when a resource is created, its IRI should be as character
- normalized as possible (i.e., NFC or even NFKC). This is similar
- to the uppercase/lowercase problems. Some parts of a URI are case
- insensitive (domain name). For others, it is unclear whether they
- are case sensitive, case insensitive, or something in between
- (e.g., case sensitive, but with a multiple choice selection if the
- wrong case is used, instead of a direct negative result). The
- best recipe is that the creator use a reasonable capitalization
- and, when transferring the URI, capitalization never be changed.
-
- Various IRI schemes may allow the usage of Internationalized Domain
- Names (IDN) [RFC3490] either in the ireg-name part or elsewhere.
- Character Normalization also applies to IDNs, as discussed in section
- 5.3.3.
-
-5.3.2.3. Percent-Encoding Normalization
-
- The percent-encoding mechanism (section 2.1 of [RFC3986]) is a
- frequent source of variance among otherwise identical IRIs. In
- addition to the case normalization issue noted above, some IRI
- producers percent-encode octets that do not require percent-encoding,
- resulting in IRIs that are equivalent to their non encoded
- counterparts. These IRIs should be normalized by decoding any
- percent-encoded octet sequence that corresponds to an unreserved
- character, as described in section 2.3 of [RFC3986].
-
- For actual resolution, differences in percent-encoding (except for
- the percent-encoding of reserved characters) MUST always result in
- the same resource. For example, "http://example.org/~user",
- "http://example.org/%7euser", and "http://example.org/%7Euser", must
- resolve to the same resource.
-
- If this kind of equivalence is to be tested, the percent-encoding of
- both IRIs to be compared has to be aligned; for example, by
- converting both IRIs to URIs (see section 3.1), eliminating escape
- differences in the resulting URIs, and making sure that the case of
- the hexadecimal characters in the percent-encoding is always the same
- (preferably uppercase). If the IRI is to be passed to another
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 26]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- application or used further in some other way, its original form MUST
- be preserved. The conversion described here should be performed only
- for local comparison.
-
-5.3.2.4. Path Segment Normalization
-
- The complete path segments "." and ".." are intended only for use
- within relative references (section 4.1 of [RFC3986]) and are removed
- as part of the reference resolution process (section 5.2 of
- [RFC3986]). However, some implementations may incorrectly assume
- that reference resolution is not necessary when the reference is
- already an IRI, and thus fail to remove dot-segments when they occur
- in non-relative paths. IRI normalizers should remove dot-segments by
- applying the remove_dot_segments algorithm to the path, as described
- in section 5.2.4 of [RFC3986].
-
-5.3.3. Scheme-Based Normalization
-
- The syntax and semantics of IRIs vary from scheme to scheme, as
- described by the defining specification for each scheme.
- Implementations may use scheme-specific rules, at further processing
- cost, to reduce the probability of false negatives. For example,
- because the "http" scheme makes use of an authority component, has a
- default port of "80", and defines an empty path to be equivalent to
- "/", the following four IRIs are equivalent:
-
- http://example.com
- http://example.com/
- http://example.com:/
- http://example.com:80/
-
- In general, an IRI that uses the generic syntax for authority with an
- empty path should be normalized to a path of "/". Likewise, an
- explicit ":port", for which the port is empty or the default for the
- scheme, is equivalent to one where the port and its ":" delimiter are
- elided and thus should be removed by scheme-based normalization. For
- example, the second IRI above is the normal form for the "http"
- scheme.
-
- Another case where normalization varies by scheme is in the handling
- of an empty authority component or empty host subcomponent. For many
- scheme specifications, an empty authority or host is considered an
- error; for others, it is considered equivalent to "localhost" or the
- end-user's host. When a scheme defines a default for authority and
- an IRI reference to that default is desired, the reference should be
- normalized to an empty authority for the sake of uniformity, brevity,
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 27]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- and internationalization. If, however, either the userinfo or port
- subcomponents are non-empty, then the host should be given explicitly
- even if it matches the default.
-
- Normalization should not remove delimiters when their associated
- component is empty unless it is licensed to do so by the scheme
- specification. For example, the IRI "http://example.com/?" cannot be
- assumed to be equivalent to any of the examples above. Likewise, the
- presence or absence of delimiters within a userinfo subcomponent is
- usually significant to its interpretation. The fragment component is
- not subject to any scheme-based normalization; thus, two IRIs that
- differ only by the suffix "#" are considered different regardless of
- the scheme.
-
- Some IRI schemes may allow the usage of Internationalized Domain
- Names (IDN) [RFC3490] either in their ireg-name part or elsewhere.
- When in use in IRIs, those names SHOULD be validated by using the
- ToASCII operation defined in [RFC3490], with the flags
- "UseSTD3ASCIIRules" and "AllowUnassigned". An IRI containing an
- invalid IDN cannot successfully be resolved. Validated IDN
- components of IRIs SHOULD be character normalized by using the
- Nameprep process [RFC3491]; however, for legibility purposes, they
- SHOULD NOT be converted into ASCII Compatible Encoding (ACE).
-
- Scheme-based normalization may also consider IDN components and their
- conversions to punycode as equivalent. As an example,
- "http://r&#xE9;sum&#xE9;.example.org" may be considered equivalent to
- "http://xn--rsum-bpad.example.org".
-
- Other scheme-specific normalizations are possible.
-
-5.3.4. Protocol-Based Normalization
-
- Substantial effort to reduce the incidence of false negatives is
- often cost-effective for web spiders. Consequently, they implement
- even more aggressive techniques in IRI comparison. For example, if
- they observe that an IRI such as
-
- http://example.com/data
-
- redirects to an IRI differing only in the trailing slash
-
- http://example.com/data/
-
- they will likely regard the two as equivalent in the future. This
- kind of technique is only appropriate when equivalence is clearly
- indicated by both the result of accessing the resources and the
-
-
-
-
-Duerst & Suignard Standards Track [Page 28]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- common conventions of their scheme's dereference algorithm (in this
- case, use of redirection by HTTP origin servers to avoid problems
- with relative references).
-
-6. Use of IRIs
-
-6.1. Limitations on UCS Characters Allowed in IRIs
-
- This section discusses limitations on characters and character
- sequences usable for IRIs beyond those given in section 2.2 and
- section 4.1. The considerations in this section are relevant when
- IRIs are created and when URIs are converted to IRIs.
-
- a. The repertoire of characters allowed in each IRI component is
- limited by the definition of that component. For example, the
- definition of the scheme component does not allow characters
- beyond US-ASCII.
-
- (Note: In accordance with URI practice, generic IRI software
- cannot and should not check for such limitations.)
-
- b. The UCS contains many areas of characters for which there are
- strong visual look-alikes. Because of the likelihood of
- transcription errors, these also should be avoided. This
- includes the full-width equivalents of Latin characters,
- half-width Katakana characters for Japanese, and many others. It
- also includes many look-alikes of "space", "delims", and
- "unwise", characters excluded in [RFC3491].
-
- Additional information is available from [UNIXML]. [UNIXML] is
- written in the context of running text rather than in that of
- identifiers. Nevertheless, it discusses many of the categories of
- characters not appropriate for IRIs.
-
-6.2. Software Interfaces and Protocols
-
- Although an IRI is defined as a sequence of characters, software
- interfaces for URIs typically function on sequences of octets or
- other kinds of code units. Thus, software interfaces and protocols
- MUST define which character encoding is used.
-
- Intermediate software interfaces between IRI-capable components and
- URI-only components MUST map the IRIs per section 3.1, when
- transferring from IRI-capable to URI-only components. This mapping
- SHOULD be applied as late as possible. It SHOULD NOT be applied
- between components that are known to be able to handle IRIs.
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 29]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
-6.3. Format of URIs and IRIs in Documents and Protocols
-
- Document formats that transport URIs may have to be upgraded to allow
- the transport of IRIs. In cases where the document as a whole has a
- native character encoding, IRIs MUST also be encoded in this
- character encoding and converted accordingly by a parser or
- interpreter. IRI characters not expressible in the native character
- encoding SHOULD be escaped by using the escaping conventions of the
- document format if such conventions are available. Alternatively,
- they MAY be percent-encoded according to section 3.1. For example, in
- HTML or XML, numeric character references SHOULD be used. If a
- document as a whole has a native character encoding and that
- character encoding is not UTF-8, then IRIs MUST NOT be placed into
- the document in the UTF-8 character encoding.
-
- Note: Some formats already accommodate IRIs, although they use
- different terminology. HTML 4.0 [HTML4] defines the conversion from
- IRIs to URIs as error-avoiding behavior. XML 1.0 [XML1], XLink
- [XLink], XML Schema [XMLSchema], and specifications based upon them
- allow IRIs. Also, it is expected that all relevant new W3C formats
- and protocols will be required to handle IRIs [CharMod].
-
-6.4. Use of UTF-8 for Encoding Original Characters
-
- This section discusses details and gives examples for point c) in
- section 1.2. To be able to use IRIs, the URI corresponding to the
- IRI in question has to encode original characters into octets by
- using UTF-8. This can be specified for all URIs of a URI scheme or
- can apply to individual URIs for schemes that do not specify how to
- encode original characters. It can apply to the whole URI, or only
- to some part. For background information on encoding characters into
- URIs, see also section 2.5 of [RFC3986].
-
- For new URI schemes, using UTF-8 is recommended in [RFC2718].
- Examples where UTF-8 is already used are the URN syntax [RFC2141],
- IMAP URLs [RFC2192], and POP URLs [RFC2384]. On the other hand,
- because the HTTP URL scheme does not specify how to encode original
- characters, only some HTTP URLs can have corresponding but different
- IRIs.
-
- For example, for a document with a URI of
- "http://www.example.org/r%C3%A9sum%C3%A9.html", it is possible to
- construct a corresponding IRI (in XML notation, see, section 1.4):
- "http://www.example.org/r&#xE9;sum&#xE9;.html" ("&#xE9"; stands for
- the e-acute character, and "%C3%A9" is the UTF-8 encoded and
- percent-encoded representation of that character). On the other
- hand, for a document with a URI of
-
-
-
-
-Duerst & Suignard Standards Track [Page 30]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- "http://www.example.org/r%E9sum%E9.html", the percent-encoding octets
- cannot be converted to actual characters in an IRI, as the
- percent-encoding is not based on UTF-8.
-
- This means that for most URI schemes, there is no need to upgrade
- their scheme definition in order for them to work with IRIs. The
- main case where upgrading makes sense is when a scheme definition, or
- a particular component of a scheme, is strictly limited to the use of
- US-ASCII characters with no provision to include non-ASCII
- characters/octets via percent-encoding, or if a scheme definition
- currently uses highly scheme-specific provisions for the encoding of
- non-ASCII characters. An example of this is the mailto: scheme
- [RFC2368].
-
- This specification does not upgrade any scheme specifications in any
- way; this has to be done separately. Also, note that there is no
- such thing as an "IRI scheme"; all IRIs use URI schemes, and all URI
- schemes can be used with IRIs, even though in some cases only by
- using URIs directly as IRIs, without any conversion.
-
- URI schemes can impose restrictions on the syntax of scheme-specific
- URIs; i.e., URIs that are admissible under the generic URI syntax
- [RFC3986] may not be admissible due to narrower syntactic constraints
- imposed by a URI scheme specification. URI scheme definitions cannot
- broaden the syntactic restrictions of the generic URI syntax;
- otherwise, it would be possible to generate URIs that satisfied the
- scheme-specific syntactic constraints without satisfying the
- syntactic constraints of the generic URI syntax. However, additional
- syntactic constraints imposed by URI scheme specifications are
- applicable to IRI, as the corresponding URI resulting from the
- mapping defined in section 3.1 MUST be a valid URI under the
- syntactic restrictions of generic URI syntax and any narrower
- restrictions imposed by the corresponding URI scheme specification.
-
- The requirement for the use of UTF-8 applies to all parts of a URI
- (with the potential exception of the ireg-name part; see section
- 3.1). However, it is possible that the capability of IRIs to
- represent a wide range of characters directly is used just in some
- parts of the IRI (or IRI reference). The other parts of the IRI may
- only contain US-ASCII characters, or they may not be based on UTF-8.
- They may be based on another character encoding, or they may directly
- encode raw binary data (see also [RFC2397]).
-
- For example, it is possible to have a URI reference of
- "http://www.example.org/r%E9sum%E9.xml#r%C3%A9sum%C3%A9", where the
- document name is encoded in iso-8859-1 based on server settings, but
- where the fragment identifier is encoded in UTF-8 according to
-
-
-
-
-Duerst & Suignard Standards Track [Page 31]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- [XPointer]. The IRI corresponding to the above URI would be (in XML
- notation)
- "http://www.example.org/r%E9sum%E9.xml#r&#xE9;sum&#xE9";.
-
- Similar considerations apply to query parts. The functionality of
- IRIs (namely, to be able to include non-ASCII characters) can only be
- used if the query part is encoded in UTF-8.
-
-6.5. Relative IRI References
-
- Processing of relative IRI references against a base is handled
- straightforwardly; the algorithms of [RFC3986] can be applied
- directly, treating the characters additionally allowed in IRI
- references in the same way that unreserved characters are in URI
- references.
-
-7. URI/IRI Processing Guidelines (Informative)
-
- This informative section provides guidelines for supporting IRIs in
- the same software components and operations that currently process
- URIs: Software interfaces that handle URIs, software that allows
- users to enter URIs, software that creates or generates URIs,
- software that displays URIs, formats and protocols that transport
- URIs, and software that interprets URIs. These may all require
- modification before functioning properly with IRIs. The
- considerations in this section also apply to URI references and IRI
- references.
-
-7.1. URI/IRI Software Interfaces
-
- Software interfaces that handle URIs, such as URI-handling APIs and
- protocols transferring URIs, need interfaces and protocol elements
- that are designed to carry IRIs.
-
- In case the current handling in an API or protocol is based on
- US-ASCII, UTF-8 is recommended as the character encoding for IRIs, as
- it is compatible with US-ASCII, is in accordance with the
- recommendations of [RFC2277], and makes converting to URIs easy. In
- any case, the API or protocol definition must clearly define the
- character encoding to be used.
-
- The transfer from URI-only to IRI-capable components requires no
- mapping, although the conversion described in section 3.2 above may
- be performed. It is preferable not to perform this inverse
- conversion when there is a chance that this cannot be done correctly.
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 32]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
-7.2. URI/IRI Entry
-
- Some components allow users to enter URIs into the system by typing
- or dictation, for example. This software must be updated to allow
- for IRI entry.
-
- A person viewing a visual representation of an IRI (as a sequence of
- glyphs, in some order, in some visual display) or hearing an IRI will
- use an entry method for characters in the user's language to input
- the IRI. Depending on the script and the input method used, this may
- be a more or less complicated process.
-
- The process of IRI entry must ensure, as much as possible, that the
- restrictions defined in section 2.2 are met. This may be done by
- choosing appropriate input methods or variants/settings thereof, by
- appropriately converting the characters being input, by eliminating
- characters that cannot be converted, and/or by issuing a warning or
- error message to the user.
-
- As an example of variant settings, input method editors for East
- Asian Languages usually allow the input of Latin letters and related
- characters in full-width or half-width versions. For IRI input, the
- input method editor should be set so that it produces half-width
- Latin letters and punctuation and full-width Katakana.
-
- An input field primarily or solely used for the input of URIs/IRIs
- may allow the user to view an IRI as it is mapped to a URI. Places
- where the input of IRIs is frequent may provide the possibility for
- viewing an IRI as mapped to a URI. This will help users when some of
- the software they use does not yet accept IRIs.
-
- An IRI input component interfacing to components that handle URIs,
- but not IRIs, must map the IRI to a URI before passing it to these
- components.
-
- For the input of IRIs with right-to-left characters, please see
- section 4.3.
-
-7.3. URI/IRI Transfer between Applications
-
- Many applications, particularly mail user agents, try to detect URIs
- appearing in plain text. For this, they use some heuristics based on
- URI syntax. They then allow the user to click on such URIs and
- retrieve the corresponding resource in an appropriate (usually
- scheme-dependent) application.
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 33]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- Such applications have to be upgraded to use the IRI syntax as a base
- for heuristics. In particular, a non-ASCII character should not be
- taken as the indication of the end of an IRI. Such applications also
- have to make sure that they correctly convert the detected IRI from
- the character encoding of the document or application where the IRI
- appears to the character encoding used by the system-wide IRI
- invocation mechanism, or to a URI (according to section 3.1) if the
- system-wide invocation mechanism only accepts URIs.
-
- The clipboard is another frequently used way to transfer URIs and
- IRIs from one application to another. On most platforms, the
- clipboard is able to store and transfer text in many languages and
- scripts. Correctly used, the clipboard transfers characters, not
- bytes, which will do the right thing with IRIs.
-
-7.4. URI/IRI Generation
-
- Systems that offer resources through the Internet, where those
- resources have logical names, sometimes automatically generate URIs
- for the resources they offer. For example, some HTTP servers can
- generate a directory listing for a file directory and then respond to
- the generated URIs with the files.
-
- Many legacy character encodings are in use in various file systems.
- Many currently deployed systems do not transform the local character
- representation of the underlying system before generating URIs.
-
- For maximum interoperability, systems that generate resource
- identifiers should make the appropriate transformations. For
- example, if a file system contains a file named
- "r&#xE9;sum&#xE9;.html", a server should expose this as
- "r%C3%A9sum%C3%A9.html" in a URI, which allows use of
- "r&#xE9;sum&#xE9;.html" in an IRI, even if locally the file name is
- kept in a character encoding other than UTF-8.
-
- This recommendation particularly applies to HTTP servers. For FTP
- servers, similar considerations apply; see [RFC2640].
-
-7.5. URI/IRI Selection
-
- In some cases, resource owners and publishers have control over the
- IRIs used to identify their resources. This control is mostly
- executed by controlling the resource names, such as file names,
- directly.
-
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 34]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- In these cases, it is recommended to avoid choosing IRIs that are
- easily confused. For example, for US-ASCII, the lower-case ell ("l")
- is easily confused with the digit one ("1"), and the upper-case oh
- ("O") is easily confused with the digit zero ("0"). Publishers
- should avoid confusing users with "br0ken" or "1ame" identifiers.
-
- Outside the US-ASCII repertoire, there are many more opportunities
- for confusion; a complete set of guidelines is too lengthy to include
- here. As long as names are limited to characters from a single
- script, native writers of a given script or language will know best
- when ambiguities can appear, and how they can be avoided. What may
- look ambiguous to a stranger may be completely obvious to the average
- native user. On the other hand, in some cases, the UCS contains
- variants for compatibility reasons; for example, for typographic
- purposes. These should be avoided wherever possible. Although there
- may be exceptions, newly created resource names should generally be
- in NFKC [UTR15] (which means that they are also in NFC).
-
- As an example, the UCS contains the "fi" ligature at U+FB01 for
- compatibility reasons. Wherever possible, IRIs should use the two
- letters "f" and "i" rather than the "fi" ligature. An example where
- the latter may be used is in the query part of an IRI for an explicit
- search for a word written containing the "fi" ligature.
-
- In certain cases, there is a chance that characters from different
- scripts look the same. The best known example is the similarity of
- the Latin "A", the Greek "Alpha", and the Cyrillic "A". To avoid
- such cases, only IRIs should be created where all the characters in a
- single component are used together in a given language. This usually
- means that all of these characters will be from the same script, but
- there are languages that mix characters from different scripts (such
- as Japanese). This is similar to the heuristics used to distinguish
- between letters and numbers in the examples above. Also, for Latin,
- Greek, and Cyrillic, using lowercase letters results in fewer
- ambiguities than using uppercase letters would.
-
-7.6. Display of URIs/IRIs
-
- In situations where the rendering software is not expected to display
- non-ASCII parts of the IRI correctly using the available layout and
- font resources, these parts should be percent-encoded before being
- displayed.
-
- For display of Bidi IRIs, please see section 4.1.
-
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 35]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
-7.7. Interpretation of URIs and IRIs
-
- Software that interprets IRIs as the names of local resources should
- accept IRIs in multiple forms and convert and match them with the
- appropriate local resource names.
-
- First, multiple representations include both IRIs in the native
- character encoding of the protocol and also their URI counterparts.
-
- Second, it may include URIs constructed based on character encodings
- other than UTF-8. These URIs may be produced by user agents that do
- not conform to this specification and that use legacy character
- encodings to convert non-ASCII characters to URIs. Whether this is
- necessary, and what character encodings to cover, depends on a number
- of factors, such as the legacy character encodings used locally and
- the distribution of various versions of user agents. For example,
- software for Japanese may accept URIs in Shift_JIS and/or EUC-JP in
- addition to UTF-8.
-
- Third, it may include additional mappings to be more user-friendly
- and robust against transmission errors. These would be similar to
- how some servers currently treat URIs as case insensitive or perform
- additional matching to account for spelling errors. For characters
- beyond the US-ASCII repertoire, this may, for example, include
- ignoring the accents on received IRIs or resource names. Please note
- that such mappings, including case mappings, are language dependent.
-
- It can be difficult to identify a resource unambiguously if too many
- mappings are taken into consideration. However, percent-encoded and
- not percent-encoded parts of IRIs can always be clearly
- distinguished. Also, the regularity of UTF-8 (see [Duerst97]) makes
- the potential for collisions lower than it may seem at first.
-
-7.8. Upgrading Strategy
-
- Where this recommendation places further constraints on software for
- which many instances are already deployed, it is important to
- introduce upgrades carefully and to be aware of the various
- interdependencies.
-
- If IRIs cannot be interpreted correctly, they should not be created,
- generated, or transported. This suggests that upgrading URI
- interpreting software to accept IRIs should have highest priority.
-
- On the other hand, a single IRI is interpreted only by a single or
- very few interpreters that are known in advance, although it may be
- entered and transported very widely.
-
-
-
-
-Duerst & Suignard Standards Track [Page 36]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- Therefore, IRIs benefit most from a broad upgrade of software to be
- able to enter and transport IRIs. However, before an individual IRI
- is published, care should be taken to upgrade the corresponding
- interpreting software in order to cover the forms expected to be
- received by various versions of entry and transport software.
-
- The upgrade of generating software to generate IRIs instead of using
- a local character encoding should happen only after the service is
- upgraded to accept IRIs. Similarly, IRIs should only be generated
- when the service accepts IRIs and the intervening infrastructure and
- protocol is known to transport them safely.
-
- Software converting from URIs to IRIs for display should be upgraded
- only after upgraded entry software has been widely deployed to the
- population that will see the displayed result.
-
- Where there is a free choice of character encodings, it is often
- possible to reduce the effort and dependencies for upgrading to IRIs
- by using UTF-8 rather than another encoding. For example, when a new
- file-based Web server is set up, using UTF-8 as the character
- encoding for file names will make the transition to IRIs easier.
- Likewise, when a new Web form is set up using UTF-8 as the character
- encoding of the form page, the returned query URIs will use UTF-8 as
- the character encoding (unless the user, for whatever reason, changes
- the character encoding) and will therefore be compatible with IRIs.
-
- These recommendations, when taken together, will allow for the
- extension from URIs to IRIs in order to handle characters other than
- US-ASCII while minimizing interoperability problems. For
- considerations regarding the upgrade of URI scheme definitions, see
- section 6.4.
-
-8. Security Considerations
-
- The security considerations discussed in [RFC3986] also apply to
- IRIs. In addition, the following issues require particular care for
- IRIs.
-
- Incorrect encoding or decoding can lead to security problems. In
- particular, some UTF-8 decoders do not check against overlong byte
- sequences. As an example, a "/" is encoded with the byte 0x2F both
- in UTF-8 and in US-ASCII, but some UTF-8 decoders also wrongly
- interpret the sequence 0xC0 0xAF as a "/". A sequence such as
-
-
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 37]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- "%C0%AF.." may pass some security tests and then be interpreted as
- "/.." in a path if UTF-8 decoders are fault-tolerant, if conversion
- and checking are not done in the right order, and/or if reserved
- characters and unreserved characters are not clearly distinguished.
-
- There are various ways in which "spoofing" can occur with IRIs.
- "Spoofing" means that somebody may add a resource name that looks the
- same or similar to the user, but that points to a different resource.
- The added resource may pretend to be the real resource by looking
- very similar but may contain all kinds of changes that may be
- difficult to spot and that can cause all kinds of problems. Most
- spoofing possibilities for IRIs are extensions of those for URIs.
-
- Spoofing can occur for various reasons. First, a user's
- normalization expectations or actual normalization when entering an
- IRI or transcoding an IRI from a legacy character encoding do not
- match the normalization used on the server side. Conceptually, this
- is no different from the problems surrounding the use of
- case-insensitive web servers. For example, a popular web page with a
- mixed-case name ("http://big.example.com/PopularPage.html") might be
- "spoofed" by someone who is able to create
- "http://big.example.com/popularpage.html". However, the use of
- unnormalized character sequences, and of additional mappings for user
- convenience, may increase the chance for spoofing. Protocols and
- servers that allow the creation of resources with names that are not
- normalized are particularly vulnerable to such attacks. This is an
- inherent security problem of the relevant protocol, server, or
- resource and is not specific to IRIs, but it is mentioned here for
- completeness.
-
- Spoofing can occur in various IRI components, such as the domain name
- part or a path part. For considerations specific to the domain name
- part, see [RFC3491]. For the path part, administrators of sites that
- allow independent users to create resources in the same sub area may
- have to be careful to check for spoofing.
-
- Spoofing can occur because in the UCS many characters look very
- similar. Details are discussed in Section 7.5. Again, this is very
- similar to spoofing possibilities on US-ASCII, e.g., using "br0ken"
- or "1ame" URIs.
-
- Spoofing can occur when URIs with percent-encodings based on various
- character encodings are accepted to deal with older user agents. In
- some cases, particularly for Latin-based resource names, this is
- usually easy to detect because UTF-8-encoded names, when interpreted
- and viewed as legacy character encodings, produce mostly garbage.
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 38]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- When concurrently used character encodings have a similar structure
- but there are no characters that have exactly the same encoding,
- detection is more difficult.
-
- Spoofing can occur with bidirectional IRIs, if the restrictions in
- section 4.2 are not followed. The same visual representation may be
- interpreted as different logical representations, and vice versa. It
- is also very important that a correct Unicode bidirectional
- implementation be used.
-
-9. Acknowledgements
-
- We would like to thank Larry Masinter for his work as coauthor of
- many earlier versions of this document (draft-masinter-url-i18n-xx).
-
- The discussion on the issue addressed here started a long time ago.
- There was a thread in the HTML working group in August 1995 (under
- the topic of "Globalizing URIs") and in the www-international mailing
- list in July 1996 (under the topic of "Internationalization and
- URLs"), and there were ad-hoc meetings at the Unicode conferences in
- September 1995 and September 1997.
-
- Many thanks go to Francois Yergeau, Matitiahu Allouche, Roy Fielding,
- Tim Berners-Lee, Mark Davis, M.T. Carrasco Benitez, James Clark, Tim
- Bray, Chris Wendt, Yaron Goland, Andrea Vine, Misha Wolf, Leslie
- Daigle, Ted Hardie, Bill Fenner, Margaret Wasserman, Russ Housley,
- Makoto MURATA, Steven Atkin, Ryan Stansifer, Tex Texin, Graham Klyne,
- Bjoern Hoehrmann, Chris Lilley, Ian Jacobs, Adam Costello, Dan
- Oscarson, Elliotte Rusty Harold, Mike J. Brown, Roy Badami, Jonathan
- Rosenne, Asmus Freytag, Simon Josefsson, Carlos Viegas Damasio, Chris
- Haynes, Walter Underwood, and many others for help with understanding
- the issues and possible solutions, and with getting the details
- right.
-
- This document is a product of the Internationalization Working Group
- (I18N WG) of the World Wide Web Consortium (W3C). Thanks to the
- members of the W3C I18N Working Group and Interest Group for their
- contributions and their work on [CharMod]. Thanks also go to the
- members of many other W3C Working Groups for adopting IRIs, and to
- the members of the Montreal IAB Workshop on Internationalization and
- Localization for their review.
-
-
-
-
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 39]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
-10. References
-
-10.1. Normative References
-
- [ASCII] American National Standards Institute, "Coded
- Character Set -- 7-bit American Standard Code for
- Information Interchange", ANSI X3.4, 1986.
-
- [ISO10646] International Organization for Standardization,
- "ISO/IEC 10646:2003: Information Technology -
- Universal Multiple-Octet Coded Character Set (UCS)",
- ISO Standard 10646, December 2003.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", RFC 2234, November 1997.
-
- [RFC3490] Faltstrom, P., Hoffman, P., and A. Costello,
- "Internationalizing Domain Names in Applications
- (IDNA)", RFC 3490, March 2003.
-
- [RFC3491] Hoffman, P. and M. Blanchet, "Nameprep: A Stringprep
- Profile for Internationalized Domain Names (IDN)", RFC
- 3491, March 2003.
-
- [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
- 10646", STD 63, RFC 3629, November 2003.
-
- [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter,
- "Uniform Resource Identifier (URI): Generic Syntax",
- STD 66, RFC 3986, January 2005.
-
- [UNI9] Davis, M., "The Bidirectional Algorithm", Unicode
- Standard Annex #9, March 2004,
- <http://www.unicode.org/reports/tr9/tr9-13.html>.
-
- [UNIV4] The Unicode Consortium, "The Unicode Standard, Version
- 4.0.1, defined by: The Unicode Standard, Version 4.0
- (Reading, MA, Addison-Wesley, 2003. ISBN
- 0-321-18578-1), as amended by Unicode 4.0.1
- (http://www.unicode.org/versions/Unicode4.0.1/)",
- March 2004.
-
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 40]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- [UTR15] Davis, M. and M. Duerst, "Unicode Normalization
- Forms", Unicode Standard Annex #15, April 2003,
- <http://www.unicode.org/unicode/reports/
- tr15/tr15-23.html>.
-
-10.2. Informative References
-
- [BidiEx] "Examples of bidirectional IRIs",
- <http://www.w3.org/International/iri-edit/
- BidiExamples>.
-
- [CharMod] Duerst, M., Yergeau, F., Ishida, R., Wolf, M., and T.
- Texin, "Character Model for the World Wide Web:
- Resource Identifiers", World Wide Web Consortium
- Candidate Recommendation, November 2004,
- <http://www.w3.org/TR/charmod-resid>.
-
- [Duerst97] Duerst, M., "The Properties and Promises of UTF-8",
- Proc. 11th International Unicode Conference, San Jose
- , September 1997,
- <http://www.ifi.unizh.ch/mml/mduerst/papers/
- PDF/IUC11-UTF-8.pdf>.
-
- [Gettys] Gettys, J., "URI Model Consequences",
- <http://www.w3.org/DesignIssues/ModelConsequences>.
-
- [HTML4] Raggett, D., Le Hors, A., and I. Jacobs, "HTML 4.01
- Specification", World Wide Web Consortium
- Recommendation, December 1999,
- <http://www.w3.org/TR/html401/appendix/
- notes.html#h-B.2>.
-
- [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet
- Mail Extensions (MIME) Part One: Format of Internet
- Message Bodies", RFC 2045, November 1996.
-
- [RFC2130] Weider, C., Preston, C., Simonsen, K., Alvestrand, H.,
- Atkinson, R., Crispin, M., and P. Svanberg, "The
- Report of the IAB Character Set Workshop held 29
- February - 1 March, 1996", RFC 2130, April 1997.
-
- [RFC2141] Moats, R., "URN Syntax", RFC 2141, May 1997.
-
- [RFC2192] Newman, C., "IMAP URL Scheme", RFC 2192, September
- 1997.
-
- [RFC2277] Alvestrand, H., "IETF Policy on Character Sets and
- Languages", BCP 18, RFC 2277, January 1998.
-
-
-
-Duerst & Suignard Standards Track [Page 41]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- [RFC2368] Hoffman, P., Masinter, L., and J. Zawinski, "The
- mailto URL scheme", RFC 2368, July 1998.
-
- [RFC2384] Gellens, R., "POP URL Scheme", RFC 2384, August 1998.
-
- [RFC2396] Berners-Lee, T., Fielding, R., and L. Masinter,
- "Uniform Resource Identifiers (URI): Generic Syntax",
- RFC 2396, August 1998.
-
- [RFC2397] Masinter, L., "The "data" URL scheme", RFC 2397,
- August 1998.
-
- [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., and T. Berners-Lee,
- "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616,
- June 1999.
-
- [RFC2640] Curtin, B., "Internationalization of the File Transfer
- Protocol", RFC 2640, July 1999.
-
- [RFC2718] Masinter, L., Alvestrand, H., Zigmond, D., and R.
- Petke, "Guidelines for new URL Schemes", RFC 2718,
- November 1999.
-
- [UNIXML] Duerst, M. and A. Freytag, "Unicode in XML and other
- Markup Languages", Unicode Technical Report #20, World
- Wide Web Consortium Note, June 2003,
- <http://www.w3.org/TR/unicode-xml/>.
-
- [XLink] DeRose, S., Maler, E., and D. Orchard, "XML Linking
- Language (XLink) Version 1.0", World Wide Web
- Consortium Recommendation, June 2001,
- <http://www.w3.org/TR/xlink/#link-locators>.
-
- [XML1] Bray, T., Paoli, J., Sperberg-McQueen, C., Maler, E.,
- and F. Yergeau, "Extensible Markup Language (XML) 1.0
- (Third Edition)", World Wide Web Consortium
- Recommendation, February 2004,
- <http://www.w3.org/TR/REC-xml#sec-external-ent>.
-
- [XMLNamespace] Bray, T., Hollander, D., and A. Layman, "Namespaces in
- XML", World Wide Web Consortium Recommendation,
- January 1999, <http://www.w3.org/TR/REC-xml-names>.
-
- [XMLSchema] Biron, P. and A. Malhotra, "XML Schema Part 2:
- Datatypes", World Wide Web Consortium Recommendation,
- May 2001, <http://www.w3.org/TR/xmlschema-2/#anyURI>.
-
-
-
-
-Duerst & Suignard Standards Track [Page 42]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- [XPointer] Grosso, P., Maler, E., Marsh, J. and N. Walsh,
- "XPointer Framework", World Wide Web Consortium
- Recommendation, March 2003,
- <http://www.w3.org/TR/xptr-framework/#escaping>.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 43]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
-Appendix A. Design Alternatives
-
- This section shortly summarizes major design alternatives and the
- reasons for why they were not chosen.
-
-Appendix A.1. New Scheme(s)
-
- Introducing new schemes (for example, httpi:, ftpi:,...) or a new
- metascheme (e.g., i:, leading to URI/IRI prefixes such as i:http:,
- i:ftp:,...) was proposed to make IRI-to-URI conversion scheme
- dependent or to distinguish between percent-encodings resulting from
- IRI-to-URI conversion and percent-encodings from legacy character
- encodings.
-
- New schemes are not needed to distinguish URIs from true IRIs (i.e.,
- IRIs that contain non-ASCII characters). The benefit of being able
- to detect the origin of percent-encodings is marginal, as UTF-8 can
- be detected with very high reliability. Deploying new schemes is
- extremely hard, so not requiring new schemes for IRIs makes
- deployment of IRIs vastly easier. Making conversion scheme dependent
- is highly inadvisable and would be encouraged by separate schemes for
- IRIs. Using a uniform convention for conversion from IRIs to URIs
- makes IRI implementation orthogonal to the introduction of actual new
- schemes.
-
-Appendix A.2. Character Encodings Other Than UTF-8
-
- At an early stage, UTF-7 was considered as an alternative to UTF-8
- when IRIs are converted to URIs. UTF-7 would not have needed
- percent-encoding and in most cases would have been shorter than
- percent-encoded UTF-8.
-
- Using UTF-8 avoids a double layering and overloading of the use of
- the "+" character. UTF-8 is fully compatible with US-ASCII and has
- therefore been recommended by the IETF, and is being used widely.
-
- UTF-7 has never been used much and is now clearly being discouraged.
- Requiring implementations to convert from UTF-8 to UTF-7 and back
- would be an additional implementation burden.
-
-Appendix A.3. New Encoding Convention
-
- Instead of using the existing percent-encoding convention of URIs,
- which is based on octets, the idea was to create a new encoding
- convention; for example, to use "%u" to introduce UCS code points.
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 44]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
- Using the existing octet-based percent-encoding mechanism does not
- need an upgrade of the URI syntax and does not need corresponding
- server upgrades.
-
-Appendix A.4. Indicating Character Encodings in the URI/IRI
-
- Some proposals suggested indicating the character encodings used in
- an URI or IRI with some new syntactic convention in the URI itself,
- similar to the "charset" parameter for e-mails and Web pages. As an
- example, the label in square brackets in
- "http://www.example.org/ros[iso-8859-1]&#xE9"; indicated that the
- following "&#xE9"; had to be interpreted as iso-8859-1.
-
- If UTF-8 is used exclusively, an upgrade to the URI syntax is not
- needed. It avoids potentially multiple labels that have to be copied
- correctly in all cases, even on the side of a bus or on a napkin,
- leading to usability problems (and being prohibitively annoying).
- Exclusively using UTF-8 also reduces transcoding errors and
- confusion.
-
-Authors' Addresses
-
- Martin Duerst (Note: Please write "Duerst" with u-umlaut wherever
- possible, for example as "D&#252;rst" in XML and
- HTML.)
- World Wide Web Consortium
- 5322 Endo
- Fujisawa, Kanagawa 252-8520
- Japan
-
- Phone: +81 466 49 1170
- Fax: +81 466 49 1171
- EMail: duerst@w3.org
- URI: http://www.w3.org/People/D%C3%BCrst/
- (Note: This is the percent-encoded form of an IRI.)
-
-
- Michel Suignard
- Microsoft Corporation
- One Microsoft Way
- Redmond, WA 98052
- U.S.A.
-
- Phone: +1 425 882-8080
- EMail: michelsu@microsoft.com
- URI: http://www.suignard.com
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 45]
-
-RFC 3987 Internationalized Resource Identifiers January 2005
-
-
-Full Copyright Statement
-
- Copyright (C) The Internet Society (2005).
-
- This document is subject to the rights, licenses and restrictions
- contained in BCP 78, and except as set forth therein, the authors
- retain all their rights.
-
- This document and the information contained herein are provided on an
- "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
- OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
- ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
- INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
- INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
- WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Intellectual Property
-
- The IETF takes no position regarding the validity or scope of any
- Intellectual Property Rights or other rights that might be claimed to
- pertain to the implementation or use of the technology described in
- this document or the extent to which any license under such rights
- might or might not be available; nor does it represent that it has
- made any independent effort to identify any such rights. Information
- on the IETF's procedures with respect to rights in IETF Documents can
- be found in BCP 78 and BCP 79.
-
- Copies of IPR disclosures made to the IETF Secretariat and any
- assurances of licenses to be made available, or the result of an
- attempt made to obtain a general license or permission for the use of
- such proprietary rights by implementers or users of this
- specification can be obtained from the IETF on-line IPR repository at
- http://www.ietf.org/ipr.
-
- The IETF invites any interested party to bring to its attention any
- copyrights, patents or patent applications, or other proprietary
- rights that may cover technology that may be required to implement
- this standard. Please address the information to the IETF at ietf-
- ipr@ietf.org.
-
-
-Acknowledgement
-
- Funding for the RFC Editor function is currently provided by the
- Internet Society.
-
-
-
-
-
-
-Duerst & Suignard Standards Track [Page 46]
-
diff --git a/txt/vfs-ideas.txt b/txt/vfs-ideas.txt
deleted file mode 100644
index 7b41a064..00000000
--- a/txt/vfs-ideas.txt
+++ /dev/null
@@ -1,425 +0,0 @@
-Subject: Plans for gnome-vfs replacement
-
-Recently there has been a lot of discussions about the platform and
-the correct stacking order and quality of the modules. Gnome-vfs
-is a clear problem in this discussion. Having spent the last 4 years
-as the gnome-vfs maintainer, and even longer as the primary gnome-vfs
-user (in Nautilus) I'm well aware of the problems it has. I think that
-we've reached a point where the problems in the gnome-vfs architecture
-and its position in the stack are now ranking as one of the most
-problematic aspects of the gnome platform, especially considering the
-enhancements and quality improvements seen in other parts of the
-platform.
-
-So, I think the time has come for a serious look at what gnome-vfs
-could be. I've spent much time last week thinking about the weaknesses
-and problems of the current gnome-vfs and possibilities inherent in a
-redesign, both having learnt from 7 years of gnome-vfs existance and
-the improvements in the platform (both Gnome and surrounding
-technologies) since 1999 when it was designed.
-
-As soon as you spend some time looking at this problem is evident that
-to solve the platform ordering issues we really need a clean cut from
-the current gnome-vfs. I think the ideal level for a VFS would be in
-glib, in a separate library similar to gthread or gobject. That way
-gtk+ would be able to integrate with it and all gnome apps would have
-access to it, but it wouldn't affect small apps that just wants to use
-the glib core. Furthermore, not being libglib lets us use GObjects in
-the vfs, which means we can make a more modern API. Of course, this
-places quite some limitations on the vfs, especially in terms of
-dependencies and how integration with a UI should work.
-
-Any thoughs on the design of a vfs to replace gnome-vfs must be based
-on a solid understanding of the problems with the current system, to
-avoid redoing old mistakes and to make sure that we solve all the
-known problems of the current system. So, I'm gonna start by
-describing what I see as the main architectural and "hard" problems in
-gnome-vfs.
-
-The first, and most often discussed problem is of course
-compatibility. The various desktops use different vfs implementations,
-so they can't read each others files. Many applications use no VFS
-at all and have no way to access files on vfs shares. And the
-existence of multiple vfs implementations makes it unlikely that they
-will start using one.
-
-Gnome-vfs has no concept of Display Names, something which is very
-useful in a gui based system. In some places we auto-generate virtual
-desktop files to get this feature, but that is very hackish and need
-support in all apps to understand them. This is also quite closely
-related to handling filename charset encoding, another very weak point
-in gnome-vfs. The ideal way to reference a file is the actual real
-identifer on disk, database, remote share or what have you, as that
-can be passed between implementations, used with other access methods,
-etc. But to display something useful to the user you really need a
-user understandable utf-8 encoded string and a way to map that to/from
-the filename.
-
-There is no support for icons at the level of gnome-vfs. This means
-that all users above the vfs must implement it themselves (e.g. in
-nautilus and in the file selector). Each implementation have its own
-bugs, maintainance load and risk for different behaviour. It also
-means that vfs backends cannot supply their own icons, something which
-might be very useful for e.g. a network share based on some new fancy
-web service.
-
-The abstraction that gnome-vfs use is very similar to the posix model,
-which is problematic in several ways. The posix model matches poorly
-with the sort of highlevel operations that gnome applications wants to
-do with the vfs. The vfs is not typically used for what I would call
-"implementation files", which are things like configuration files,
-data files shipped with apps, system files, etc, but rather for what
-I'd like to call "user document files". These are the kind of files
-you open, save, or download from the internet to look at. Applications
-that use these would like highlevel operations that match the kind
-of operations you use on them, like read-entire-file, save-file,
-copy-file, etc.
-
-The posix model is also a bad match when implementing gnome-vfs
-modules. It requires some features from the implementation that can be
-difficult or impossible to implement. For example, its not really
-possible to support seeking when writing to a file on a webdav share,
-because a webdav put operation is essentially just streaming a copy of
-the new file contents. We currently work around this by locally
-caching all the file data being written and then sending it all in the
-close() call. This is clearly suboptimal for a lot of reasons, like
-applications not expecting close() to take a long time, and not
-checking its error conditions very closely.
-
-Another problem is that the posix model doesn't contain explicit
-operations for some of the things applications need to do. So instead
-applications rely on well known knowledge of the behaviour of posix
-to implement these operations. However, such behaviour might not be
-guaranteed on some gnome-vfs backends. A common example is the atomic
-save operation. A typical way to implement this on posix is to write
-to a temporary file in the same directory, and then rename over the
-target file, thus guaranteeing an atomic replacement of the file on
-disk, or a failure that didn't affect the original file. Of course,
-if a gnome-vfs application would use this and the backend was a
-webdav share to a subversion repository you would get some really
-weird versioning history in the repository for no good reason. If the
-backend had its own implementation of the save operation we could get
-both optimal behaviour on each backend, and an application API that
-doesn't require arcane knowledge of the atomicity of renames.
-
-One of the most problematic aspects of gnome-vfs is its authentication
-framework. The way it works is that you register callbacks to handle
-the authentication dialog, and whenever any operation needs to do
-authentication these callbacks will be called. The idea is that a
-console application would register a set of callbacks that print
-prompts on the console, and a Gtk+ application would have a set of
-callbacks that displays dialogs. There is a set of standard dialog
-based callbacks in libgnomeui that you can install by calling
-gnome_authentication_manager_init(). From an initial look this seems
-like a reasonable approach, but it turns out that this creates a host
-of different problems.
-
-One problem is how you connect this to the application. A lot of
-people are unaware that you have to call gnome_auth_manager_init() to
-get authentication dialogs, or don't want to depend on libgnomeui to
-do so. So a lot of applications don't work with authentication. Those
-who do call it generally have pretty poor integration with the
-authentication dialogs. For instance, the general authentication
-dialogs can't be marked as parents of whatever dialog caused the
-authentication (because they have know whay of knowing what caused
-it), and all sorts of problems appear when there is a modal dialog
-displayed already.
-
-Another problem is the combination of blocking gnome-vfs calls and
-authentication. When calling a blocking operation like read() and it
-results in a password dialog we have to start up a recursive mainloop
-to display it. Not only is this unexpected for the application, it
-also brings with it all the type of reentrancy issues that we had in
-bonobo. Even worse, there is no way to make this threadsafe. To make
-it threadsafe the callback would have to take the gdk lock before
-doing any Gtk+ calls, but this would cause a deadlock if the
-application called it with the gdk lock held. If we don't take the
-gdk lock then you can't do blocking vfs calls on any thread but the
-mainloop, or you have to take the gdk lock on any gnome-vfs call.
-
-The authentication callbacks can appear at *any* gnome-vfs entry
-point, which makes it very hard to write gnome-vfs applications that
-don't accidentally trigger a lot of authentication dialogs. For
-instance, the tree sidebar in nautilus has to take particular care not
-to stat or otherwise look at the toplevel items until the user
-explicitly expands them, otherwise you'd get authentication dialogs
-every time you opened a window. Its also easy to get multiple
-authentication dialogs for the same entity.
-
-The way threads are used in gnome-vfs is problematic, both from the
-point of view of writing backends, and for users of the library. For
-users it forces the use of threading, even if the application doesn't
-use the asynchronous calls that use the threading. It also enforces
-the need for a gnome_vfs_init() function, as thread initialization
-must be done very early.
-
-For backend implementations the use of threads forces every
-backend to be threadsafe. Many of the backends are inherently single
-threaded, either because they use non-threadsafe libraries like the
-smb backend, or because the server being wrapped forces serialized
-access (like an ftp backend where you really only want one connection
-to the server).
-
-Backends run in context of the application using gnome-vfs, which can
-be a gtk+ app, but as well a console application, so they have no
-control or guarantee of their environment. For instance, they cannot
-rely on the existance of a mainloop, so there is no way to use
-e.g. timeouts to handle invalidation of caches. One way we have tried
-to solve this is to move some backends to the gnome-vfs daemon, where
-they can rely on the existance of the mainloop.
-
-Gnome-vfs use something called "gnome vfs uris" to identify
-files. These are similar, but not entierly identical to the types of
-uri used in webbrowsers. For instance, we often make us our own types
-of URIs when there is no official standard for them (although such
-standards might appear later, with incompatible behaviour). We also
-have a "well defined" posix-like type of behaviour that isn't the same
-as for web uris. The most extreme example would be mailto:, but even
-things like ftp:// uris are different. The ftp uri rfc explains how
-ftp:///dir/file.txt refers to $(login_dir)/dir/file.txt, and that you
-have to use ftp:///%2fdir/file.txt to refer to the absolute path
-/dir/file.txt on the server. Clearly we can't have pathname handling
-semantics that vary depending on the backend (no app would get it
-right), so we ignore the rfcs on this.
-
-Then there is the thing with escaping and unescaping uris. Although
-technically not very complex it is just are very hard to get right all
-the time. Among the most common questions on the gnome-vfs list is
-what the various escape/unescape functions does, what arguments has to
-be escaped, and how to display uris "nicely" (i.e. without escapes,
-although that makes them invalid uris). This is made extra complicated
-due to the poor handling of filename encodings and display names, and
-the fact that only "less common" cases (like spaces in filenames)
-break if you get it wrong.
-
-Last but not least, the fact that gnome-vfs uses something called a
-"uri" gives people the wrong impression of what the library is
-designed for. It causes people to complain when it doesn't have some
-support for mailto: links, and it makes people want support for
-cookies, extra http headers and other things typically used by a web
-browser. This isn't really the kind of use that vfs is targeted at. A
-library specific to that sort use would probably fit these apps much
-better.
-
-Most gnome-vfs state is tied to the application that uses it, which I
-think is quite unexpected by the user. For instance, when you log into
-a network share in nautilus and then click on a file to open it, the
-opening application will have to re-connect and re-authenticate to
-the share, much to the users surprise. I really think most people
-expect a login like that is somehow session global. We do sometimes
-misuse gnome-keyring to "solve" the authentication issue, but even
-then we still have multiple connections to the network share, which
-can cause problem, for instance with ftp shares that use round-robin
-dns where the mirrors aren't fully sync:ed up. Again, some backends
-(smb) are now in the daemon which solves this issue.
-
-gnome_vfs_xfer() is possibly the worst-API call in the whole gnome
-platform. Its a single, buggy, do-it-all function with shitloads of
-combinations of flags and arguments to do all sort of things, with
-little or no semantic specifications or testcases. Its also to a large
-extent unnecessary for most applications and could easily be part of
-the file manager instead of a generic library. I'm also not sure that
-the "first do preflight calculation, then execute operation" model it
-uses is right. It is inherently racy, since the target or source could
-easily change during the preflight, and it makes error reporting and
-handling much more complicated.
-
-The behaviour of symlink resolution in the UI has been discussed many
-times. Should clicking on a symlink "foo" in $dir go to $dir/foo or to
-the target directory. The Nautilus maintainers has decided that the
-best way to approach this is to have symlinks be used for "filesystem
-implementation" (like a symlink for /home -> /mnt/hdb2) and thus not
-be resolved on activation. However, we should (this hasn't been
-finished yet) support a different form of links (called "shortcuts" in
-the UI) that always resolve on activation. At the moment there is no
-support for anything like that in gnome-vfs, so we abuse desktop files
-for this. We even generate virtual in-memory desktop files in the smb
-backend to get this behaviour. Proper support for shortcuts in the
-vfs API would let apps automatically work without ugly desktop file
-hacks.
-
-Over the years gnome-vfs has accumulated a lot of cruft. It links to a
-lot of libraries, including openssl, gconf+ORBit2, avahi, dbus, popt,
-libxml, kerberos, libz and libresolv. Very few applications need all
-of these, yet every application that uses gnome-vfs links to all of
-them. Furthermore, some of the functionallity in gnome-vfs, like the
-wrapper for dns-sd, resolving, network utilities, ls parsing
-functions, ssl support, pty handling are perhaps not best suited for a
-vfs library, nor do they always have great apis and quality
-implementations. We could definately clean this up and minimize the
-APIs.
-
-At some point in time gnome_vfs_uri_is_local() started detecting and
-returning TRUE for NFS mounts and other type of local network
-mounts. This is both slow and unexpected, and has led to problems and
-unnecessary changes in many places.
-
-The way the cancellation API for asynchronous operations is set up
-creates races and fragile code. The main issue is that if you call
-cancel before the operation callback has been called the callback will
-not be called. However, the callback typically wants to free some sort
-of user_data object passed to it, so that has to be handled also when
-you call cancellation. Couple this with the fact that there is no
-destroy notifies and you can't cancel after the operation callback has
-been called and you get an extremely tricky setup of combined
-callbacks. Furthermore, if threads are used there are some inherent
-races wrt detecting if the callback has been called when cancel is
-called, making it essentially impossible to get this right.
-
-There are also a bunch of issues with the current gnome-vfs that could
-technically be fixed like support for hidden file flags,
-backend-extensible metadata, no standard vfs dialogs like progress
-bars, etc.
-
-Last week I started thinking about a new design for a gnome-vfs
-replacement that would solve most of these issues, and at the same
-time gives a correct ordering of the platform stack. I've come up with
-a highlevel architecture that I think will work, even though I haven't
-yet finished it in detail or gotten the API totally worked out. Its
-somewhat of a radical departure from gnome-vfs as it is today, so
-brace with me as I try to explain the model and the ideas behind it.
-
-The gnome-vfs model is what I would call stateless. You can at any
-time throw a URI at it and it will do everything required to access
-the location. There is no need to, nor is there a way to set up
-anything like a "session" with a remote share. Of course, in practice
-this is not the way network shares work, so all sorts of session
-initiation, caching and other magic happens under the covers to make
-it look stateless. This is the source of all the problems with the
-gnome-vfs authentication model.
-
-I'd like to propose using a stateful model, where you have to
-explicitly initiate a session ("mount" a share) before you can start
-accessing files. This will give a well specified time when all forms
-of authentication will happen, when applications expect it and when
-they can use a more expressive and suitable API for this kind of
-operation. The actual i/o operations will then never cause any sort of
-authentication issues, and can thus be purely non-graphical
-(i.e. glib-only apps can do i/o). I imagine all/most actual mounting
-of shares will happen in the file manager and the file selector, or at
-gnome-session startup, so applications don't really need to handle
-this themselves.
-
-Not only is the model stateful. I'd like all state to be session
-global. That is, all mounts and network connections are shared between
-all applications in the session. So, if you pass a file reference from
-one app to another there is no need to log in again or anything like
-that. I think this is what users expect.
-
-Having a global stateful model means all non-local vfs accesses go
-through the vfs daemon. This works pretty well with the smb backend in
-the current gnome-vfs, and smb is the backend most likely to have high
-bandwidth traffic, so this doesn't seem to be a large performance
-problem. Although we do have to take the performance aspect into
-consideration when designing the daemon.
-
-In order to avoid all the problems with threading described above the
-vfs daemon will not use threads. In fact, I think the best approach is
-to let each active mountpoint be its own process. That way we get
-robustness (one mount can't crash the others) and simplify the backend
-creation greatly (each backend fully controls its context). It also
-will let us do concurrent access to e.g. two smb shares (like a copy
-from one to the other). We can't really do this atm since the thread
-lock in the smb backend serializes such access. But with two smb
-processes this is not a problem.
-
-There might be an issue with using separate processes for the
-mountpoints bloating up the desktop, but I don't think that it will be
-much of a problem. None of these processes will use the gui libraries
-that are the real sources of unshared dirty memory use. I tried a
-simple process that just used gobject and ran a mainloop. It only used
-78k of dirty memory. Also, each server need only link to and
-initialize the few libraries it needs, further keeping memory use down
-and avoiding bloat in all applications (e.g. apps need not link to
-openssl).
-
-As a consequence of the stateful model we don't need the stateless
-properties that URIs has as identifier. To avoid all the problems
-comming from the use of URIs we use a much simpler form of
-identifier. Namely filenames, in a hierarchical tree with
-mountpoints. These filenames are from an extended set of strings that
-includes the set of normal filenames, but also includes some platform
-dependent extensions. On win32 the full set might be some form of
-stringified version of the ITEMIDLIST from the windows shell api, and
-on unix we would use some out of band prefix to mark a non-local
-filename.
-
-For example, we could be to use "//.network/" as a prefix for the vfs
-filename namespace. A smb share might then be accessed as
-"//.network/smb/computer:share/dir/file.txt", or a ftp share as
-"//.network/ftp/alex@ftp.gnome.org/dir/file.txt". With a setup like
-"//.network/$method/$mount_object/" it would be quite easy to find the
-process handling the mount. Just ask for a dbus named object like
-"org.glib.gvsf.smb.computer:share". It is also very easy to detect
-local filenames and short-circuit to in-process i/o.
-
-These filenames would be the real identifier for the files, and as
-such not really presentable to the user as it. You'd need to ask for
-the display name via the vfs to get a user readable utf8-encoded
-string for display.
-
-The set of operations on files and folders would be both simplified
-and extended. We'd remove complicated things like read+write access to
-a file, and give less posix-like guarantees. We also make seek and
-truncate support optional in the backend. But then we will extend the
-set of operations possible to allow things like copy on the remote
-side (to avoid a download+upload operation on copy) and to have
-a set of highlevel operations that applications want, like "save" that
-implements the best way to save for each particular backend.
-
-We support metadata like display name, mimetypes, icon, and some
-general information like length and mtime. But we make support for
-getting the full "struct stat" buffer backend optional, as that isn't
-a good abstraction for most backends. Also, the API will be designed
-on the idea that network latency is expensive, so that there will only
-be one call to stat() or readdir() needed to read all the metadata
-requested by the application. (Whereas posix will have readdir return
-only the names and force you to stat each file in a separate
-roundtrip.)
-
-We likely don't want the full gnome/unix vfs implementation in
-glib, instead glib will only ship an implementation of the vfs API for
-local file access, and one that communicates to the vfs
-daemon(s). Then we ship the daemon and the implementations of the
-various backends externally.
-
-We will also write a single gnome-vfs backend that allows access to
-all the glib vfs shares by using a uri like gvfs:///XXX that just maps
-to //.network/XXX. We can also implement a similar backend for kio so
-that kde applications can read and write to the shares.
-
-Furthermore, if FUSE is supported on the system we can write a FUSE
-filesystem so that we can access the files as $HOME/.network/XXX. This
-can be made extra nice if the application (like e.g. acrobat) uses
-the gtk+ file selector but not the vfs by having the file selector
-detect a filename like this and reverse-mapping it into a vfs pathname
-and use the vfs for folder access.
-
-I've been doing some initial sketching of the glib API, and I've
-started by introducing base GInputStream and GOutputStream similar to
-the stream objects in Java and .Net. These have async i/o support and
-will make the API for reading and writing files nicer and more
-modern. There is also a GSeekable interface that streams can
-optionally implement if they support seeking.
-
-I've also introduced a GFile object that wraps a file path. This means
-you don't have to do tedious string operations on the pathnames to
-navigate the filesystem. It also means we can use the openat() class
-of file operations when traversing the filesystem tree, avoiding some
-forms of races when we do things like recursive copies.
-
-To support the stateful model and still have some form of caching we
-will also need to add some cache specific api so that you can trigger
-a reload of information from a directory. Otherwise a reload operation
-in the file manager wouldn't always get the latest state on something
-like a ftp share where we cache things aggressively.
-
-I have some initial code here for some of the basic APIs, but its far
-from finished and I'd like to spend some more time working on it
-before I present it. However, I think the general architecture is
-pretty sound and in a state where it can be discussed.
-
-Hopefully this description of my plans is enought to make people
-understand some of my ideas and allow us to start and discussion about
-the future of gnome-vfs. Also, consider it a heads up that I and other
-people will likely be working on this this in the future.
diff --git a/txt/vfs-names.txt b/txt/vfs-names.txt
deleted file mode 100644
index 25833d7c..00000000
--- a/txt/vfs-names.txt
+++ /dev/null
@@ -1,142 +0,0 @@
-Local filenames (in utf8 mode)
-1) standard: /etc/passwd
-2) utf8 and spaces: "/tmp/a åäö.txt" (encoding==utf8)
-3) latin-1 and spaces: "/tmp/a åäö.txt" (encoding==iso8859-1)
-4) filename without encoding: "/tmp/bad:\001\010\011\012\013" (as a C string)
-5) mountpoint: /mnt/cdrom (cd has title "CD Title")
-
-Ftp mount to ftp.gnome.org
-(where filenames are stored as utf8, this is detected by using
- ftp protocol extensions (there is an rfc) or by having the user
- specify the encoding at mount time)
-
-6) normal dir: /pub/sources
-7) valid utf8 name: /dir/a file öää.txt
-8) latin-1 name: /dir/a file öää.txt
-
-Ftp mount to ftp.gnome.org (with filenames in latin-1)
-9) latin-1 name: /dir/a file öää.txt
-
-backend that stores display name separate from real name. Examples
-could be a flickr backend, a file backend that handles desktop files,
-or a virtual location like computer:// (which is implemented using
-virtual desktop files atm).
-
-10) /tmp/foo.desktop (with Name[en]="Display Name")
-
-special cases:
-ftp names relative to login dir
-
-Places where display filenames (i.e utf-8 strings) are used:
-
-A) Absolute filename, for editing (nautilus text entry, file selector entry)
-B) Semi-Absolute filename, for display (nautilus window title)
-C) Relative file name, for display (in nautilus/file selector icon/list view)
-D) Relative file name, for editing (rename in nautilus)
-E) Relative file name, for creating absolute name (filename completion for a)
- This needs to know the exact form of the parent (i.e. it differs for filename vs uri).
- I won't list this below as its always the same as A from the last slash to the end.
-
-This is how these work with gnome-vfs uris:
-
- A B C D
-1) file:///etc/passwd passwd passwd passwd
-2) file:///tmp/a%20%C3%B6%C3%A4%C3%A4.txt a åäö.txt a åäö.txt a åäö.txt
-3) file:///tmp/a%20%E5%E4%F6.txt a ???.txt a ???.txt (invalid unicode) a ???.txt
-4) file:///tmp/bad%3A%01%08%09%0A%0B bad:????? bad:????? (invalid unicode) bad:?????
-5) file:///mnt/cdrom CD Title (cdrom) CD Title (cdrom) CD Title
-6) ftp://ftp.gnome.org/pub/sources sources on ftp.gnome.org sources sources
-7) ftp://ftp.gnome.org/dir/a%20%C3%B6%C3%A4%C3%A4.txt a åäö.txt on ftp.gnome.org a åäö.txt a åäö.txt
-8) ftp://ftp.gnome.org/dir/a%20%E5%E4%F6.txt a ???.txt on ftp.gnome.org a ???.txt (invalid unicode) a ???.txt
-9) ftp://ftp.gnome.org/dir/a%20%E5%E4%F6.txt a åäö.txt on ftp.gnome.org a åäö.txt a åäö.txt
-10)file:///tmp/foo.desktop Display Name Display Name Display Name
-
-The stuff in column A is pretty insane. It works fine as an identifier
-for the computer to use, but nobody would want to have to type that in
-or look at that all the time. That is why Nautilus also allows
-entering some filenames as absolute unix pathnames, although not all
-filenames can be specified this way. If used when possible the column
-looks like this:
-
- A
-1) /etc/passwd
-2) /tmp/a åäö.txt
-3) file:///tmp/a%20%E5%E4%F6.txt
-4) file:///tmp/bad%3A%01%08%09%0A%0B
-5) /mnt/cdrom
-6) ftp://ftp.gnome.org/pub/sources
-7) ftp://ftp.gnome.org/dir/a%20%C3%B6%C3%A4%C3%A4.txt
-8) ftp://ftp.gnome.org/dir/a%20%E5%E4%F6.txt
-9) ftp://ftp.gnome.org/dir/a%20%E5%E4%F6.txt
-10)/tmp/foo.desktop
-
-As we see this helps for most normal local paths, but it becomes
-problematic when the filenames are in the wrong encoding. For
-non-local files it doesn't help at all. We still have to look at these
-horrible escapes, even when we know the encoding of the filename.
-
-The examples 7-9 in this version shows the problem with URIs. Suppose
-we allowed an invalid URI like "ftp://ftp.gnome.org/dir/a åäö.txt"
-(utf8-encoded string). Given the state inherent in the mountpoint we
-know what encoding is used for the ftp server, so if someone types it
-in we know which file they mean. However, suppose someone pastes a URI
-like that into firefox, or mails it to someone, now we can't
-reconstruct the real valid URI anymore. If you drag and drop it
-however, the code can send the real valid uri so that firefox can load
-it correctly.
-
-So, this introduces two kinds of of URIs that are "mostly similar" but
-breaks in many nonobvious cases. This is very unfortunate, imho not
-acceptable. I think its ok to accept a URI typed in like
-"ftp://ftp.gnome.org/dir/a åäö.txt" and convert it to the right uri,
-but its not right to display such a uri in the nautilus location bar,
-as that can result in that invalid uri getting into other places.
-
-Since I dislike showing invalid URIs in the UI I think it makes sense
-to create a new absolute pathname display and entry format. Ideally
-such a system should allow any ascii or utf8 local filename to be
-represented as itself. Furthermore it would allow input of URIs, but
-immediately convert them to the display format (similar to how
-inputing a file:// uri in nautilus displays as a normal filename).
-
-One solution would be to use some other prefix than / for
-non-local files, and to use some form of escaping only for non-utf8
-chars and non-printables. Here is an example:
-
- A
-1) /etc/passwd
-2) /tmp/a åäö.txt
-3) /tmp/a \xE5\xE4\xF6.txt
-4) /tmp/bad:\x01\x08\x09\x0A\x0B
-5) /mnt/cdrom
-6) :ftp:ftp.gnome.org/pub/sources
-7) :ftp:ftp.gnome.org/dir/a åäö.txt
-8) :ftp:ftp.gnome.org/dir/a \xE5\xE4\xF6.txt
-9) :ftp:ftp.gnome.org/dir/a åäö.txt
-10)/tmp/foo.desktop
-
-Under the hood this would use proper, valid escaped URIs. However, we
-would display things in the UI that made some sense to users, only
-falling back to escaping in the last possible case.
-
-The API could look something like:
-
-GFile *g_file_new_from_filename (char *filename);
-GFile *g_file_new_from_uri (char *uri);
-GFile *g_file_parse_display_name (char *display_name);
-
-Another approach (mentioned by Jürg Billeter on irc yesterday) is to
-move from a pure textual representation of the full uri to a more
-structured UI. For example the ftp://ftp.gnome.org/ part of the URI
-could be converted to a single item in the entry looking like
-[#ftp.gnome.org] (where # is an ftp icon). Then the rest of the entry
-would edit just the path on the ftp server, as a local filename. The
-disadvantage here is that its a bit harder to know how to type in a
-full pathname including what method to use and what server (you'd type
-in a URI). This isn't necessarily a huge problem if you rarely type in
-remote URIs (instead you can follow links, browse the network, add
-favourites, etc).
-
-I don't know how hard this is to do from a Gtk+ perspective
-though. Its somewhat similar to what the evolution address entry does.
-